+ -
当前位置:首页 → 问答吧 → 面向对象与叫化鸡比喻(与新手分享)

面向对象与叫化鸡比喻(与新手分享)

时间:2008-06-30

来源:互联网

面向对象的比喻实在太多了。
不知哪个比喻更能让你明白呢?


理解面向对象编程 (Object Oriented Programming 简称OOP)

所谓"面向对象编程",其实指的是一种编程思想模式。与之对应的是"面向过程编程"。

两者有什么区别?


我们先展开一下想象,话说你想请洪七公吃叫化鸡。

按照现代的做法,是将一只鸡杀死拔毛之后清洗干净鸡腔内脏,并在里面填充上适当的调味料,

接着用锡纸包起这个鸡并在外面涂上泥巴,最后丢进炭火里煨熟,

估算时间差不多后,将鸡取出来拍开泥土,剥开锡纸再送到七公手上...

这种做法就是面向过程模式。


但你是一个头脑很发达的人,你制造出一台新型的全自动化“烤叫化鸡”机器,

只要在这机器指定的入口扔一个鸡进去,这台机器运作后就会在另一个出口输送出一个香喷喷的叫化鸡。

这种做法就是面向对象模式。


很明显,面向过程的制作叫化鸡方法,采用的是按顺序按步骤得到叫化鸡。

我们将这些步骤抽取出关键词对应编程的术语,每个关键词代表一个功能函数:

杀鸡-拔毛-清洗-填料-包锡纸-涂泥巴-煨熟-取出-拍泥土

怎么样,一目了然易于理解是吧。


再来看面向对象方式的制作叫化鸡:

制造一台全自动化机器--往入口扔一只鸡--往出口取一只鸡。

就这么简单。

你不必理会机器内部怎么杀怎么清洗...怎么运作的。

只要知道这台机器的用途是制作叫化鸡,

操作方法是往入口丢一只鸡进去,再从出口拿这只鸡出来就行。



通过这个比喻,我们来进一步来了解面向对象的特点:

1 只做一只叫化鸡时面向过程比较方便和易于理解。但要量产时无疑是选择面向对象。

2 面向对象要构思机器的制造方法,在机器内部来设定上面所述的那些功能函数。
   而外部只能操作入口放只鸡进去和在出口取只鸡出来,如果有控制键,还可以只操作其中部分功能,
   比如仅仅是杀鸡并拔毛(这就是构建类函数并封装,封装后那些功能函数只能调用。)

3 通过使用这台机器会制造出一个个的叫化鸡。(类的实例化结果就是对象)

4 如果用这机器制造10只叫化鸡,每个生产出来的叫化鸡咸淡味感都是一样的。(类的对象有相同的属性)

5 把这10只鸡其中一只撒上辣椒或撕下一条鸡腿,其余九只不会因此而有辣味或缺条腿。
(增加或减少对象属性的任何 操作都不影响到同类的对象属性)

6 如果将机器的调料设定改变,生产出来(实例化)的鸡口味也会改变(这就是类和对象的关系)

7 生产出来的叫化鸡七公嫌太熟且味道淡了些,只要将机器内部的烤温降低并增加盐的份量就行了。(面向对象易于维护和改进)

8 七公吃了一个觉得不够还想吃,甚至要发放到丐帮人均一只叫化鸡,这问题第1点的量产提到啦
(所以面向对象模式更适合项目规模大的需要)

9 每个丐帮人员口味需求不一样,一个叫化鸡而已,居然有的要甜有的要酸,不过难不倒这机器,另外加料就行,
  除了口味不一样其它的还是一样。不用重新设计一台机器(用继承来重用代码)

10 有个叫鲁有脚的长老竟然异想天开想吃叫化鸭。没问题啊,叫化鸡叫化鸭叫化鹅都行的。抓只鸭子丢进机器就可以。
  (这就是对象的多态性,参数由鸡改成鸭)


关于面向对象的理论知识就暂时讲解到这里了。。。本人学艺未精,比喻不恰当的请各位指正。

作者: zzguo28   发布时间: 2008-06-30

我觉得解释地反而复杂了

作者: ShiningRay   发布时间: 2008-06-30

作者: nianjin   发布时间: 2008-06-30

不错的一个比喻。。。我有许明白。。

作者: lucas1860   发布时间: 2008-06-30

引用:
原帖由 ShiningRay 于 2008-6-30 13:43 发表
我觉得解释地反而复杂了
惭愧,见笑了。

作者: zzguo28   发布时间: 2008-07-03

通俗易懂......

作者: 生命如蓝   发布时间: 2008-07-03

OOP时代到来了。

作者: d9tx   发布时间: 2008-07-03

一点也不恰当

作者: cnangel   发布时间: 2008-07-06

通俗易懂,谢谢LZ分享

作者: 奇将射天狼   发布时间: 2008-07-17

好好玩啊

作者: fei   发布时间: 2008-07-27

跟吃联想起来,趣味的学习方式,支持楼主

作者: longkingcx   发布时间: 2008-08-12

明白了以后看,我觉得才能看懂~~~呵呵~~~~

不过这个比喻还挺贴切的

作者: elsonwu   发布时间: 2008-08-13