几个论坛帖子的小结: 关于COM的一些术语扫盲以及关于多重继承的讨论

1. 关于COM的趋势

CLR替代了COM,但是无法也没有替代COM+,COM+现在叫.NET Enterprise Services。

目前可以说,如果以前你用COM技术在COM+环境下工作的很好(或者很痛苦),那么现在用CLR在COM+下工作起来一样也很好,并且要方便,快捷;dotNET使得开发人员使用COM+更加方便和有效率,这就如同许多年以前从字符键盘界面(COM)引入图形鼠标界面(dotNET)是对计算机的使用(COM+)的一场革命一样。

COM还有STL的思想不灭。

2. 组件、对象、ActiveX、OLE和COM的关系

组件是一个可重用的模块,它是由一组处理过程、数据封装和用户接口组成的业务对象(Rules Object)。

COM和 CORBA是处在整个体系结构的最底层,OLE和ActiveX是建立在 COM之上的。

COM是应OLE的需求而诞生的,所以虽然COM是OLE的基础,但OLE的产生却在COM之前。

ActiveX是指宽松定义的、基于COM的技术集合,而OLE仍然仅指复合文档。当然, ActiveX最核心的技术还是COM。

让对象模型完全独立于编程语言,这是一个非常新奇的思想。COM对象可以用C++、Java和VB等任意一种语言编写,并可以用DLL或作为不同过程工作的执行文件的形式来实现。随着计算机网络的发展,COM进一步发展为分布式组件对象模型,这就是DCOM,它类似于CORBA的ORB。

3. 单重继承和多重继承

多继承这个东西,不管是理论上,还是实际项目中,都是需要的。但它有两方面的问题,一方面,虽然需要,但需要的情况不多;另一方面,实现起来又有些麻烦,比如指针类型转换时需要做偏移。于是就产生了一个问题:克服很多麻烦去实现一个使用得并不多的东西,到底值不值得。VB和JAVA选择了不实现它,C++则选择了实现它。但JAVA做了很多折衷:比如允许实现多个接口,还允许类的内部类再继承别的类。

多重继承的滥用会导致一些副作用,最典型的是菱形继承的二义性问题,比如:class B 和 class C 从 class A 继承。class D 从 class B 和 Class C 继承。那么 class D 访问 class A 的成员的时候,就有两条路径。当 class B 和 class C 各自覆盖了这个成员,那么到底应该调用哪个成员呢?就出现了二义性。

JAVA为避免c++那样管理多重继承的层次关系而带来的复杂性,换成用接口来实现多重继承的大部分功能。

VB6也同样不支持类继承。但是支持接口继承。

直接的继承VB确实不支持,但可以通过其他的方法模仿出继承和派生类的效果,就是过程没有C那么方便,大致方法有点像封壳。

比如:如果想继承一个类的所有属性和方法和事件,那么可以先引用该类并在你的类中创建该对象。然后然后将其所有的属性、事件、方法的读写属性过程、事件产生及方法调用的过程都在你的类中进行调用和传递,然后还可以添加自己的属性、方法、事件,这样的效果就很像继承后派生出来的类了。虽然方法比较麻烦,但可以做到类似的效果。

开发复杂度: 多重继承 < 单继承

维护复杂度: 多重继承 > 单继承

4. 附:讨论贴列表

[1] http://topic.csdn.net/u/20090514/22/2da3fb91-d5c8-47c2-9573-434adf0c6ba9.html

[2] http://topic.csdn.net/u/20090615/19/d065b387-38d8-4f52-ac82-df3917fa8e21.html?seed=66005205&r=57731484#r_57731484

[3] http://topic.csdn.net/u/20090630/22/c57e315f-da22-4d2f-ab79-13d519416d16.html

感谢这几个帖子里ahaocaozhySupermanKingTiger_Zhaosteedhorsesupergreenbeanlyserver等网友的指教。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值