Atitit . 编程模型的变革总结

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

时间: 2024-10-10 06:55:39

Atitit . 编程模型的变革总结的相关文章

Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结

Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结 1. 服务端table控件的几个流程周期 1 1.1. 确认要显示的字段(开始渲染) 1 1.2. 确认要显示的title 1 1.3. 格式化 1 2. Render显示级别 1 2.1. 简单化...grid.toHTML(); 1 2.2. 有些设置(title,field) 1 2.3. 完全的的设置(模板机制) 1 3. 服务器端控件跟模板的分离实现 2

Atitit.web三大编程模型 Web Page Web Forms 和 MVC

Atitit.web三大编程模型 Web Page    Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2. Web编程模型?在这里我们定义Web编程模型为如何编写代码生成html返回给最终用户的方法. 它包括两部分,一个是如何编写Web应用程序的规范,另一个则是实现这一规范的Web编程框架, 3. Web Pages 是最简单的 ASP.NET 网页开发编程模型.它提供了一种简单的方法将 HTML.CSS

SNIA NVM 峰会: NVDIMMs、编程模型及下一代非易失性存储

SNIA NVM 峰会: NVDIMMs.编程模型及下一代非易失性存储 Stephen Bates (@stepbates) 今年1月25日,我有幸参加了于加州圣何塞举办的SNIANVM峰会.SNIA与Intel联手合作,成功举办了此次行业盛会,吸引了NVM领域知名专家的广泛参与.峰会中举办了涉及以下三个主要论题的多场论坛与演讲:     1.   NVDIMMs.NVDIMM产品已经存在了一段时间,但是一直主板兼容及操作系统支持相关的多方面问题.不言而喻,虽然这些问题依然存在,但各种支持的问题

Linux的I/O模式、事件驱动编程模型

大纲: (1)基础概念回顾 (2)Linux的I/O模式 (3)事件驱动编程模型 (4)select/poll/epoll的区别和Python示例 网络编程里常听到阻塞IO.非阻塞IO.同步IO.异步IO等概念,总听别人装13不如自己下来钻研一下.不过,搞清楚这些概念之前,还得先回顾一些基础的概念. 1.基础知识回顾 注意:咱们下面说的都是Linux环境下,跟Windows不一样哈~~~ 1.1 用户空间和内核空间 现在操作系统都采用虚拟寻址,处理器先产生一个虚拟地址,通过地址翻译成物理地址(内

Storm介绍及核心组件和编程模型

离线计算 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据.MapReduce批量计算数据.Hive批量计算数据.azkaban/oozie任务调度 流式计算 流式计算:数据实时产生.数据实时传输.数据实时计算.实时展示 代表技术:Flume实时获取数据.Kafka/metaq实时数据存储.Storm/JStorm实时数据计算.Redis实时结果缓存.持久化存储(mysql). 一句话总结:将源源不断产生的数据实时收集并实

ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它

1. 前言 2.可配置的指令使能/禁用控制和trap控制 指令使能/禁用 当指令被禁用,则这条指令就会变成未定义 指令Trap控制 控制某条或某些指令在运行时进入陷阱,进入陷阱的指令会产生trap异常,路由规则如下: (1)当前为EL1,则陷阱异常传递给EL1(HCR_EL2.TGE定义为1时,会路由到EL2); (2)当前为EL2,则陷阱异常传递给EL2; (3)当前为EL3,则陷阱异常传递给EL3; 3. 系统调用 SVC 默认情况下SVC产生supervisor call,同步异常目标级别

网络编程模型

课程索引 1. 编程模型 2. 编程模型 Socket的实质就是一个接口 , 利用该接口,用户在使用不同的网络协议时,操作函数得以统一. 而针对不同协以统一. 而针对不同协议的差异性操作,则交给了 socket去自行解决. 3. TCP编程模型 4. UDP编程模型

多线程编程模型

在学习muduo网络库前,应该先熟悉一下多线程网络服务编程模型.在6.6.2节介绍了11种方案.方案0到方案4用的是阻塞I/O.方案5到方案11用的都是阻塞I/O. 方案0: accept+read/write 方案0不是并发模型,只是一个循环处理.用代码表示的话,可以表示为: while(true) { int fd=accept(--); read(fd,--) or write(fd--); close(fd); } 一次只能处理一个连接,第一个连接处理完毕后,才可以进入下一次循环,否则阻

Java的多线程编程模型5--从AtomicInteger开始

Java的多线程编程模型5--从AtomicInteger开始 2011-06-23 20:50 11393人阅读 评论(9) 收藏 举报 java多线程编程jniinteger测试 AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicInteger则通过一种线程安全的加减操作接口. 来看AtomicInteger提供的接口. //获取当前的值 publ