1、组件设计的原始目的
跨平台、跨网络、积木式搭建程序
2、组件的两个规范:CORBA 和COM
OMC(Object Management Group,对象管理组织)的CORBA(Common Object Request Breaker Arehitecture ,公共对象请求中介体系结构)。
Microsoft的COM(Component Objedt Model,组件对象模型)。
3、COM的定义
COM是由Microsoft提出的组件标准,它不仅定义了组件程序之间进行交互的标准,并且也提供了组件程序运行所需的环境。
COM标准包括规范和实现两大部分,规范部分定义了组件之间通信的机制,实现部分是COM库,COM库为COM规范的具体实现提供了一些核心服务。
4、COM的分类
进程内组件(DLL ,in-process component)。客户程序和组件程序在同一进程空间。
进程外组件(EXE ,out –of-process component)。客户程序和组件程序不在同一进程空间。
5、COM跨语言原因
COM对象是建立在二进制可执行代码级的基础上,而C++等语言中的对象是建立在源代码级基础上的。
6、COM技术的应用
OLE(Object Linking and Emnedding ,对象链接和嵌入)技术,它所表达的是复合文档(Compound Document )的概念。
ActiveX技术。
7、COM的组件、对象、接口的关系
一个COM组件可以包含多个COM对象,一个COM对象可以有多个COM接口。COM对象是以接口的方式提供服务的。
8、COM的基本概念
对象:相当于C++中对象的概念,对象是某个类的一个实例
客户:使用对象的应用(或另一个对象)称为客户,或对象的用户。
接口:一组逻辑上相关的函数集合,其函数也被称为接口成员函数。通常以“I”为前缀。
9、COM接口使用说明
在COM模型中,对象本身对于客户来说是不可见的,客户请求服务时,只能通过接口进行。每个接口都由一个128位的全局唯一标识符(GUID ,Gloally Unique Identifier)来标示。客户通过GUID获得接口的指针,在通过接口指针,客户就可以调用其相应的成员函数。
一般来说,接口是不变的。因为对象可以包含多个接口,所以组件对象的升级可以通过增加接口的方法来实现。
10、COM对象的说明
与接口类似,每个对象也用一个128位的GUID来标识,称为CLSID(Class Identifier,类标识符或类ID)。
11、COM库的说明
在Microsoft Windows操作系统环境下,COM库以 .dll 文件的形式存在。COM库一般步在应用程序层实现,而是在操作系统层次上实现,因此一个操作系统只有一个COM库实现。
12、COM的特性
一:面向对象的特性。
二:客户/服务器特性。
三:语言无关性,但是只有用C或C++语言才能实现COM中所有的特性。
四:进程透明特性 两类进程模型:进程内对象和进程外对象。进程内对象在客户进程空间中运行,效率高,但不稳定;进程外对象运行在同一机器上的另一个进程空间或者在远程机器的进程空间中。组件对象服务程序分类:进程内服务程序、本地服务程序、远程服务程序。实现这种进程透明性的关键在于COM库,COM库负责组件程序的定位,管理组件对象的创建和对象与客户之间的通信。
五:可重用性
COM标准建立在二进制代码级的基础上是其与面向对象语言中的对象的重用过程不同。
COM用两种机制实现对象的重用:包容方式和聚合方式。
13、OLE技术的焦点集中在解决桌面环境中应用程序之间如何进行交互,包括数及交换和界面交互。
14、COM与Windows操作系统
16 位平台中COM的使用并不完善,32位平台中,很多系统部件都以COM形式实现。比如:DirectX多媒体软件包、RDO(Remote Data Object ,远程数据对象)和DAO(Data Access Object ,数据访问对象)数据库访问对象库、Internet Client SDK、MAPI(Messaging API ,消息应用编程接口)、ADSI(Active Directory Service Interface ,活动目录服务接口)
15、COM与数据库
Microsoft推出的数据库访问对象库有RDO、DAO、OLE DB、ADO。
16、COM与Internet应用
系统集成的软件接口可以利用COM。在多层次软件结构模型中位于中间层的业务层主要通过COM组件来实现。
17、COM与Internet
Internet的开放性要求正体现了COM的优势。Microsoft提出的ActiveX技术包含了所有基于COM的Internet相关的软件技术。
文章出处:http://www.diybl.com/course/3_program/c++/cppxl/20081118/151938.html