关于面向过程和面向对象的认识(转至Aimingoo大作《大道至简》)

Soul:我在写书讨论“面向对象的局限性”
Aimingoo:En.这个倒与我的意见一致。哈哈哈。
Aimingoo:“绝对可以用面向过程的方法来实现任意复杂的系统。要知道,航天飞机也是在面向过程的时代上
            的 天。但是,为了使一切变得不是那么复杂,还是出现了‘面向对象程序设计’的方法。”
Aimingoo:——哈,我那本书里,在“面向对象”一部分前的引文中。就是这样写的。
Soul:现在的程序是按照冯。诺伊曼的第一种方案做的,本来就是顺序的,而不是同步的。CPU怎么说都是一
            条指令一条指令执行的。
Aimingoo:面向过程是对“流程”、“结构”和“编程方法”的高度概括。而面向对象本身只解决了“结构”
            和“编程方法”的问题,而并没有对“流程”加以改造。
Soul:确实如此。确实如此。
Aimingoo:对流程进一步概括的,是“事件驱动”程序模型。而这个模型不是OO提出的,而是Windows的消
           息系统内置的。所以,现在很多人迷惑于“对象”和“事件”,试图通过OO来解决一切的想法原本就是
           很可笑的。
Soul:我先停下来,和你讨论这个问题,顺便补充到书里去。
Aimingoo:如果要了解事件驱动的本质,就应该追溯到Windows内核。这样就涉及到线程、进程和窗体消息系
            统这些与OO无关的内容。所以,整个RAD的编程模型是OO与OS一起构建的。现在很多的开发人员只知
            其OO的外表,而看不到OS的内核,所以也就总是难以提高。
Soul:OO里面我觉得事件的概念是很牵强的,因为真正的对象之间是相互作用,就好像作用力和反作用力,不会有
            个“顺序”的延时。
Aimingoo:应该留意到,整个的“事件”模型都是以“记录”和“消息”的方式来传递的。也就是说,事件模
            型停留在“面向过程”编程时代使用的“数据结构”的层面上。因此,也就不难明白,使用/不使用OO
            都能写Windows程序。
Aimingoo:因为流程还是在“面向过程”时代。
Soul:所以所谓的面向对象的事件还是“顺序”的。所以我们经常要考虑一个事件发生后对其他过程的影响,所
            以面向对象现在而言是牵强的。
Aimingoo:如果你深入OS来看SEH,来看Messages,就知道这些东西原本就不是为了“面向对象”而准备的。
            面向对象封装了这些,却无法改造它们的流程和内核。因为OO的抽象层面并不是这个。
Aimingoo:事件的连续性并不是某种编程方法或者程序逻辑结构所决定的。正如你前面所说的,那是CPU决定
            的事。
Soul:比如条件选择,其实也可以用一种对象来实现,而事实没有。这个是因为cpu的特性和面向对象太麻烦。
Aimingoo:可能,将CPU做成面向对象的可能还是比较难于想象和理解。所以MS才启动.NET Framework。我
            不认为.NET在面向对象方法上有什么超越,也不认为它的FCL库会有什么奇特的地方。——除了它们足够
            庞大。但是我认为,如果有一天OS也是用.NET Framework来编写的,OS一级的消息系统、异常机制、
            线程机制等等都是.NET的,都是面向对象的。那么,在这个基础上,将“事件驱动”并入OO层面的模型,
            才有可能。
Soul:所以我发觉面向对象的思维第一不可能彻底,第二只能用在总体分析层上。在很多时候,实质上我们只是
            把一个顺序的流程折叠成对象。
Aimingoo:倒也不是不可能彻底。有绝对OO的模型,这样的模型我见过。哈哈~~但说实在的,我觉得小应用
            用“绝对OO”的方式来编写,有失“应用”的本意。我们做东西只是要“用”,而不是研究它用的是什么
            模型。所以,“Hello World”也用OO方式实现,原本就只是出现在教科书中的Sample罢了。哈哈。
Soul:还有不可能用彻底的面向对象方法来表达世界。 因为这个世界不是面向对象的。 是关系网络图,面向对
           象只是树,只能片面的表达世界。所以很多时候面向对象去解决问题会非常痛苦。所以编程退到数据结构
         更合理,哈哈。
Aimingoo:如果内存是“层状存取”的,那么我们的“数据结构”就可以基于多层来形成“多层数据结构”体系。
        如果内存是“树状存取”的,那么我们当然可以用“树”的方式来存取。——可惜我们只有顺序存取的内存。 Aimingoo:程序=数据+算法 ——这个是面向过程时代的事。 程序=数据+算法+方法 ——在OO时代,我们
        看到了事件驱动和模型驱动,所以出现了“方法”问题。
Soul:我的经验是:总体结构->面向对象,关系->数据结构,实现->算法
Soul:看来我们对面向对象的认识还是比较一致的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值