冒号课堂§1.4:初识范式

冒号课堂

第一课 开班导言(4)

 

1.4初识范式——程序王国中的世界观与方法论

言者所以在意,得意而忘言                                                ——《庄子·外物》

 

关键词:编程范式,编程语言,Object-Oriented,面向对象,对象导向

摘要:初步引入编程范式

 

预览

·           得形而忘意,无异舍本逐末;得意而忘形,方能游刃有余

·           当你编程之时,便进入到自己创造的世界之中。这是你的世界,只有注入你的想象力、创造力和激情,它才有勃勃生机。你编写的岂止是代码,分明还有乐曲;你敲击的岂止是键盘,分明还有琴键;你运行的岂止是程序,分明还有世界。当优美的旋律奏起,整个世界都随之翩然起舞,一种莫可名状的满足是否会充溢你的全身?

·           找对象是“对象导向”的,去约会是“面向对象”的

 

提问 

  • 什么是编程范式?
  • 编程范式与编程语言的关系是什么?

 

讲解  

问号第一个从小说里走出来,问道:“刚才谈到了低级语言和中级语言,现在该谈高级语言了吧?”

冒号微叹:“高级语言大概有近千种,流行的也不下几十种,有时候选择过多反而无所适从啊。”

逗号不以为然:“最流行的不就那么几个:JavaC++C#还有VB吗?”

不意此言遭到冒号连珠炮似的反问:“可你知道它们为什么会流行吗?是不是学会这几样就是一个合格的程序员了?它们会不会变得不那么流行,甚至被其他语言取代?如果不会,为什么?如果会,又怎么办?”

逗号赧然语塞。

冒号口气放缓:“掌握一门语言的语法、工具和技巧固然重要,但那只相当于学会一门兵器的招法,更重要的当然是心法。招法重形,心法重意。得形而忘意,无异舍本逐末;得意而忘形,方能游刃有余。下面要谈的就是一种心法:编程范式。”

问号不解:“编程范式?听上去很学究,那是什么东东?”

冒号续道:“范式译自英文的paradigm,也有译作典范、范型、范例的。所谓编程范式programming paradigm),指的是计算机编程的基本风格或典范模式。借用哲学的术语,如果说每个编程者都在创造虚拟世界,那么编程范式就是他们置身其中自觉不自觉采用的世界观和方法论。”

叹号吸口气:“好抽象哦!”

句号心中一动:“您是说我们都是虚拟世界的创造者,都在创造自己的黑客帝国?”

大家不禁莞尔。

冒号动情地说:“难道不是吗?只不过帝国有大小之分、优劣之别罢了。当你编程之时,便进入到自己创造的世界之中。这是你的世界,只有注入你的想象力、创造力和激情,它才有勃勃生机。你编写的岂止是代码,分明还有乐曲;你敲击的岂止是键盘,分明还有琴键;你运行的岂止是程序,分明还有世界。当优美的旋律奏起,整个世界都随之翩然起舞,一种莫可名状的满足是否会充溢你的全身?”

大家都被冒号诗化的语言感染了,没想到编程也可以如此感性。

良久,引号试探地问:“面向对象编程就是一种编程范式吧?”

冒号点头:“不错,它是时下最流行的一种编程范式。顺便说一句,‘面向对象’ 译自Object-Oriented,但‘面向’二字令人费解。据说有本书叫‘面向对象方法’,比别的计算机书都畅销,知道为什么吗?不少同学把它当成恋爱指南买走了。 ”

全班笑倒。

冒号认真地说:“将Object-Oriented译成‘对象导向’[1],虽然稍嫌拗口,但更贴切。并非刻意要咬文嚼字,这关系到对编程范式的理解。我们知道,编程是为了解决问题,而解决问题可以有多种视角和思路,其中普适且行之有效的模式被归结为范式。由于着眼点和思维方式的不同,相应的范式自然各有侧重和倾向,因此一些范式常用 ‘oriented’来描述。换言之,每种范式都引导人们带着某种的倾向去分析问题、解决问题,这不就是‘导向’吗?而‘面向’ 的宾语往往是预先确定的目标,如面向世界、面向未来、面向用户、面向问题等等。此外,‘面向’强调静态结果,而‘导向’强调动态趋势,显然后者更生动,也更符合编程的特质[2]。”

句号一语惊人:“找对象是‘对象导向’的,去约会是‘面向对象’的。”

全班再倒。

句号得意地解释:“按梦中情人的标准去找对象,具体目标未定但选择倾向已定,这就是一种导向,而且是对象导向。找到之后再约会,不就面向对象了吗?”

众人称绝。

 “我们是来谈编程范式的,不是来谈对象的。” 冒号一脸的道貌岸然,“编程范式是抽象的,必须通过具体的编程语言来体现。它代表的世界观往往体现在语言的核心概念中,代表的方法论往往体现在语言的表达机制中。一种范式可以在不同的语言中实现,一种语言也可以同时支持多种范式。任何语言在设计时都会倾向某些范式、同时回避某些范式,由此形成了不同的语法特征和语言风格。”

 

插语

[1] 港澳台地区将其译为“物件导向”。即使单从字面上翻译,oriented是“以...为方向的;以...为目的的;导向的;定向的”的意思,也比译为“面向”更合适。

[2] 作为类比,经济学中的“market-oriented”译为“市场导向(或取向)的”的远多于译为“面向市场的”。

 

总结

  • 编程范式是计算机编程中的基本风格和典范模式,是编程者在其所创造的虚拟世界中自觉不自觉采用的世界观和方法论。每种范式都引导人们带着其特有的倾向和思路去分析和解决问题。OOP就是一种编程范式。
  • Object-Oriented多译作“面向对象”,不如“对象导向”贴切。
  • 如果把一门编程语言比作兵器,它的语法、工具和技巧等是招法,它采用的编程范式则是心法。
  • 抽象的编程范式需要通过具体的编程语言来体现。范式的世界观体现在语言的核心概念之中,范式的方法论体现在语言的表达机制中。一种语言的语法和风格与其所支持的编程范式密切相关。

 

“”参考

[1] WikipediaProgramming paradigmhttp://en.wikipedia.org/wiki/Programming_paradigm

[2] Stephen H. KaislerSOFTWARE PARADIGMSNew JerseyWiley200521-22

 

posted on 2009-03-17 15:10  郑晖  阅读(3100)  评论(14编辑  收藏  举报

导航