您的位置:首页 > 其它

什么是面向过程的对象?

2007-11-16 13:26 190 查看
常常听闻别人说“某某,你这是过程化的思维,不够OO。”
包括我自己,有时也隐约觉得表面上我们都OO了,貌似我们都在用OO的语言编程,但实际上骨子里却仍然是过程化的思维在思考问题。
但到底什么是过程化的思维,之前我自己却一直没弄清楚,而现在我自己终于认为我已经搞清楚了。

先说概念,
过程化思维就是:程序=数据结构+算法。特点是分开数据和算法。
面向对象思维就是:程序=对象+消息。特点是把数据和算法合在一起成为对象。
于是用过程化思维写出来的对象就是:只有属性的对象(本质上就是数据结构,又叫value object),或者只有过程的对象(本质上就是一组相关的函数,又叫stateless service object)。

以Java里常见的Spring为框架的程序为例,一般分3层:dao,service,presentation.既然有dao,必然有domain object.但如果是失血模型,所谓的domain object其实就是value object.
于是本质上,dao,service都只是一组无状态的函数的集合而已,跟C时代的模块没什么区别。而value object就是数据结构而已。
所以,我认为失血模型的Spring程序,就是过程化思维的程序。
service object和value object是天生的一对,如影随形。

由此可以认为,看到xxx-service这样的字眼就要小心了,过程化思维就躲在这里。比如Web service, SOA。
(另外,传统的先建表结构,再写代码的思维,也是过程化的。表结构本质上就是数据结构,代码就是算法。极端表现就是写存储过程。)
可以说过程化的事物无处不在,面向对象思维只躲在很小的一些领域里生存,比如JSF,VB,SWING等组件界面模型里,EJB,COM+等业务组件模型,Smalltalk里等等。
加上一般的土人居然都能在EJB这样的环境下作出过程化的东西来,所以,客观的说,OO时代远未到来。

Rod Johnson说的Stateless Session Bean受欢迎,Entity Bean没人喜欢, 我想其原因还是因为大多数的java程序员都还习惯于过程化思维编程,并不能因此说是EJB的罪过,我倒认为EJB处处体现了OO的思想,但不知为什么效 率那么底下。也许EJB的生产力只有在更大更复杂的系统里才能体现出来吧。

最后,我认为存在即合理。既然过程化的思维一直存在,且创造出了当前计算机世界里头的大多数系统,说明没必要盲目崇拜OO。
就我自己而言,99%的工作时间里,我和我的同事们是在用过程化思维思考并解决了问题。
搞清楚这个问题很好,避免了同事之间的阻抗不匹配。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: