Atitit . 编程模型的变革总结
1. 面向对象与面向过程程序设计有如下不同: 1
1.1. 函数与数据是否分离.... 1
1.2. 以功能为中心;以数据为中心..... 1
1.3. 事件驱动 2
1.4. 继承和多态 2
2. 面向对象的弊端 2
2.1. OO的弊端就是:设计抽象和封装的时间远远超过你解决问题的时间。 2
2.2. 复杂的数据类型 2
2.3. 并发编程/并行计算/多核编程 2
2.4. “面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。
2
2.5. 面向对象的可维护性::最强的耦合关系 3
3. 解决之道:: 3
3.1. 逻辑式语言结构 3
3.2. 面向模块、库或者接口(module/package)也许是更好的选择 3
3.3. Aop /泛型程序设计 是个不错的模式 3
3.4. 函数式语言也许可能会取代面向对象技术成为主流方式 4
3.5. 不用构建复杂的数据类型,数据可由函数来表达 4
4. 并发编程/并行计算/多核编程 5
5. 淋巴 5
6. 参考 5
1. 面向对象与面向过程程序设计有如下不同:
1.1. 函数与数据是否分离....
(1)面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来;面向对象程序设计方法将数据和对数据的操作封装在一起,作为一个整体来处理。函数与数据是否分离。
1.2. 以功能为中心;以数据为中心.....
(2).面向过程程序设计方法以功能为中心来设计功能模块,难于维护;而面向对象程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护。以功能为中心;以数据为中心。
1.3. 事件驱动
3)面向过程程序的控制流程由程序中预定顺序来决定;面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际需要。预定顺序;由运行时各种事件的实际发生来触发
1.4. 继承和多态
4)(4)面向对象程序设计方法可以利用框架产品(如MFC,Microsoft Foundation Classes)进行编程。面向对象可利用框架面向对象和面向过程的根本差别,在于封装之后,面向对象提供了面向过程不具备的各种特性,最主要的,就是继承和多态。
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:[email protected]
转载请注明来源: http://blog.csdn.net/attilax
2. 面向对象的弊端
2.1. OO的弊端就是:设计抽象和封装的时间远远超过你解决问题的时间。
2.2. 复杂的数据类型
2.3. 并发编程/并行计算/多核编程
2.4. “面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。
你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而其还有整个丛林。” — Joe Armstrong(Erlang语言发明人)
2.5. 面向对象的可维护性::最强的耦合关系
面向对象从一开始就要求我们完全了解各个子类的不同,并将他们的“共性”提取到父类里,从而实现代码复用, 在这个过程中自然形成了一种最强的耦合关系
3. 解决之道::
3.1. 逻辑式语言结构
3.2. 面向模块、库或者接口(module/package)也许是更好的选择
在一个需求在不断变化,业务逻辑在不断增加的复杂系统中,面向模块、库或者接口(module/package)也许是更好的选择。
3.3. Aop /泛型程序设计 是个不错的模式
面向对象程序设计与泛型程序设计的比较:
泛型程序设计比面向对象程序设计具有更高的抽象能力。面向对象程序设计与泛型程序设计的抽象机制的区别是十分明显的。由于面向对象程序设计以共同的基类为共性抽象,而泛型程序设计是以共同的需求条件为共性抽象。因此,泛型程序设计比面向对象程序设计具有更高的抽象能力,并且包含了面向对象程序设计的核心内容。一般来讲,直接以对象类为概念进行抽象,抽象的程度并不高,而直接以对象类满足的需求条件进行分类和抽象,则可以获得非常高级别的抽象,并会带来更大的通用性和运行效率。
泛型程序设计比面向对象程序设计更具有通用性。面向对象程序设计的通JFfj性是建立在类继承机制上,这导致了面向对象的算法只能被用在有限的类型上,而泛型程序设计的算法是建 在结构一致性上。简单说,结构一致性是指语法结构上的一致性。泛型程序设计假定某个特定的语法跟其语义能够对应起来。譬如说,在C++中,std::sort()算法的一个版本只要求其操作数支持operator<,基本上这就是说只要对于其操作数来说“a<b”能够通过编译,该算法就能成功。而面向对象程序设计,利用面向对象方法设计完成的通用算法要求其操作数要继承自某个特定的基类。所以说,泛型程序设汁算法能够运用到的类型集是无限的/非绑定的。
结束语
面向对象程序设计方法与泛型程序设计方法各有千秋。在某些情况下,良好的泛型程序设计规则可能违背良好的面向对象的程序设计方法的规则,反之亦然。但这两种程序设计方法并不是水火不容,而是相得益彰。将这两种方法巧妙地结合,便形成了程序设计的新思维,可以更有效地解决应用领域的实际问题。
3.4. 函数式语言也许可能会取代面向对象技术成为主流方式
在计算机科学发展的早期,对于计算机的非数值计算应用的讨论,以及对于可计算性问题的研究和发展,大抵确立了几种的计算模型:递归函数类、图灵机、 Lambda演算、Horn子句、Post系统等等。其中递归函数类是可计算性问题的数学解释;Horn子句是prolog这类逻辑语言的理论基 础;lambda演算成为了函数式语言的理论基础;图灵机是图灵解决可计算问题的时候所设计的装置,其后成为计算机的装置模型,与图灵机相关的自动机以及 冯诺依曼结构,成为了命令式语言的理论基础
3.5. 不用构建复杂的数据类型,数据可由函数来表达
抽象数据类型(ADT,Abstract Data Type)为源起,发展出来的面向对象技术。也就是首先被C++所采用的面向对象技术。
C++作为“更好的C”,继承了C语言对于程序的看法,也就是数据抽象(Data Abstraction)和过程。面向对象技术在C++中,是作为一种更好的数据抽象的方式而存在的。
数据抽象在这类面向对象语言中是一种关键的抽象方式。所谓数据抽象,在计算机发展的早期是一种非常关键的技术。众所周知,计算机在装置模型上是一个 存储和一组指令集,而二进制的存储实际上是没有任何类型表示的。整数,浮点这些操作必须通过相应的约定,再以指令集的形式进行支持。而随着计算机的发展, 简单的数据类型显然已经不能满足应用的需要。这时候一种灵活且有效的类型系统,就成了一种自然的追求(直到80年代初,类型系统都是计算机科学研究的重要 方向之一)。
另一种对象技术出现的很早,大概在60年代末就出现了,直到80年代初还有发展。但是很长一段时间内并不是太主流的做法,反而并不太为人所知。
在函数式语言里,因为高阶函数(High Order Function)的存在,数据可由函数来表达。这就是函数语言里一个非常重要的观点:Data as Procedure。在函数语言中,可以构造一种非常类似于对象的高阶函数:
4. 并发编程/并行计算/多核编程
多核CPU作为一种新的事物,给计算机界带来了新的恐慌,大家觉得有必要使用一种新的编程模型以充分利用多核的优势。
虽然第一个著名的实现是Erlang的actor系统,但是由于消息传递风格和面向对象模型相去不远,很快就在各种面向对象语言中有了类库支持。虽然 利用当代函数语言的语法特性,actor可以实现得更简洁,但是对象对于副作用和状态的封装,更好地解决了在并发环境下对于共享状态的操作,反而有了更好 的发展。
5. 淋巴
不好说。。。结合起来,更好吧。。
6. 参考
对象已死?.htm
参考文献
[1]孙斌.扩展面向对象编程(XOOP)的理论和方法[J].汁算机学报,2001,24(3):266—280.
[2]郑莉,董渊,张瑞丰编.C++语言程序设计(第3版)[M],北京:清华大学出版社出版,2003
[3]Matlew H Austern.泛型编程与STL[M],北京:中国电力出版社,2003,
面向对象的优缺点_百度文库.htm
(佳)面向对象的缺点_mailrun_新浪博客.htm
他们为什么说面向对象有问题,探讨面向对象的一些缺陷 - OurJS.htm