基于对象(OB)和面向对象(OO)是两个极易混淆的概念。两者的区别是多态,和继承无关。
面向对象(OB),用纯粹的理论去理解就是,必须具备封装、继承、多态三大特点,缺一不可。可以根据对象的实际类型不同,可以自动完成不同的行为,而仅仅通过一致的调用形式(多态)。
基于对象 (OO),仅仅支持抽象数据类型的功能(ADT),通常指的是对数据和操作的封装。无法利用现有的对象模板产生新的对象模型,继而产生新的对象,也就是说“基于对象”没有继承的特点,而多态是表示为父类类型的子类对象实例,没有继承,就更不用说多态了。
面向对象的三个特性之间的关系:没有封装,就不能继承,不能继承就没有运行时的多态。
一个OB设计可能比一个对等的OO设计速度更快而且空间更紧凑。
速度快是因为所有的函数调用操作都在编译时期解析完成,对象建构起来时不需要设置virtual机制;
空间紧凑则是因为每一个class object不需要负担传统上为了支持virtual机制而需要的额外负荷。
虽然C++通过class的pointer和references来支持多态,但是需要付出的代价就是额外的间接性——不论是在“内存的获得”或是在“类型的决断”上。
但是,OB设计比较没有弹性。
因为OB不支持类型的扩充,而OO可以利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是“继承”。
在弹性(OO)和效率(OB)之间常常存在着取与舍。效选择其一之前,必须先了解清楚两者的行为和应用领域的需求。