第3个回答 2013-04-14
封装: 分离本质细节与非本质细节
继承: 描述“一般--特殊”关系,实现某种程度上的复用。
多态: 用不同的方式实现了同一个概念。
从编程的角度来说:
封装就是将你的程序的功能(做什么,称为接口)和你的程序的实现(怎么做,称为实现)分开。
继承则描述了不同类型对象之间的共性,依次减少系统的冗余性。
多态则提供了同一种功能使用不同实现的能力。
举个例来说:
1.你定义了一个函数,这个函数是用来实现某种功能的,通过封装,我们将这个函数的本质(做什么)放在函数的声明,将这个函数的非本质细节(怎么做)放到函数体里。因为函数做什么(本质上的东西)一般是不会变的,而函数怎么做通常因为各种考虑(性能、可靠性)而发生改变,所以将接口与实现分离可以减少实现的改变对用户代码的影响,降低程序中不同部分的耦合度。
2.考虑一些不同类型的容器(如向量、列表、散列表等),每种容器都有一系列相同的操作(如插入元素、删除元素、遍历容器等)和一系列属性(元素的个数等)。如果分别独立的(不适用继承)为每种元素创建一个类,那么将会产生大量的容易系统冗余代码(相似的操作和属性重复出现在不同的类中)。但是通过继承,可以将不同类中相似的部分记录在一个类里,依次来减小系统的冗余性。
3.前面谈到的容器例子实际上有一个问题:虽然每种容器都有相同的操作但是每种类型的容器的同一个操作可能不一样,而多态正是用来描述这些不同。多态是这样描述的:在继承层次结构中,统一操作,不同的实现方式。
这“三大特征” 只有你把要做的事情都弄清楚以后,才可能使用到这“三大特征”。面向对象终究是要靠自己,不然每个人都去背这些概念,然后都成了工程师。
面向对象最关键的两步过程: 发现 和 发明
发现需要侦探的直觉和数学家的洞察力,发明需要科学家的头脑和艺术家的创造力。