对象标准COM和CORBA论长道短(2) CORBA的重要概念是: 1.对象连接 CORBA广泛地支持对象的实现,在单服务器系统中也可以实现由接口定义语言定义的接口。ORB的灵活性既可以直接集成已有的应用,又不会使新对象受某些原则的制约。对象连接提供了有不同类型对象实现时,使用ORB服务的方法,服务包括:对象引用、方法调用、安全控制、对象实现的激活与静候等。2.接口定义语言(IDL) CORBA用IDL来描述对象接口,IDL是一种说明性语言,它的语法类似于C++。IDL提供的数据类型有:基本数据类型、构造类型、模板类型、和复合类型、操作说明。这些类型可以用来定义变元的类型和返回类型,操作说明则可以用来定义对象提供的服务。IDL还提供模块构造,其中可以包含接口,而接口是IDL各类型中最重要的,它除了描述CORBA对象以外,还可以用作对象引用类型。IDL提供了接口继承性,派生接口可以继承其基类接口所定义的操作与类型。IDL的接口继承性有其特殊性,此处不赘述。总之,CORBA的IDL是一种说明性语言,描述面向对象系统开发所遵循的接口与实现相分离的基本原则。3.动态调用接口 把IDL说明编译成面向对象程序设计语言的实代码后,客户可以调用已知对象的操作。在某些应用中,用户并不了解应用接口编译信息,但也要求调用对象的操作,这时就要动态调用接口来调用用户的操作了。例如,图形用户接口应支持用户浏览接口公共库,以获得每个对象所支持的操作信息,用户可根据自己的需求从浏览对象中挑选出所需的对象操作,具体的对象操作的调用实际上是用动态调用接口来完成的。4.接口公用库 接口公用库持久地存储IDL的接口说明,借助于接口公用库,可以实现对象继承性层次结构的导航,并且提供了有关对象支持的所有操作的描述。接口公用库最常见的功能是为接口浏览器提供信息,帮助应用开发者找出潜在的可重用的软件部件。ORB可以利用接口公用库检查运行时的操作参数类型,但接口公用库的基本功能是提供类型信息,为动态调用接口发送请求提供信息支持。 二、组件对象模型:COM标准COM是微软公司推出的与CORBA抗衡的产品,在设计开发COM时,微软把COM定位成基于对象的程序设计模型,旨在促进软件的互操作性,实际上它是基于OLE的组件标准,COM采用了OLE的对象请求代理,定义了OLE组件对象及应用之间的接口。COM所涉及的重要概念有: 1.COM接口 COM的应用程序之间以及应用程序与系统之间是要相互交流信息和相互作用的,其相互作用是通过一系列的函数实现的,这些函数就叫作“接口”或“界面”。COM接口是组件与组件之间缔结的契约,提供了特定层次上的服务或功能性。COM接口提供了以下的便利:·无需重新编译,对象就可以增添新的功能;·能够透明地向另一个过程或另一台机器上的对象发送RPC调用;·诸如C、C++、Pascal、Ada和Smalltalk等凡是支持指针结构并通过指针能显式地或隐式地调用函数的程序设计语言都能够创建并使用COM对象。COM定义了一种特殊的接口IUnknown来实现一些基本功能,所有对象均支持此基本接口,该接口的方法是QueryInterface,它允许对象的用户在运行时动态地确定COM对象是否支持某一个接口。COM的接口定义语言是COMIDL(Interface Definition Language),它是OSFDCE所采用的IDL的一种简单扩展,DCE,即分布式计算环境,是OSF(Open Software Foundation)组织提供的一组独立于各平台的中间件服务,它使得分布的应用程序得以协调运行。开发人员可以使用COMIDL来创建对COM对象的接口方法的说明。2.用GUID来标识对象和接口 未来的分布式对象系统可能大到拥有数百万个接口,而软件的组成部件是必须唯一标识的。在大型复杂系统中,如果仅用便于人类阅读的名称来标识组件的话,那么几乎是100%要出现名字冲突现象的。为了避免这种事件的发生、解决名字冲突问题,COM采用了全局唯一的标识符GUID(Globally Unique Identifier),每个GUID都有128位整数并能确实保证标识符在空间世界和时间世界中的唯一性。COM的GUID和OSFDCE的UUID(Universally Unique Idenfifiers)是完全等同的。3.摒弃继承性而采用聚类 微软认为在松散耦合的、分散的、逐步改善的对象系统中,继承性是造成很多麻烦的根源,但微软也承认如果程序设计人员都能控制继承性层次,那么实现继承是一个十分有用的技术,且紧耦合也不会带来太多的麻烦。不过微软还是认为在实现层次上看,对象与对象之间的契约是不言明且有二义性的,当父或子组件改变了实现,那么与其有关的组件的行为就成为非定义行为了。