拿“注册系统”举例来说,一拿到这个模块,用“面向对象”的方法,我们应该先分析其中类和的层次,比如其中有“表单类”,“权限类”,“数据库类”,“检查类”等,“面向对象”是从这些的的交互上来设计系统,而“面向过程”则把注册流程分解为多个步骤:1、填写注册单;2、检查注册内容;3、判断用户权限;4、处理注册请求。“面向过程”是从系统流程上进行分析和设计,把他们进行模块化?
请大家发表自己的看法,谢谢。
[该贴被admin于2010-08-09 16:35修改过]
拿“注册系统”举例来说,一拿到这个模块,用“面向对象”的方法,我们应该先分析其中类和的层次,比如其中有“表单类”,“权限类”,“数据库类”,“检查类”等,“面向对象”是从这些的的交互上来设计系统,而“面向过程”则把注册流程分解为多个步骤:1、填写注册单;2、检查注册内容;3、判断用户权限;4、处理注册请求。“面向过程”是从系统流程上进行分析和设计,把他们进行模块化?
请大家发表自己的看法,谢谢。
[该贴被admin于2010-08-09 16:35修改过]
a.) 面向过程的方式,其思维方式和方法布局注重深度, 其调用链形成一棵链条很长的树(纵向联系),上级节点和下级节点互为上下文,上级节点单独抽出去无法完成任何工作,越核心的功能依赖层次越低的下层实现。联系太紧密,所以很难重用,从而导致修改时的链条也很长。
b.) 面向对象的方式,其方法布局是尽量把调用的级次链拉平,将方法原子化,然后分离到独立的功能包:类里面.更注重广度。并强调类完成功能时越孤立越好。与其它类的关系越不紧密越好(斩断上下文),如果需要与其它类通信,也是通过相对固定的接口来联系(横向联系)。面向对象的过程也就是把方法布局拉平,并封装到平级对象中的过程。
面向过程象那种直接到位的性格,象李逵、张飞之类爽快性格。
面向对象则是吴用、诸葛亮之类善用智谋者,做一件事情不只想到将其功能完成,还考虑如何留有回旋的余地。
面向过程是横向的话,面向对象则是纵向的。
如果面向过程是注重流程,是就事论事的流程,那么面向对象则是注重流程中的抽象模型,如注册表单模型对象的抽象。
面向对象不是和面向过程对等的,而是在面向过程基础上封装的,在面向对象系统中,不是没有过程process或operations,而是将Process/Operation也看成一个处理对象,遵循操作封闭等原则。正因为包含过程因素,才使得一些只有面向过程思维的人去放大过分利用这些过程因素,编制出面向过程的系统出来。
所以,面向对象的思想很重要,企业应用中以PoEAA为宗旨,Evans DDD为可操作建模方法,结合分析模式、原型模型和设计模式来实现面向对象的分析设计过程。
比如我们现实生活当中的招聘,如何通知每位应聘者以规定的时间到达指定的目的地是件非常棘手的事情。
利用面向过程的方法需要在程序查询出所有应聘的人,然后逐一通知他们应该在什么时间去什么地点做什么事情。这时,老总来了电话说,所有面试的人员改到别的地方进行考试,该如何处理?我们只好修改程序,将以前的流程改为查询所有应聘的人员,根据笔试或面试将其分类,并逐一通知他们考试的地点。
同样一件事情,如果用面向对象的方法来做,我们所要做的就是发布考试的时间地点就可以了,不需要关心应聘者是来面试还是笔试的。即做一个信息类,向外界暴露一个取信息的方法就可以了,其它的事情就是应聘者关心的事情了。即所有应聘者应该为自己的前途负责,所以他们都应该不时的关注信息以确保自己能够得到应聘的机会。这样一来,即使老总再打电话来,我们只需要改信息类所提供的信息就可以了。
这里有个责任转移的过程。
原因出在哪里?源头!开始出发方向错误,后面全盘皆错。
源头是什么?就是对需求的分析方法!
如果采取首先建立数据表的分析方法,必然导致面向过程,这是一对恶魔。因为SQL执行必须按照过程先后顺序来执行。而OO编程则是可能打乱这些顺序,通过动态组件AOP概念,我们可以在运行现场配置先后运行顺序,这些都是面向过程做不到的,面向过程导致铁板一块,毫无维护性和拓展力,健壮性和稳定性更别谈了!
支持
面向过程或者面向对象也许都不是最重要的,幽雅的解决问题,或者说,适合的才是最好的。
比如IBM笔记本贵为机皇,那确实是好,T系列,X系列更是其拳头产品。可是贵得狠,象我们这样的普通老百姓要是资金不够,也就不用买其低端的R系列了,相同的价格用用HP还能有更好的享受。
也许“面向对象”,“面向过程”都只是一种解决问题的思维方法而已,我认为今天的“面向对象”还有其不够成熟的地方,很多时候是“面向对象”与“面向过程并存”,甚至有些语言根本就不是真正的“面向对象”,所以啊,适合就好
"面向过程"却一味受到电脑处理机制的制约,要解决一个问题,先要把这个问题变成电脑的思考方式.这不符合人们的习惯,也不方便管理.随之而来的就是不好建模,不好复用,不好管理的一些问题...
也许有时候会想,"归根到底电脑还是按照过程在走",但是在现在变成语言已经发展了好几代,语言越来越符合人们的生活习惯,也许最后学习编程会变得和学习一门外语一样了...呵呵...
最后,我认为,楼主应该在对问题的分析和解决上下下功夫,不要被这些概念绊住...