书城工业技术制造业信息化工程原理和案例
19099100000046

第46章 企业信息系统的支撑环境(4)

7.3.3组件对象模型的特性

COM规范所定义的组件模型,除了前面提到的面向对象和支持C/S模式这两个基本特性外,还具有以下特性:

(1)语言无关性

COM规范的定义不依赖于特定的语言,因此,编写组件对象所使用的语言与编写客户程序所使用的语言可以不同,只要它们都能生成符合COM规范的可执行代码即可。COM采用的是一种二进制代码级的标准,而不是源代码级的标准。

COM对象可以把OOP语言中的对象封装起来,并提供一致的接口,使它们可以被各种不同的语言所调用。这就为跨语言的合作开发提供了可能性。

虽然COM规范的定义与语言无关,而且差不多每种语言在实现时都提供了对COM的支持,但与COM规范最贴近、并且最能够反映COM特性的语言还是C或者C++。如果没有C/C++语言做基础,很难对COM有比较深刻的理解。只有用C或C++语言才能实现COM中所有的特性。

(2)进程透明性

COM提供的服务组件对象在实现时有进程内对象和进程外对象两种进程模型。如果是进程内对象,则它在客户进程空间中运行;如果是进程外对象,则它运行在同一台机器上的另一个进程空间或者在远程机器的进程空间中。通常可以把对组件对象的服务程序分为3种:进程内服务程序、本地服务程序和远程服务程序。虽然COM对象有不同的进程模型,但是这种区别对客户程序是透明的,因此客户程序在使用组件对象时可以不管这种区别的存在,只要遵循COM规范即可。

不过,选择进程模型对实现COM对象仍然很重要。进程内模型的效率高,但组件不稳定会引起客户进程崩溃,从而危及客户程序。进程外模型的优点是稳定性好,组件进程不会危及客户程序,一个组件进程可以为多个客户进程服务,但进程外组件开销大,而且调用效率相对低一些。

实现这种透明性的关键在于COM库。COM库负责组件的定位,管理组件对象的创建和对象与客户之间的通信。当客户创建组件对象时,COM库负责装入组件模块或者启动组件进程。如果客户指定在远程机器上创建对象,则两台机器上的COM库会协作完成远程COM对象的创建工作,并且在客户进程中创建一个代理对象,客户程序直接与代理对象进行交互。因此,客户程序可以不管组件对象的进程模型,即使组件的进程模型发生了变化,客户程序也不需要重新编译。

(3)可重用性

可重用性是任何对象模型追求的目标,尤其对于大型的软件系统,可重用性非常重要。COM对象的可重用过程与一般的面向对象的语言例如C++中对象的重用过程不同。对于COM对象的客户程序来说,它只是通过接口使用对象提供的服务,并不知道对象内部的实现过程,因此,组件对象的可重用性建立在组件对象的行为方式上,而不是具体的实现上,这是建立重用的关键。

COM用两种机制实现对象重用。假定有两个COM对象,对象1希望重用对象2的功能,把对象1称为外部对象,对象2称为内部对象,建立如下两种机制:

a.包容方式:对象1包含对象2,当对象1需要使用对象2的功能时,它可以简单地把任务交给对象2来完成。

b.聚合方式:对象1只需简单地把对象2的接口递交给客户即可,对象1没有实现对象2的接口,但它把对象2的接口传给客户程序,而客户并不知道内部对象2的存在。

对象重用是COM规范很重要的一个方面,它保证COM可用于构造大型软件系统,而且,使复杂系统简化成一些简单的对象模块,体现了面向对象的思想。

7.3.4组件对象模型的应用

(1)在Windows操作系统中的应用

在32位Windows版本例如Windows95/98/2000、WindowsNT等系统软件中,很多系统部件以COM的形式实现。这样做的好处是,不仅使各种开发语言可以直接调用系统提供的功能,而且有利于在特殊情况下对组件的单独升级。在Windows操作系统平台上,一些用COM形式提供的组件模块极大地丰富了Windows的功能,而且使Windows功能扩展更加灵活,例如:

a.DirectX多媒体软件包;

b.远程数据对象(RDO)和数据访问对象(DAO)的数据库访问对象库;

c.Internet ClientSDK。

从整个Windows操作系统来看,COM成为系统的基本软件模型,它带来的是灵活性和高效率,以及应用开发的一致性。特别是Windows2000已经与COM的升级版本COM+保持了更为紧密的关系。总之,COM已经渗透到Windows操作系统的各个方面,我们要建立基于Windows平台的应用就离不开COM的使用。COM已经成为Windows平台的组件模型标准。

(2)COM和数据库

在Windows平台上最有影响的数据库接口是ODBC。ODBC是一种标准的编程语言,用于连接各种数据源。不同的数据源由不同的底层ODBC驱动程序驱动。

绝大多数数据库厂商都提供了ODBC驱动程序,差不多所有的数据库都可以通过ODBC进行访问。

在ODBC之后,Microsoft又推出了RDO和DAO。RDO可用于创建和维护远程ODBC数据库系统组件,提供了一个自动化对象库,可在BASIC语言中方便地使用。DAO提供了两种访问数据库的方法:一种方法是通过MicrosoftJet数据引擎对MicrosoftJet数据库进行快速访问;另一种方法是通过ODBCDirect直接访问ODBC数据源。

后来,Microsoft又推出了用于对数据进行一致访问的OLEdB和ADO。OLEdB完全基于COM,可以认为是ODBC的替代品。它不再局限于关系型数据库,而是几乎适于处理所有的线性数据。ADO是建立在OLEdB上层的自动化对象库,可以广泛用于各种脚本语言中,这为脚本代码访问数据库提供了极大的方便。

(3)COM在intranet(企业网)中的应用

在企业信息化中,不可能只使用一个厂家的软件来满足企业的全部应用需求,通常是由一些专业厂商提供专业产品,然后再进行系统集成。从软件本身的发展趋势来看,系统集成所占的比重越来越大,而系统集成的一个关键问题是软件之间的接口。如果所有的软件都遵循同样的接口标准,那么不同软件的集成就有了基础。COM能够作为这样的标准,其作用不断在intranet应用中得到证实。

在intranet应用中,数据库服务器是企业信息资料库,各种应用软件可以通过数据库进行数据共享,但社会信息(例如电子邮件、企业内部的计划和报告等)也要进行管理,以便更好地利用这些信息。为了实现数据信息的共享,必须为相应的组件提供开放、一致的接口。对照前面介绍的C/S模式,很多中间件是通过COM组件来实现的。

(4)在Internet(因特网)公共设施应用接口领域接口中的应用

COM在Internet相关软件中的发展最能体现COM的优势,因为Internet软件要求有很好的开放性,开放性就意味着要遵循标准。在Windows平台上,COM就是这样的标准。

Microsoft提出的ActiveX技术包含了所有基于COM的Internet相关的软件技术。从服务器方面来看,ASP(Active Server Page)把Microsoft的因特网信息服务(IIS)系统与其他软件产品结合了起来。ASP页面文件的脚本分为服务器方执行的代码和客户方执行的代码。服务器方执行的代码可以通过ADO访问IIS服务器上的数据库,可以调用其他ASP对象所提供的各种功能服务,因此,在服务器方提供动态实时信息非常方便。

从Internet客户方软件产品来看,Internet ClientSDK提供了很多可以直接利用的组件或特性,包括Active X控制、Web Browser控制、XML对象模型、Internet Explorer地址簿等,通过这些组件,可以为用户提供更多的便利。

7.4通用对象请求代理体系结构

7.4.1通用对象请求代理体系结构的起源

通用对象请求代理体系结构(CORBA)是由对象管理组(OMG)制定的一种标准。OMG是一个国际性的非盈利机构,其任务是为应用开发提供一个公共框架,制定工业指南和对象管理规范,加快对象技术的发展。其主要技术目标是使基于对象的软件在分布异构环境下具有良好的可重用性、可移植性和互操作性,从而能够在由多种主流硬件平台上运行的多种操作系统构成的异构分布环境中,方便地建立异构分布应用系统。

OMG成立后不久就制定了对象管理体系结构(OMA)参考模型,其核心部分是对象请求代理(ORB)。针对ORB,由OMG组织制定了CORBA规范。OMA参考模型从总体上抽象地描述了OMG组织推出的面向对象技术所包含的内容,以及模型中各组成部分之间的关系。

(2)对象服务(object services)

对象服务是为使用和实现对象而提供的基本服务集合。在构建任何分布应用时,经常会用到这些服务,而且这些服务独立于应用领域。例如,生命周期服务定义了对象的创建、删除、拷贝和移动的方法,但是并不指明在应用中如何实现这些对象。

CORBA的服务称为COSS规范,它由一组接口和服务行为描述所构成,其作用范围几乎覆盖了分布系统和面向对象系统的各个方面。

(3)公共设施(common facilities)

公共设施是向终端用户应用提供的一组共享服务接口,但这组服务不像对象服务那样基本,例如系统管理、组合文档和电子邮件服务。

(4)应用接口(application interfaces)

应用接口是由销售商提供的、可控制其接口的产品,它相应于传统的应用表示。因此,OMG没有对它做标准化的工作。应用接口处于参考模型的最高层。

(5)领域接口(domain interfaces)

领域接口是为应用领域服务提供的接口。例如,OMG为产品数据管理(PDM)应用制定了规范,在该规范中定义了8个使能器,描述了12个功能模块及其接口,明确了PDM系统内部以及PDM系统与其应用系统之间交互的方式。

7.4.2通用对象请求代理体系结构的主要内容

CORBA规范是针对OMA参考模型中的ORB而制定的。CORBA规范定义了接口定义语言(IDL)及映射、单个ORB与ORB之间的互操作机制。

单个ORB体系结构描述了以下主要内容:

(1)IDL通过说明对象的接口来定义对象。

(2)ORB内核提供了客户与对象实现之间的透明通信方法,可以屏蔽对象的实现位置、实现方式、状态和通信机制等细节,以及不同实现方法之间可能存在的差异。

(3)对象适配器位于ORB核心与对象实现之间,负责服务对象的注册、对象引用的创建和解释、对象实现服务进程的激活和去活、对象实现的激活和去活以及客户请求的分发。

(4)IDL桩为用户提供了静态调用方式,IDL构架为客户提供了静态实现方式。IDL编译器对描述服务对象接口的IDL文件进行编译,生成对应于具体编程语言的IDL桩和IDL构架程序。IDL桩负责对用户的请求编码,发送到对象实现端,并对接收到的处理结果作出解释,把结果或异常信息返回用户;IDL构架对用户请求进行解码,定位被请求对象的方法,执行该方法,并把执行结果或异常信息编码后发送回客户。

(5)动态调用接口(DII)、动态构架接口(DSI)提供了动态调用方式和动态实现方式。

(6)在动态方式下,需要查询相应的服务对象信息的接口描述信息,这些信息由接口库提供。接口库通常以IDL描述文件为其输入,将接口描述信息进行处理后存放在文件、数据库或者其他存储机制中,并提供一组标准的调用接口供客户查询使用。

7.4.3通用对象请求代理体系结构的技术特点

COBBA规范具有以下技术特点:

(1)引入了代理(broker)的概念。一个代理至少起3个方面的作用:完成对客户提出的抽象服务请求的映射;自动发现和寻找服务器;自动设定路由实现到服务器方的执行。

(2)所实现的客户方程序与服务器方程序完全分离。这与以面向过程调用机制为基础的C/S模式存在很大的区别,客户将不再与服务器直接发生联系,而仅仅需要与代理进行交互,客户与服务器之间就可以建立更加灵活的关系。

(3)分布计算与面向对象的概念相互结合。这样,可以提高软件的重用率、控制冗余度等。