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:1466519819@qq.com

转载请注明来源: 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

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

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

    Atitit.web三大编程模型 Web Page    Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2.  ...

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

    Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结 1. 服务端table控件的几个流程周期 1 1.1. 确认要显示 ...

  3. atitit.组件化事件化的编程模型--服务端控件(1)---------服务端控件与标签的关系

    atitit.组件化事件化的编程模型--服务端控件(1)---------服务端控件与标签的关系 1. 服务器控件是可被服务器理解的标签.有三种类型的服务器控件: 1 1.1. HTML 服务器控件  ...

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

    Atitit.web三编程模型 Web Page    Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2. W ...

  5. atitit.基于组件的事件为基础的编程模型--服务器端控件(1)---------服务器端控件和标签之间的关系

    atitit.基于组件的事件为基础的编程模型--服务器端控件(1)---------服务器端控件和标签之间的关系 1. server控件是要server了解了标签.种类型的server控件: 1 1. ...

  6. JS魔法堂:深究JS异步编程模型

    前言  上周5在公司作了关于JS异步编程模型的技术分享,可能是内容太干的缘故吧,最后从大家的表情看出"这条粉肠到底在说啥?"的结果:(下面是PPT的讲义,具体的PPT和示例代码在h ...

  7. 多线程之异步编程: 经典和最新的异步编程模型,async与await

    经典的异步编程模型(IAsyncResult) 最新的异步编程模型(async 和 await) 将 IAsyncInfo 转换成 Task 将 Task 转换成 IAsyncInfo 示例1.使用经 ...

  8. 多线程之异步编程: 经典和最新的异步编程模型, IAsyncInfo 与 Task 相互转换

    经典的异步编程模型(IAsyncResult) 最新的异步编程模型(async 和 await) 将 IAsyncInfo 转换成 Task 将 Task 转换成 IAsyncInfo 示例1.使用经 ...

  9. jQuery插件编写及链式编程模型小结

    JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...

随机推荐

  1. python笔记16-执行cmd指令(os.system和os.popen)

    os.system 1.如果想在cmd执行python脚本,可以直接用如下指令 python [xx.py绝对路径] 比如我写了个hello.py的脚本,在脚本里面写入内容:print("h ...

  2. Python实现MapReduce,wordcount实例,MapReduce实现两表的Join

    Python实现MapReduce 下面使用mapreduce模式实现了一个简单的统计日志中单词出现次数的程序: from functools import reduce from multiproc ...

  3. 彻底解决Odoo8.0单时区应用中的时区问题

    原文地址:http://shine-it.net/index.php/topic,17001.0.html 由于数据库中存储的是UTC时区,默认情况下数据导出和group by都存在时区问题.彻底解决 ...

  4. Kotlin 特性 语法糖 优势 扩展 高阶 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. C++标准库 bitset

    本文地址:http://www.cnblogs.com/archimedes/p/cpp-bitset.html,转载请注明源地址. 有些程序要处理二进制位的有序集,每个位可能包含 0(关)1(开)值 ...

  6. 【问题】VH

      [问题]: CSS中使用了VH,在iOS中展示正常,但是在安卓的个别浏览器中,当输入框弹出时,使用VH的DIV的高度会发生变化. [原因]: 在安卓端浏览器虚拟键盘弹出时,导致视口高度改变,以至于 ...

  7. linux查看当前shell的方法

    这篇文章主要对比一下 source 命令执行shell文件和 ./ping.sh 这种方式执行shell文件的区别. 1. source   ping.sh 这个是在当前的shell 中执行 ping ...

  8. eclipse解决editor does not contain a main type的方法

    转自:http://blog.csdn.net/huazhangena/article/details/7349044 写在前面的话:我的也出现这个问题,但是解决方法和转发的内容不太一样,原理一样,我 ...

  9. [odroid-pc] ubuntu12.04 64bit Android4.0.3 源码编译报错及解决的方法

    第一个错误:         host Executable: cmu2nuance (out/host/linux-x86/obj/EXECUTABLES/cmu2nuance_intermedia ...

  10. python selenium 自动化测试环境安装

    注意:2.7和3.0版本的语法有些不一样 安装自动化测试软件 selenium(地址http://www.seleniumhq.org/download/) 安装步骤: 1.安装pythone运行环境 ...