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)。