冒号课堂§2.3:对象范式

第二课 重要范式(3)

2.3 对象范式——民主制社会的编程法则

民为贵,社稷次之,君为轻                      ——《孟子·尽心下》

关键词:编程范式,OOP,面向对象,过程式编程

摘要: OOP简谈

?提问

OOP是一种特殊的命令式吗?

OOP的基本思想是什么?

OOP到底好在哪里?

OOP将要一统天下吗?

过程式编程与OOP在设计理念上有什么差异?

:讲解

短憩之后,引号迫不及待地问:“面向对象的范式应该是一种特殊的命令式吧?”

“面向对象?”冒号咕哝着,“姑且称之为OO或对象式吧,既不标新立异,也不以讹传讹。在回答你的问题之前,请先回答我的:什么是OOP?”

引号应答如流:“OOP(Object-Oriented programming)是一种计算机编程模式,它以对象作为问题空间的基本元素,利用对象和对象间的相互作用来设计程序。所谓对象,是实际问题中实体的抽象,具有一定的属性和功能。OOP的三个基本特性是:封装性、继承性和多态性。所谓封装性就是——”

冒号作了个暂停的手势:“OOP的的基本特性相信大家早就耳熟能详了,那么根据你刚才的定义,能否得出OOP一定是命令式的结论?”

引号歪头想了一阵,答道:“从定义上好像并不能得出,难道C++、Java、C#不是命令式的吗?”

冒号回答:“当然是,但这不妨碍Clos成为OO版的Lisp,而Prolog也有不少融入OO特征的扩充,如Visual Prolog、Logtalk等。OOP虽然是在命令式的基础上发展起来的,但其核心思想可泛化为:以数据为中心组织逻辑,将系统视为相互作用的对象集合,并利用继承与多态来增强重用性。这种思想也能应用到函数式和逻辑式中,只不过对象的方法从命令式中的过程分别换成函数式中的函数和逻辑式中的断言罢了。大致说来,命令式、函数式和逻辑式互相平行,而OOP与它们正交。”

问号提问:“OOP已经成为一种潮流,上堂课列举的十二种流行语言中只有C不是OO的,这是否意味着OOP将要一统天下?”

“严格说来,VB(VB.NET除外)和JavaScript也不是OO的,只是基于对象的(Object Based)[1]。” 冒号纠正道,“至于OOP是否会一统天下,答案是否定的。首先,与能独当一面的三类最基本的范式不同,纯粹的OOP是不存在的[2],必须结合其他范式;其次,世上没有包治百病的万灵丹方,OOP也不例外。用软件业的行话来说:没有银弹(No silver bullet)[3]。OOP最适用于大型复杂的、交互式的、尤其是与现实世界密切相关的系统,但在小型应用、数学计算、符号处理等方面并无优势。需要指出的是,语言和范式的流行,与大公司支持和商业推动是密切相关的。有人说OOP其实是MOP(Money-Oriented Programming),即以金钱为导向的。虽有过激之嫌,但有经验的股民都知道,有主力运作的股票总是涨得快一些的。当然OOP能流行,自有独到之处,谁能说说它到底好在哪里?”

逗号抢答:“OOP能提高软件可重用性、可扩展性和灵活性。”

冒号反问:“为什么过程式编程的可重用性、可扩展性和灵活性就差呢?”

感到来者不善,逗号有点发虚:“因为OOP具有信息隐藏、继承和多态的特征。”

冒号并不买帐:“首先,将可重用性、可扩展性和灵活性与OOP划等号,是只见树木,不见森林——那是所有范式和语言的共同目标。其次,以C语言为例,信息隐藏可用关键字static来实现;继承可用合成( composition)来代替;多态虽然困难些,也有变通之法。更何况这些只是手段而非目的,只要设计合理,C程序同样具有可重用性、可扩展性和灵活性,性能效率还更优越。即使在OOP日益风行的今天,C的占有率始终稳踞前列,许多大型复杂软件如操作系统、数据库等仍以C为主,这足以证明其仍堪大用。”

时间: 2024-11-10 00:20:47

冒号课堂§2.3:对象范式的相关文章

冒号和他的学生们(连载7)——对象范式

对象范式 民为贵,社稷次之,君为轻 --<孟子·尽心下> 短憩之后,引号迫不及待地问:"面向对象的范式应该是一种特殊的命令式吧?" "面向对象?"冒号咕哝着,"姑且称之为OO或对象式吧,既不标新立异,也不以讹传讹.在回答你的问题之前,请先回答我的:什么是OOP?" 引号应答如流:"OOP是一种计算机编程模式,它以对象作为问题空间的基本元素,利用对象和对象间的相互作用来设计程序.所谓对象,是实际问题中实体的抽象,具有一定的属性

冒号课堂§2.1:命令范式

第二课 重要范式(1) 课前导读 这一课讨论了五个最重要的编程范式:命令式.函数式.逻辑式.对象式和并发式.这些只是入门性的介绍,读者领会其精神即可,细节上不必过于在意. 本课共分四节-- 1.命令范式 2.声明范式 3.对象范式 4.并发范式 2.1命令范式--一切行动听指挥 人生最伟大的目标是行动 --<洛克菲勒的忠告> 关键词:编程范式,命令式,结构化编程,流程图 摘要:命令式编程简谈 ?提问 什么是命令式编程?它为什么是最常见的编程范式? 什么是结构化编程?结构化编程的主要思想是什么?

冒号课堂§4.4:情景范式

第四课 重温范式(4) 4.4情景范式--餐馆里的编程范式 理论是认生的孩童,多陪他玩玩,自会活泼起来 --题记 关键词: 编程范式,情景编程 摘要: 编程范式在餐馆中的应用 ?提问 l 什么是闭包?为什么被称为闭包?它有什么作用? l 规则引擎有何用处? l 能否设想一个生活中的场景,把介绍的九种编程范式都用上? :讲解 叹号摘下眼镜,揉了揉眼:"范式再好,多了也难免有些审美疲劳." 逗号也搓着太阳穴:"这段时间脑子被灌得沉甸甸的." "彼此彼此!你们的

冒号课堂§3.2:超级范式

第三课 常用范式(2) 3.2 超级范式--提升语言的级别 智能繁衍:机器人生产机器人 --题记 关键词:编程范式,模板元编程,元编程,语言导向式编程,产生式编程 摘要:元编程简谈 ?提问 什么是元编程?它与通常的编程有何不同? 元编程有何用处?它有哪些应用? 相比自编的元程序,用IDE自动生成的代码有什么缺陷? 语言导向式编程有何优点?它与元编程有何关系? 元编程与产生式编程有何异同? 为什么说元程序是一种最高级的程序? :讲解 问号忽然想起一事,问道:"有一本名为<C++模版元编程&g

冒号课堂§4.3:汇总范式

第四课 重温范式(3) 4.3汇总范式--一张五味俱全的大烙饼 形者神之质,神者形之用 --<范缜·神灭论> 关键词: 编程范式,设计模式 摘要: 总结编程范式 ?提问 l 编程范式与设计模式有什么区别? l 编程范式的核心价值是什么? l 总结前面介绍的编程范式,它们各自有哪些代表语言?核心概念和运行机制是什么?针对的问题和主要的目的是什么?实现原理是什么?常见的应用有哪些?有什么不足之处? :讲解 稍事休整后,大家重新团结在以冒号为中心的周围. 问号再度发问:"编程范式与设计模式

冒号课堂§4.2:逻辑范式

第四课 重温范式(2) 4.2逻辑范式--当算法失去了控制 道常无为而无不为 --<老子·道经> 关键词: 编程范式,逻辑式编程,Prolog,算法,逻辑,控制 摘要: 再谈逻辑式编程 ?提问 衡量软件复杂度是由代码的长度决定的吗? 为什么逻辑式的编码一般比过程式的更简洁? 逻辑式编程相比命令式编程有哪些优势和劣势? :讲解 问号提出:"逻辑式编程不是也很特别吗?前面似乎介绍得也不多." "那我们就用逻辑式语言Prolog再实现一次quicksort吧."

冒号课堂§4.1:函数范式

第四课 重温范式(1) 课前导读 本课对函数式编程与逻辑式编程作了更详细的展开,并对前面介绍的范式进行了汇总分析,最后用情景式编程贯穿所学范式. 本课共分四节-- 函数范式 逻辑范式 汇总范式 情景范式 4.1 函数范式--精巧的数学思维 知不知,上:不知不知,病 --<老子·德经> 关键词:编程范式,函数式编程,Haskell,Groovy 摘要: 再谈函数式编程 ?提问 掌握编程范式对编程语感的提高有什么作用? 为什么声明式程序一般比命令式程序更简洁? 函数式编程有哪些特征?为何简洁而不失

冒号课堂§3.3:切面范式

第三课 常用范式(3) 3.3 切面范式--多角度看问题 横看成岭侧成峰 --<苏轼·题西林壁> 关键词:编程范式,SoC,DRY,AOP,Aspect,join point,pointcut,advice,OOP 摘要:AOP简谈 ?提问 什么是SoC和DRY? 如何有效地避免紊乱.松散.重复的代码? 抽象与分解的原则是什么? 什么是横切关注点? 接入点与切入点有何区别? 什么是编织?有哪些不同的编织方法? 实施AOP有哪些步骤? 为什么说AOP是OOP的一种补充? 为什么提倡尽可能地阅读原

冒号课堂§3.1:泛型范式

第三课 常用范式(1) 课前导读 这一课介绍了四个常用的编程范式:泛型式.元编程.切面式和事件驱动式. 本课共分四节-- 1.泛型范式 2.超级范式 3.切面范式 4.事件驱动 3.1泛型范式--抽象你的算法 以类行杂,以一行万 --<荀子•王制篇> 关键词:编程范式,泛型编程,STL,算法 摘要:泛型式编程简谈 ?提问 泛型编程有哪些优点? STL有哪些要素?各自有什么作用? 泛型编程的泛化对象是什么? 泛型编程的核心思想是什么? :讲解 冒号重新开讲:"你们会不会经常遇到这样的情