您的位置:首页 > 其它

OO和PO的最大区别是什么?

2011-03-01 19:16 337 查看
http://www.cnblogs.com/idior/articles/108291.html

这篇文章提到了几个比较有用的概念,Object Oriented, Design Pattern, Aspect Oriented Program;原文从职责分离角度来理解他们并把他们串起来.

不过话说回来,面向对象模型和面向过程模型的本质区别并不是职责分离!!!没有OO,PO(面向过程)也有职责分离。

个人认为,OO和PO的区别更多是tell(what should do)和ask(how to do)的区别,Tell don't ask原则能比较好的体现这两者的区别。To ask is a query, to tellis a command.

引用一句牛人说的话,那就是

Procedural code gets information then makes decisions. Object-oriented code tells objects to do things.

— Alec Sharp

(参见http://www.pragprog.com/articles/tell-dont-ask)

举一个例子。

如果用PO的话,可能根据不同的type或者interface来选择合适的逻辑,会有一堆的if else语句或者switch语句;dynamic_cast也常常在这个时候被起用。而用oo的话,每个sub type都实现了这个这个接口,直接call就可以了,自然有runtime帮我们分派到合适虚函数。

白话一点,PO会说“你是a吗?是的话,那去做xx;你是b吗?是的话,那你去做yy;如果都不是,我要发飙(抛异常)!”。OO说起来就简单了,直接一句“你去做吧!”,至于怎么做每个人自己都很清楚,因为它有自己的角色(type)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: