COM属性

组件对象模型具有一下属性特征:

l  面向对象编程

l  松散耦合

l  稳定版过渡

l  位置透明

l  语言中性

下面逐个解释。

 

面向对象编程

COM支持面向对象编程的三个原理:封装,多态和继承。

 

同样道理,封装对面向对象编程很重要,对COM组件也很重要:它提供了一种绑定数据和代码的方式,防止来自外部的混乱或干扰,保证两者安全。通过封装,组件使用者仅仅需要知道如何与组件交互,而不是它如何工作。没必要让使用者知道组件内部的数据格式和布局以及算法。甚至用户不用关心模块用什么语言写的。只需要正确理解组件接口的方法。

 

多态,也就是说角色定位于“一种接口,多种方法”,这是允许接口访问一个通用类行为的属性。由于它适用于COM,多态是一种属性,允许每个开发者自由使用他或她认为合适的组件的时候,让程序员可以描述一些组件的通用行为。这样,你就能指定这个组件做什么而让其他人决定怎么做。

 

继承,是允许一个组件继承另一个组件的能力的属性。如你所见,COM支持的继承与C++有些不同。对部分开发者来说,这需要一些微小的范式转移,但尽管如此,继承仍然在通向使用COM工作的道路上扮演了关键的角色。

 

松散耦合

组件相互之间都是松散耦合。这允许一个组件被另一个我们想要的组件替换。例如,一个供应商提供的压缩组件有缺陷,你想用最小影响你应用程序的代价灵活切换到另一个供应商。只要这个新的组件采用的访问方式与原来的相同(意思就是,如果它持续支持相同的二进制标准),它就能代替原来的组件。

 

稳定版本过渡

作为组件从一个版本升级到下一版本,很明显已存在模块和新组件的交互不应该有中断。这意味着每个组件的升级不需要打断正在使用的应用程序。这在考虑你的软件用户在他们的系统上可能安装了其他的应用程序,而且这些应用程序支持的某个组件版本可能比你的那些应用程序正在使用的新。因为COM,版本持续稳定,允许从一个版本到下一版本的平滑过渡。

 

位置透明

位置透明是COM的另一个关键属性。把组件从一台电脑移动到另一台电脑很少涉及到从新配置,不算一个大的开发项目。这提供了在网络环境中分散负荷的灵活性。位置透明同样适用于组件运行的内环境。组件可能运行于相同进程或不同进程。

 

深度探索

为什么传统的动态链接库对于组件模型来说是不足的。

你可能会发现COM的几个方面仍然带有动态链接库(DLL)的特点。例如,动态链接库也是二进制格式,并且它也提供给了有限的封装。这样就使我们不竟想提出以下问题:为什么DLL不能作为软件组件用呢?问题是指定的DLL没有强调某个重点。例如,从第三方控件使用压缩模块,谁负责内存分配?如果压缩模块的指针传递给另一个模块,谁负责卸载模块, 他或她如何知道怎样安全卸载?用什么机制来保证一个压缩模块的接口与另一个相匹配?一个传统的DLL不能回答这些问题。这里需要一个标准来精确决定作为一个组件如何和其他组件交互的含义。这就是COM的目的。

最后一点:虽然传统的DLL作为一个组件有他们自身的不足,但他们通常支持COM。例如,通常一个COM组件会被存入DLL。因此DLL们其实是COM组件很方便的载体,因为它们提供了绑定和加载机制。随着COM增加到DLL,普通DLL的机制缺陷也随之消失了。

 

语言中立

因为COM定义了一个二进制标准,所以COM是语言中立的。换句话说,组件使用哪一种计算机语言编写的并不重要。例如,一个组件由一个供应商用C++开发并提供给另一供应商组装,并不会阻止您来回倒腾。另外,在您自己的应用程序中,您能使用不同的语言开发不同的组件。如果用VB开发界面很容易并且用C++开发设备通讯模块也很容易,那么就这样做吧。当她和COM关联时,这些都不是问题。

posted @ 2017-05-16 00:05  老鸟菜园  阅读(515)  评论(0编辑  收藏  举报