面向对象的思想难以适应这种分布式软件模型,于是组件化程序设计思想得到了迅速的发展。
按照组件化的程序设计的思想,复杂的应用程序被设计成一些小的,功能单一的组件模块,这些组件模块可以运行在同一台机器上,也可以运行在不同的机器上。
为了实现这样的应用软件,组建程序和组建程序之间需要一些极为细致的规范, 只有组件程序遵守了这些共同的规范,然间系统才能正常运行。 为此,OMG和Microsoft分别提出了CORBA(Common Object Request
Breaker Architecture)和COM(Component Object model)标准,目前CORBA模型主要应用于UNIX操作系统平台上,而COM 则主要应用于Microsoft Windows操作系统平台上。
COM的概念:
COM是一个说明如何建立可动态互变组件的规范。它提供了为保证鞥能够互操作,客户和组件应遵循的一些标准。COM规范就是一套为组件架构设置标准的文档。COM并不是一种计算机语言,COM所说明的是如何编写组件,但具体选用说明语言来编写则完全是自由的。
COM组件的概念:
COM组件时以win32 Dll 或 exe 形式发布的可执行代码组成的,是一些小的二进制可执行文件。COM组件是遵循COM规范编写的。COM组件不是DLL,只是利用DLL来给组件提供动态链接的能力。实际上,利用Dll动态链接能力最佳的方法是COM。对于可用Dll解决的任一问题,均可以用COM组件更好地加以解决。
对COM组件的要求:
一、组件必须动态链接。
二、隐藏其内部实现细节。对于一个应用程序或组件,如果它使用了其他组件,那么我们称之为一个客户,客户通过接口同其他组件进行连接。如果接口保持不变,客户和组件虽然改变了,但不会影响彼此的通信。要实现信息封装也就是说组件及客户内部实现细节不能反映到接口中。这种将客户同组件实现相应隔离开来要求对组件加上一些限制。
1)
组件必须将其实现所用的编程语言封装起来。在一个与语言无关的架构中,任何人均可以编写组件,并且这些组件不会因为编程语言的发展而过时。这种架构将极大的促进软件市场的繁荣。
2)
组件必须以二进制的形式发布。
3)
组件必须可以在不妨碍已有用户的情况下被升级。这种向后兼容的能力是组件必须具有的。将某个组将升级使之适应新应用程序的需要、同时使其能支持老的应用程序。
4)
COM组件可以透明地在网络上被重新分配位置。
使用组件的优势:
1)
应用程序可随时间的流逝而发展进化,即使用组件可以对已有应用程序的升级更加方便和灵活。如应用程序定制。
2)
快速应用程序开发。这个优点可以使开发人员从某个组件库中取出所需要的组件并将其快速地组装到一块以构造应用程序,如同搭积木一样。
3)
简化分布式应用程序开发。
COM基本术语
1.interface:一个接口可以看做是一组称为方法的函数。接口名以"I"打头,如"IShellLink",在C++中,接口即是一个只含有纯虚函数的抽象基类。
2.coclass:component object class的简称。coclass用来实现接口。一个COM对象是coclass在内存中的一个实例(instance)。注意COM"class"跟 C++"class"不是一个东西,虽然COM class 的实现通常都是C++ class。
3.COM Server:含有一个或多个coclass的二进制模块(DLL或者EXE)。
4.Registration:向Windows注册,登记COM Server的位置和入口。Unregistration是一个相反的过程:从Windows中移除掉这个登记。
5.GUID:globally unique identifier。一个128位的数。COM使用语言无关的GUID作为标识。每一个interface和coclass都有一个GUID,因为 GUID是全世界范围内唯一的。所以避免了名字冲突。有时候GUID也被称为UUID(universally unique identifier)。一个coclass的class ID称为CLSID;一个interface的interfaceID称为IID。
6.HRESULT:一个整数类型的值,COM使用它来返回成功或者错误码。可以使用Windows错误码查询来获取HRESULT所代表的字符含义。
参考文献:
COM技术内幕