一、产生COM(Component Object Model)的背景
一个应用程序通常有单个的二进制文件组成,每发布一个新版本都需要全部重新编译。任何变化(例如操作系统、硬件及客户需求等变化)都需要等重新编译后才能发布,发布后还需要客户对其软件的全部链接,因此通过这种方式开发的软件不易与升级。
随 着软件业技术的迅速发展,传统的程序的升级方式已不能适应软件发展的需要。解决这一问题的方法是将铁板一块的应用程序分割成较小的块的应用或组件,每一小 块负责特定的功能。然后在运行时将这些小块组装起来形成所需的应用程序。每一个组件负责特定的功能,因此在对某个组件升级时就不会影响其它组件的正常功 能。最终程序可以随着时间的推进不断升级。
这种软件的开发具有如下特点:
(1)、软件易于升级,可以使软件逐步开发。
(2)、软件更容易开发,并且可以同时开发,加速开发进程。
这就需要一种解决方案,即将单个应用程序分成几个个独立部分,也即组件。
COM提供了编写这种组件的一种方法。
二、组件的优点
1、应用程序的升级,通过组件开发的应用程序可以随着时间的发展不断发展进化。
2、应用程序的定制,根据运行时加载组件的不同可以定制不同的功能。
3、可以加速应用程序的开发进度:
(1)、组件库的复用,降低不必要的开发时间。
(2)、分布式开发,多个人同时开发不同的组件模块,缩短开发周期。
三、建立组件需要满足的条件
组件的优点直接源于可以从应用程序动态的加载和卸载。
必须满足如下两个条件:
1、动态链接,例如DLL
2、隐藏内部实现细节,例如针对接口编程(当内部变化时,不会影响使用此接口的客户)
这两个条件缺一不可,从重要程度看,条件(1)是至关重要的条件,若此条件不满足组件的优点将全部消失。条件(2)是必要条件,此条件能降低各个组件之间的耦合度,从而能减少组件间的相互影响,才能使组件的优点能更好的展现出来。
客户同组件实现之间的隔离开的要求给组件增加了一些如下限制:
(1)、要求语言无关:
这就使任一个组件可以被任何客户使用,增加了组件被使用的范围,减少对组件使用的限制。
(2)、组件必须以二进制形式发布。
如果想实现组件语言的隐藏,必须将组件编译,链接起来就可以直接用。
(3)、组件必须能在不影响客户的前提下升级。
一个组件的版本必须即能被老版本的客户使用,同时也能被新版本的客户使用。例如:已经发布出去的组件接口不能被修改,若想修改必须生成新的组件。
(4)、组件在网络上的位置必须可以被透明的分配。
组件及它的客户可以在一个进程内、不同进程或者不同机器上运行。客户对远程组件的管理方式应和对本地组件的管理方式一致。
四、什么是COM
COM是一种规范,说明了如何建立组件以及如何通过组件构成应用程序。
COM是一种编程方法(就像结构化编程和面向对象编程跟编程语言无关)。
五、COM与客户程序和组件的关系
为保证客户和组件的互相操作,COM提供了一些标准,即需要遵循的规范。
COM规范是一套为组件架构设置标准的文档。
1、COM组件是什么:
COM组件,即遵循COM提供的规范制作出来的组件。
例如:COM组件是以Win32的动态链接库(即DLL)或可执行文件(EXE)的形势发布出去的代码。
客户可以根据COM规范来找到COM组件和使用COM组件。
2、COM不是什么:
COM不是一种计算机语言,那COM和一种语言来比较是不合适的。
COM和DLL比较也是不合适的,DLL只是COM用来组合组件的一个宿主。
COM也不是一个函数集。
总结:COM是给开发人员提供开发语言无关的组件库的一种方法,COM本身没有任何实现。
六、应用程序的构成
每个COM组件均可以同其他组件一起被使用。客户和组件之间的信息隐藏是通过接口来实现的,这就也显示出接口对组件的重要性。
总结:遵循COM标准的组件可以组合起来构成应用程序。