谈谈“面向对象”与“面向过程”

06-09-02 hlayy
                   

我认为“面向对象”是类的层次上进行的分析和设计,而“面向过程”是在系统的流程上的分析和设计?我这样说有没有错。

拿“注册系统”举例来说,一拿到这个模块,用“面向对象”的方法,我们应该先分析其中类和的层次,比如其中有“表单类”,“权限类”,“数据库类”,“检查类”等,“面向对象”是从这些的的交互上来设计系统,而“面向过程”则把注册流程分解为多个步骤:1、填写注册单;2、检查注册内容;3、判断用户权限;4、处理注册请求。“面向过程”是从系统流程上进行分析和设计,把他们进行模块化?

请大家发表自己的看法,谢谢。

[该贴被admin于2010-08-09 16:35修改过]

                   

7
iihorse
2006-09-02 22:57

谈谈俺的体会:

a.) 面向过程的方式,其思维方式和方法布局注重深度, 其调用链形成一棵链条很长的树(纵向联系),上级节点和下级节点互为上下文,上级节点单独抽出去无法完成任何工作,越核心的功能依赖层次越低的下层实现。联系太紧密,所以很难重用,从而导致修改时的链条也很长。

b.) 面向对象的方式,其方法布局是尽量把调用的级次链拉平,将方法原子化,然后分离到独立的功能包:类里面.更注重广度。并强调类完成功能时越孤立越好。与其它类的关系越不紧密越好(斩断上下文),如果需要与其它类通信,也是通过相对固定的接口来联系(横向联系)。面向对象的过程也就是把方法布局拉平,并封装到平级对象中的过程。

hlayy
2006-09-03 11:31

一个是“松耦合”,一个是“紧聚合”?

banq
2006-09-06 12:12

打个比喻:

面向过程象那种直接到位的性格,象李逵、张飞之类爽快性格。

面向对象则是吴用、诸葛亮之类善用智谋者,做一件事情不只想到将其功能完成,还考虑如何留有回旋的余地。

面向过程是横向的话,面向对象则是纵向的。

如果面向过程是注重流程,是就事论事的流程,那么面向对象则是注重流程中的抽象模型,如注册表单模型对象的抽象。

面向对象不是和面向过程对等的,而是在面向过程基础上封装的,在面向对象系统中,不是没有过程process或operations,而是将Process/Operation也看成一个处理对象,遵循操作封闭等原则。正因为包含过程因素,才使得一些只有面向过程思维的人去放大过分利用这些过程因素,编制出面向过程的系统出来。

所以,面向对象的思想很重要,企业应用中以PoEAA为宗旨,Evans DDD为可操作建模方法,结合分析模式、原型模型和设计模式来实现面向对象的分析设计过程。

hiswing
2006-09-14 15:51

我也举个例子吧。

比如我们现实生活当中的招聘,如何通知每位应聘者以规定的时间到达指定的目的地是件非常棘手的事情。

利用面向过程的方法需要在程序查询出所有应聘的人,然后逐一通知他们应该在什么时间去什么地点做什么事情。这时,老总来了电话说,所有面试的人员改到别的地方进行考试,该如何处理?我们只好修改程序,将以前的流程改为查询所有应聘的人员,根据笔试或面试将其分类,并逐一通知他们考试的地点。

同样一件事情,如果用面向对象的方法来做,我们所要做的就是发布考试的时间地点就可以了,不需要关心应聘者是来面试还是笔试的。即做一个信息类,向外界暴露一个取信息的方法就可以了,其它的事情就是应聘者关心的事情了。即所有应聘者应该为自己的前途负责,所以他们都应该不时的关注信息以确保自己能够得到应聘的机会。这样一来,即使老总再打电话来,我们只需要改信息类所提供的信息就可以了。

这里有个责任转移的过程。

7Go 1 2 3 4 ... 7 下一页