随着编程(programming、偶不喜欢说程序设计)方法学和软件工程研究的深入,特别是OO思想的普及,范式(paradigm)以及编程范式等术语渐渐出现在人们面前。
面向对象编程(OOP)常常被誉为是一种革命性的思想,正因为它不同于其他的各种编程范式;编程范式也许是学习任何一门编程语言时要理解的最重要的术语。
然而,在国内逐步了解“范式/编程范式”时,英文中该术语已经处于abuse的地步。
§1 基本含义
托马斯.库恩提出“科学的革命”的范式论之后,Robert Floyd在1979年图灵奖的颁奖演说中使用了编程范式一词。编程范式一般包括三个方面,以OOP为例:
1. 学科的逻辑体系:如类/对象、继承、动态绑定、方法改写、对象替换等等机制。
2. 心理认知因素:按照面向对象编程之父Alan Kay的观点,“计算就是模拟”。OO范式极其重视隐喻(metaphor)的价值,通过拟人化,按照自然的方式模拟自然。
3. 自然观:强调程序的组织技术,视程序为松散耦合的对象/类的集合,以继承机制将类组织成一个层次结构,把程序运行视为相互服务的对象们之间的对话。
简单的说,编程范式是程序员看待程序应该具有的观点。下面是常见的编程范式和常用的一些编程语言:
图:编程范式与编程语言
一般而言,编程语言的设计者常常让该语言支持某一特定的范式,如Java语言只支持面向对象的范式;但编程语言也可能支持多种范式,如C++语言支持面向对象的范式,同时也支持过程式范式。我们很小心的说一些语言支持某种编程范式,而不说它们实践或贯彻特定的编程范式,因为,程序员如何使用一种语言仅仅依赖于程序员。
面向对象技术一方面借鉴了哲学、心理学、生物学的思考方式,另一方面,它是建立在其他编程技术之上的,是以前的编程思想的自然产物。
如果说结构化软件设计是将函数式编程技术应用到命令式语言中进行程序设计,面向对象编程不过是将函数式模型应用到命令式程序中的另一途径,此时,模块进步为对象,过程龟缩到class的成员方法中。OOP的很多技术——抽象数据类型、信息隐藏、接口与实现分离、对象生成功能、消息传递机制等等,很多东西就是结构化软件设计所拥有的、或者在其他编程语言中单独出现。但只有在面向对象语言中,他们才共同出现,以一种独特的合作方式互相协作、互相补充。
§2 库恩与paradigm
单词paradigm并不是通过查字典就能够翻译的。 虽然paradigm的原意是example 示例、pattern模式 or model.典范、范例、模型。比如说,为了帮助我们理解某些英文动词的用法,老师会给一些例句(paradigm、example);在容易理解的计算机编程书籍中,都有大量的例程(范例)。的确,在有些计算机书籍中,将paradigm称为“范例”——指一种示范性的模型或例子,它提供了一种组织信息的形式;面向对象的范例强调以行为和责任为基础来组织信息【Timothy Budd,《面向对象Java编程思想》(修订版),清华大学出版社,2002-8】。
真正使paradigm广为流行的原因是1962年,美国科学史学家和科学哲学家托马斯·库恩(Thomas S. Kuhn)所著的著名书籍The Structure of Scientific Revolutions(《科学革命的结构》),其核心——范式论在自然科学家中引起强烈的共鸣,并波及社会科学的广泛领域。
在李宝恒、纪树立翻译的《科学革命的结构》中,paradigm翻译为“规范”,而在大量的哲学、社会科学中,一般称为“范式”。
所谓“范式”,实际上就是研究立场、观点和方法的综合体,其内容表现为对科学研究中各种信念、认知成果、研究方法的整合与升华,是一种理论模型、框架,一种思维方式和理解现实的思想体系,以及科学共同体的最高共识。或者说:它包括三个方面:
1. 科学理论体系。
2. 运用该理论体系的心理认知因素。
3. 指导和联系上述两者(理论体系和心理认知)的自然观
【全增嘏,《西方哲学史》】
在某种程度上,类似于我们习惯的术语“世界观”、毛泽东思想之“思想”。托马斯.库恩的范式论认为:通过对科学史的研究发现,科学不仅仅是某些已存在的知识体系,而是一定社会集团(科学共同体)按照一套公认的信念所进行的“专业活动”,这种活动表明,科学的发展是包括自然观、理论体系和心理认识在内的范式的运动。而范式的运动导致科学的革命。