组件模型:COM/DCOM、CORBA、KCOM

原创 2005年04月27日 20:14:00

 

从第一台计算机产生开始,硬件技术和软件技术几乎同时开始它们的发展历程。但是半个世纪以来硬件技术的发展速度要远远高于软件技术的发展,从电子管到晶体管,从集成电路到超大规模集成电路,运算速度从每秒几千次到每秒上万亿次。相比之下软件技术就远远跟不上硬件技术的发展,其中的根源应该是很长时间内没有找到有效软件构造方法。可喜的是七十年代开始出现的面向对象的认知方法和编程语言,经过二十多年的发展,于九十年代结出累累硕果,在二十世纪末出现了由面向对象发展而来的组件技术,它正是软件业期待多年的这样一种有效的软件构造方法。

组件模型定义组件的制作方法,运行方式,以及相互作用机制。本文介绍目前流行的两种组件模型:COM(以及建立在COM基础之上的DCOM)组件模型、CORBA组件模型,最后引入一种便于提高组件构造效率的、更真实地反映现实世界的源码级组件模型——KCOM组件模型。

1.COM/DCOM组件模型

COM(the Component Object Model)是一种平台独立的、分布式、面向对象的系统,用于创建可互操作的二进制软件组件。COM 是微软的OLE(复合文档),ActiveX(可用于Internet的组件),以及许多其它技术的基础。COM最初是由微软公司提出并独立发展,现在,它已交给一个独立的组织管理。

为了理解COM以及所有建立COM基础之上的技术,有一点必须铭记在心,那就是COM不是一种面向对象语言,而是一种标准。COM 也不指定一个应用程序应该如何构建。语言,结构,以及实现细节都留给应用开发人员。COM指定一种组件模型以及COM组件(或对象)之间相互作用所需具备的编程要求。COM组件可以分布在同一个进程内,或者在不同的进程间,甚至是远端的机器上。COM组件可以是用不同的语言编写,结构也可以有很大的不同。COM被认为是一种二进制标准,因为它是一种当程序被编译成二进制机器码后才起作用的标准。

COM对语言的唯一要求就是必须能创建结构指针,并且能显式地或隐式地通过指针调用函数。面向对象语言,如C++、Smalltalk等,都提供简化COM组件实现的编程机制。其它语言环境,如C、Pascal、Ada、Java、BASIC等也都能创建和使用COM组件。

COM定义了COM组件的本质特征。一般来说,软件是由一组数据以及操纵这些数据的函数构成的。COM组件通过一个或多个相关函数集来存取组件的数据,这些函数集称为接口,而接口的函数称为方法。COM组件通过接口指针调用接口的方法。

除了指定二进制组件标准,COM还定义一些基本的接口以提供一些所有基于COM组件的技术所公有的函数。此外,COM还提供一些所有组件所需要的API函数。

DCOM(the Distributed Component Object Model)扩展COM,以支持不同计算机之间的对象间通信,这些计算机可以是位于局域网,广域网,甚至是互连网。

DCOM是COM这一世界流行的组件技术的自然发展,因此可以在充分利用已有的基于COM的应用程序、组件、工具、知识等的基础之上转向分布式计算。DCOM使用户能将重点放在真正的商业应用上,而不必关心太多的网络协议细节。

DCOM位于应用程序的组件之间,将组件以不可见的方式胶合在一起组成具有完整功能的应用程序。

DCOM的特性使得编写分布式应用程序变得容易:

l          适合从最小的单机环境到最大的集群服务器

l          提供组件间的丰富的、均衡的通讯

l          可以强有力地扩充以适应功能需求

l          可充分利用已有组件,比如说COM组件

l          精通不同编程语言和开发工具的小组可以协同工作

l          为终端用户提供最快的响应,同时又有效地节省网络带宽

l          固有的安全性

l          负载平衡和容错特征

l          分发、配置和管理的高效性

l          可以同任何网络协议相结合并集成到任何硬件平台

l          可以充分利用其它Internet标准和协议

DCOM规定了网络上组件之间的通信协定,因此DCOM可以说是组件之间的TCP/IP协议。

COM/DCOM组件目前广泛地用于Windows平台,由于Windows平台的极大的市场占有率,因此COM/DCOM事实上已经成为一种组件标准。COM/DCOM的流行还得益于众多优秀的开发工具的支持,Visual C++、Visual Basic、Delphi等语言工具都支持COM组件的制作。

2.CORBA组件模型

CORBA(the Common Object Request Broker Architecture)是OMG(the Object Management Group)制定的开放的、独立于开发商的体系结构和基础构造,通过CORBA,计算机应用程序可以通过网络协同运作。因为使用标准的IIOP(the Internet Inter-ORB Protocol)协议,两个基于CORBA的程序,不管是来自任何开发商、运行在何种机器、采用哪种操作系统和编程语言、通过不同的网络,都可以相互操作。

OMG,成立于1989年,是开发商,开发人员,以及最终用户的联盟。OMG的目标是鼓励一种对象管理体系结构(OMA)的发展和标准化,这种对象管理体系结构提供在异种网络上面向对象的分布式组件的广泛互操作性。CORBA规范构成OMA体系结构的核心。

CORBA的体系结构是基于面向对象技术的,并且是围绕着三个关键成份构建的:OMG的接口定义语言(IDL)、对象请求代理(ORB)、标准协议(IIOP)。

在对一个分布式系统进行初始的分析和设计之后,紧接着就是定义对象的接口。对象接口表达客户端和服务器端应用程序之间的协议。在CORBA系统中,使用IDL(the Interfaces Definition Language)来描述接口。IDL是独立于语言的,它的语法和C++相似,包括模块结构、接口、操作、属性、用户自定义类型、异常,等等。IDL并不指明接口的实现方式。不同的CORBA产品有不同的处理实现描述的方法。所有的CORBA产品都生成基于IDL定义的指定语言的绑定。C语言是第一个由CORBA指定的映射语言,此外,OMG还认可C++、Java、Smalltalk等语言绑定。IDL定义可以储存在一个接口仓库中,客户端可以使用接口仓库进行类型检查以及执行动态接口操作。

ORB(the Object Request Broker) 是CORBA系统的核心。一个ORB将客户端应用程序的请求递送到服务器端应用程序。客户端的接口完全独立于对象的实现。对分布式系统开发人员来说,底层的ORB实现方式是不重要的。重要的是ORB的接口和对象的接口是否有足够好的定义以提供跨整个分布式环境的统一的框架,以及通过ORB建立起来的应用程序在不同平台之间是否能很好地沟通。ORB提供一种将客户端请求传达到目标对象实现的机制。ORB通过减低客户端对方法调用细节的了解程度而简化分布式开发,它使得客户端的请求看上去象是本地过程调用。当客户端调用一个方法,ORB负责找到对象的实现,必要时激活对象,将请求递送给对象,并将任何响应结果返回给调用者。

IIOP定义一整套数据格式化规则,这些规则称为CDR,并且是按CORBA的接口定义语言所支持的类型来制定的。IIOP规范还通过使用CDR数据格式化规则定义了一套消息类型,这些消息类型支持CORBA核心规范中所有的ORB语义。CDR格式化规则和消息类型共同构成一个抽象的协议——GIOP(General Inter-ORB Protocol),GIOP消息可以通过任何传输协议发送,如:TCP/IP协议,SPX协议,SNA协议,等等。但是,为了确保ORB产品之间的互操作性,IIOP规范要求ORBs发送GIOP消息时要通过TCP/IP协议,因为TCP/IP是Internet上的面向连接的标准传输协议。简单来说,GIOP加上TCP/IP就是IIOP。

CORBA引人注目的特征包括:

l          极广泛的平台和编程语言支持

l          与面向对象方法完全兼容,以保持分布式应用程序的灵活性和可升级性

l          具有广泛的开发商、开发人员、和用户支持

l          开放的、可互操作的体系结构

l          包含一种灵活的对象间通讯的互联网协议标准

l          支持面向对象的分布式应用程序

l          成熟的对象概念

l          接口和实现之间的良好分隔

CORBA组件能运行于任何一种平台之上,特别是在Unix平台上,它已经成为编写分布式应用程序以及中间件的标准组件模型。CORBA从一开始就是为了成为一种跨平台的分布式组件标准,经过多年的发展,已经成为一种成熟、完备的组件模型。CORBACOM/DCOM之间一直是一种竞争关系,因为微软只极力推崇自己定义的COM/DCOM,因此在微软所提供的流行的开发工具,如:Visual C++Visual Basic等,都不支持CORBA组件的编程,这对CORBAWindows这一最主要的操作系统平台上的普及造成了极大的障碍。

2KCOM组件模型

无论是COM/DCOM,还是CORBA,它们都烙有很深的计算机软硬件系统的印记。我们构建组件模型的目的是提供描述、反映、模拟现实世界的方法和工具。虽然计算机是我们的实现工具,但是我们的组件模型应该尽量避免受到计算机软硬件系统的影响,想办法构建最接近现实世界的组件模型。此外,一个好的组件模型应该成为普通人的日常工具,而不应该只是计算机专家的专有工具。下面介绍一种全新的组件模型——KCOM组件模型。

KCOM Space是一种组件开发及运行平台,KCOM组件模型是KCOM Space的最重要的组成部分。

KCOM这个名称由K和COM组成。K是Knowledge的首字母,代表知识和智能;COM是Component的缩写,也是Commerce的缩写,代表组件以及商务。KCOM既代表KCOM组件模型,也表示它是一种用于实现和运行电子商务的知识化、智能化的工具平台。
KCOM组件模型建立在这样的观念之上:组件可以层层包裹,同一层次的组件相互之间不直接作用,而是通过父(外层)组件间接作用,父组件相对子(内层)组件而言起了胶合作用。父组件和子组件之间通过消息通讯:父组件通过子组件的名称向子组件发送消息;子组件因为无法知道父组件的名称而只能向外广播消息,隐含的接受者就是父组件。一个组件接收到的消息来自两方面:父组件和子组件。组件的事件与方法本质上是一样的,从父组件发给子组件的消息叫做方法,从子组件发给父组件的消息叫做事件。

KCOM组件的子组件的物理位置可以分布在网络的不同地方,只要能通过某种方式传递消息,父组件和子组件就可以看成一个统一的整体。KCOM组件的这一特性表现为分布式组件计算。

KCOM组件所包含的子组件可以是动态的,每时每刻,都可以有新的子组件加入进来,也可以有子组件离开。一个最明显的例子可以很好地说明动态组件的概念:如果将商店看成一个父组件,而顾客视为子组件,那么顾客和商店之间就构成这样一种动态关系。

由于KCOM组件之间是包含的关系,子组件相对父组件是一种局部的关系,因此KCOM组件的命名规则就很简单了,只要在同一层组件之间名称不重复就可以了,而每一个KCOM组件所包含的子组件的数目是有限的,这样对KCOM组件来说,就不必要有象GUID这样的全局的标识。对于位于网络不同位置的KCOM组件,可以通过网络地址加上组件名称来标识。

KCOM组件模型的目标就是最真实地反映现实世界。现实世界就是由大大小小的组件构成:大到宇宙,小到原子,组件层层包裹;物质世界如此,人类社会的组成也是这样,从作为个体的人,到集体,到整个社会,都可以用组件加以描述。

COM/DCOM是目前业内流行的组件标准,将KCOM与COM/DCOM做比较,将有助于更好地理解KCOM的内涵。

COM/DCOM组件模型 

l          COM/DCOM组件模型是一种平台独立、分布式、面向对象的系统,用于创建可相互作用的二进制软件组件。COM/DCOM是微软的OLE(复合文档)和ActiveX(可用于Internet的组件)以及许多其它技术的基础技术。

l          COM/DCOM之所以被认为是一种二进制标准,是因为它是一种在应用程序被编译成二进制机器码之后才起作用的标准。

l          COM/DCOM不是一种面向对象语言,它也不指定一个应用程序如何构造,它是一种标准,它指明一种组件模型和使组件之间能够相互操作的编程需求。COM/DCOM组件可以运行在单一进程、不同进程、甚至是远端机器。

l          COM/DCOM组件可以通过许多编程语言来创建。许多面向对象语言,诸如C++,都提供可简化COM/DCOM组件实现的编程机制。

l          COM/DCOM定义了一个COM/DCOM组件的核心实质。一般来说,一个软件组件由一组数据以及管理这些数据的函数构成。一个COM/DCOM组件是这样的一种软件组件,它专门通过一组或多组相关的函数存取组件数据。这些函数集合称为接口,而接口的函数称为方法。对COM/DCOM来说,它需要的唯一的调用接口方法的途径就是指向接口的指针。

l          编译好的COM/DCOM组件是不能修改的,要增加新的功能只能由开发商对组件源码进行修改、更新,然后重新编译生成新的COM/DCOM组件。

KCOM组件模型

l          KCOM是KCOM Space定义的一种组件模型,用于创建可相互组合作用的软件组件。KCOM组件模型是KCOM Space平台及其应用程序的基础。

l          KCOM不是一种二进制组件模型,KCOM组件不直接面向机器代码,KCOM有自己的虚拟机运行KCOM组件。KCOM是一种源码级的组件模型,它直接对结构化存储在HKB文件内的KCOM组件起作用。KCOM虚拟机屏蔽了计算机实现的细节。

l          KCOM直接指明一个KCOM组件应该包括的成份:组件外观(KCOM Aspect),用于组件与外界交互的界面;组件方法(KCOM Method),用于指导组件如何操作运行;组件属性(KCOM Property),用于存放组件的状态值;组件事件(KCOM Event),用于定义在特定的运行过程中将会触发的事件。KCOM有自己的语言,通过语言组件化,KCOM语言可以表现为多种形态,当前实现的是KCOM Basic语言。KCOM对编程语言加以改造和扩充,引入组件运算的功能。

l          KCOM Space内,可以相同的使用方法编辑KCOM组件和普通组件,此外,还提供一些操作便于KCOM组件的使用,如装载、导入、导出KCOM组件,就地制作、检入、检出KCOM组件。

l          KCOM组件的运行方式不同于运行COM组件:COM组件运行前必须先将整个OCX、DLL文件下载到客户端操作系统注册;而KCOM组件的运行则不必将整个HKB文件下载到客户端浏览器,而只下载当前用到的数据、代码。实际过程是这样的:先下载KCOM组件首页;用户鼠标、键盘操作产生事件,将响应事件的相应的KCOM方法下载运行;链接到分页面,将相应的页面数据下载,重复这些过程。KCOM Stage Control将下载过的KCOM页面、方法存放在本地硬盘,当下次运行该KCOM组件时,KCOM Stage能准确地知道哪些页面和方法已经下载过,哪些页面和方法已经更新需要重新下载,对于下载过的还未更新的页面和方法就从本地硬盘调入。KCOM组件的这一特性是使组件空间应用软件能有效地运行于Web环境的重要因素之一,因为它使KCOM组件运行时需要通过Web传输的数据量减少到能充分适应Web环境的有限带宽。

l          KCOM应用程序来说,它的意义不仅仅是在于它是由组件组合而成,还有一个很重要的意义在于它自身又可以作为组件应用在其它应用环境之中。

l          制作好的KCOM组件除了能运行以完成特定的功能外,用户还可以对它直接进行修改、更新,以提供定制的功能。

l          定义KCOM组件模型的目的在于以更加简便、直观、高效的方法将应用软件组件化。

COM/DCOM/SOAP/CORBA

首先,COM/DCOM是组件/分布式组件模型标准,CORBA是分布式应用的服务标准。CORBA和DCOM为分布式应用程序建立服务和服务对象来执行客户端调用的服务。而SOAP是基于XML和HTTP的分布...

COM与.NET调用DCOM组件

COM组件已经部署好了,接下来就是调用了既然我们是部署了COM+服务器,我们这里就讲下怎么远程调用COM组件。 在创建好VC的WIN32项目后,在预编译文件中引用。 #ifndef _WI...

COM/DCOM开发练习之进程内组件实例

1)使用C++语言实现进程内组件,组建提供加、减、乘、除、判断是否素数等计算服务;客户端部分包括录入和查询部分。 2)在VC++环境上利用ATL向导进行开发。      1.进程内组件   服务器端:...

COM/DCOM开发练习之远程进程外组件实例

1)使用C++语言实现远程进程外组件,组建提供加、减、乘、除、判断是否素数等计算服务;客户端部分包括录入和查询部分。 2)在VC++环境上利用ATL向导进行开发。 3.远程进程外组件(DCOM)  ...

COM/DCOM开发之进程外组件

一 目的 使用VC++的ATL编程实现进程外组件。同时实现客户端这些组件的调用。 二 要求 1)使用C++语言实现进程外组件,组建提供加、减、乘、除、判断是否素数等计算服务;客户端部分包括录入和查询部...

COM多线程模型、DCOM(潘爱民) PPT

  • 2011年02月24日 13:21
  • 374KB
  • 下载

分布式组件对象模型DCOM揭秘

介绍   对于许多人来说,学习COM和DCOM是一件吃力的事情。COM的用处很大,不少微软的产品和编程者工具都是基于COM,不过,COM是一门颇难掌握的技术,你可能曾经想去学习它,阅读过一些书,...
  • stypace
  • stypace
  • 2012年12月13日 11:55
  • 897

[软件体系结构]DCOM,CORBA,EJB介绍

背景介绍90年代出现的分布式对象技术为网络计算平台上软件的开发提供了强有力的解决方案。目前,分布式对象技术已经成为建立服务应用框架和软件构件的核心技术,在开发大型分布式应用系统中表现出强大的生命力,逐...

中间件(RPC,CORBA,DCOM,web service等)

http://en.wikipedia.org/wiki/Middleware_(distributed_applications) http://baike.baidu.com/view/23...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:组件模型:COM/DCOM、CORBA、KCOM
举报原因:
原因补充:

(最多只允许输入30个字)