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)。
这篇文章提到了几个比较有用的概念,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)。
相关文章推荐
- 国外和中国市场最大的区别是什么?
- mongodb,redis,hbase 三者都是nosql数据库,他们的最大区别和不同定位是什么?
- FPGA与CPLD的最大区别是什么(轉)
- qq与邮箱的最大区别是什么
- 读书和不读书的人,最大的区别是什么?--林语堂
- linux下的 tar.gz文件和.rpm文件有什么最大的区别?
- 什么是面向对象?面向对象和面向过程的最大区别是什么?
- IOS的学习--mac开发和ios开发最大的区别是什么?
- 矢量图和位图最大的区别是什么?
- redis与memcache最大的区别是什么且在linux下安装memcache?
- SAS硬盘和SATA硬盘最大的区别是什么?
- linux下的 tar.gz文件和.rpm文件有什么最大的区别?
- EV SSL证书与普通的SSL证书最大区别是什么?
- “做项目”和“做产品”最大的区别是什么?
- VO和PO 有什么区别啊?
- @resource和@autowired的区别是什么-CSDN论坛-CSDN.NET-中国最大的IT技术社区 - Google Chrome
- a标签中 href =" " 和 href ="#"和href ="Javascript: void(0)" 这三个有什么区别?
- /bin/sh与/bin/bash有什么区别?
- PDFLaTeX和XeLaTeX有什么区别
- C# 中的 == 和 equals()有什么区别?