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

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


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值