基于对象的(Object-based)和面向对象的(Object-oriented)有何联系区别?

本文深入探讨了面向对象(OO)与基于对象(OB)的设计理念,揭示两者在封装、继承、多态上的本质差异。面向对象强调封装、继承和多态,而基于对象仅支持数据和操作的封装,缺乏继承和多态能力。文章还对比了两者在效率与灵活性上的权衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于对象(OB)和面向对象(OO)是两个极易混淆的概念。两者的区别是多态,和继承无关。

面向对象(OB),用纯粹的理论去理解就是,必须具备封装、继承、多态三大特点,缺一不可。可以根据对象的实际类型不同,可以自动完成不同的行为,而仅仅通过一致的调用形式(多态)。
基于对象 (OO),仅仅支持抽象数据类型的功能(ADT),通常指的是对数据和操作的封装。无法利用现有的对象模板产生新的对象模型,继而产生新的对象,也就是说“基于对象”没有继承的特点,而多态是表示为父类类型的子类对象实例,没有继承,就更不用说多态了。

面向对象的三个特性之间的关系:没有封装,就不能继承,不能继承就没有运行时的多态。

一个OB设计可能比一个对等的OO设计速度更快而且空间更紧凑。
速度快是因为所有的函数调用操作都在编译时期解析完成,对象建构起来时不需要设置virtual机制;
空间紧凑则是因为每一个class object不需要负担传统上为了支持virtual机制而需要的额外负荷。
虽然C++通过class的pointer和references来支持多态,但是需要付出的代价就是额外的间接性——不论是在“内存的获得”或是在“类型的决断”上。

但是,OB设计比较没有弹性。
因为OB不支持类型的扩充,而OO可以利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是“继承”。

在弹性(OO)和效率(OB)之间常常存在着取与舍。效选择其一之前,必须先了解清楚两者的行为和应用领域的需求。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值