组件技术解说

组件技术解说

软件开发技术经历多次的变革,从最初的机器语言的数字表达程序开始,经过汇编符号程序、结构化和面向对象的高级语言程序设计的进步,发展到现在组件技术。软件需求的变化从一般的计算开始,到实用的计算,到管理(MIS)最后到分布式系统。软件环境的变化从最初的但任务、文字界面和单线程,到多任务、图形界面和多线程,从最初的平台相关、单机和单一语言到跨平台、分布式应用和多种语言。软件开发模式从最初的操作系统、编译器和编辑器的集合发展到操作系统、编译器、集成开发环境、库结构、技巧、组件和其他的基础设施的集合。

1.组件及特征

组件是独立于特定的程序设计语言和应用系统、可重用和自包含的软件成分,这些软件成分可以很容易的被组合到更大的程序当中而不用考虑其本身的实现细节。在一个系统中,组件是一个可替换单元因此软件系统更易于开发且具有更大的灵活性

组件技术是在面向对象的开发技术基础上发展起来的,可以说是面向对象技术在系统设计级别上的延伸。与面向对象技术相比,组件技术继承了面向对象的封装性,而忽略了继承性和多态性。组件是对象有机结合,不需要关心组件中的对象和实现细节。组件有其固定的特征,即软件重用和互操作性、可扩展性、组件接口的稳定性和组件基础设施稳固性而且无论是静态还是动态的引用都可以稳定的提供组件的功能和接口;

2.组件模型

组件模型是组件类、组件接口和组件间相互作用说明的集合。组件化技术的核心就是将一个应用系统划分成多个组件,这些组件保持一定的功能独立性,可以使用不同的开发工具分别开发,可以分别编译,甚至分别调试和测试。当所有的组件开发完成后,把它们组合在一起就得到了完整的应用系统,组件间的协同工作是通过相互间的接口来完成的。当系统的外界软硬件环境发生变化或者用户需求有所更改时,并不需要对整个系统进行修改、编译,而只需对受影响的组件进行修改编译,然后重新组合得到新的升级软件。

建立服务应用框架和软件构件的核心技术是分布式对象技术,在开发大型分布式应用系统中表现出强大的生命力,逐渐形成了3种具有代表性的主流技术,即MicrosoftCOM/DCOM/COM+技术、OMGCOBRA技术和Sun公司的Java技术。

2.1 COM/DCOM/COM+组件模型

COM (Component Object Model )是一个组件软件体系结构,可用不同软件厂商的组件,组装一个应用或系统。COM同时指示各对象如何交互操作与通信。在Windows 操作平台上,COM以DLL 动态链接库DLL EXE 可执行程序的形式封装。通常,COM接口的定义和实现是分开进行的,COM 接口是COM技术的关键所在。使用COM组件的客户只能通过获取指向接口的指针来访问组件中的对象,这表明客户只知道组件可以完成什么样的工作,而不了解它内部的具体实现。从而实现了较安全的调用对象,并且与它所在的操作系统、硬件、程序设计语言无关。COM是组件对象之间在二进制级相互连接和通讯的一种协议,COM对象之间靠接口机制进行通信,

DCOM(Distributed Component Object Model ) COM 的网络技术改进,它把组件软件应用推上了Internet。 DCOM使用网络协议(TCP/IP)代替本地进程通信协议LRPC,从而对位于Internet上的组件对象提供透明的支持。DCOM中的服务器对象对客户完全是透明的,客户通过方法调用来访问服务器对象,要从虚函数表中获取方法的指针,然后调用。对于组件与客户对象是否在相同的线程内来决定是否需要COM介入。DCOM是COM在分布计算方面的自然延续,为分布在网络不同节点的两个COM组件提供了互操作的基础结构。DCOM增强COM的分布处理性能,支持多种通信协议,加强组件通信的安全

COM+ 倡导一种新的设计概念,COM组件提升到应用层,把底层细节留给操作系统,使COM+ 与操作系统的结合更加紧密。COM + 的底层结构仍然以COM 为基础,但在应用方式上则更多地继承了MTS( Microsoft Transaction Server ) 的处理机制,包括MTS 的对象环境、安全模型、配置管理等。COM+ COMDCOMMTS 三者有机地统一起来,同时也新增了一些服务,如负载平衡、内存数据库、事件服务模型、队列组件服务等,形成一个概念新、功能强的组件体系结构,使得COM + 形成真正适合于企业应用的组件技术。如下图所示:在COM基础上增加了侦听机制,拥有了运行时的扩展性。

2.2 CORBA组件模型

CORBA 是一种开放的行业标准,它由参加“对象管理组织 (OMG)”的 600 多家公司支持。OMG 并不实现自己的规范,而是依靠厂商的实现,CORBA 还提供了高度的交互操作性。这保证了在不同的 CORBA 产品基础之上构建的分布式对象可以相互通信。

CORBA的特点就是其中引入了代理的概念,利用代理可以实现客户端抽象服务请求的映射、服务器的发现和查找,这样用户在写客户端程序时就可以避免很多细节而只是完整地定义和说明客户端需要完成的任务和目标。同时CORBA还实现了软件总线的机制,使得任何应用程序或软件系统只要具有与接口规范相符合的接口定义就能方便的将组件集成到系统中,而这个接口规范独立于任何实现语言和环境。

OMG IDL编译器实现了到C++、SmallTalk、Ada和Java等语言的映射,对接口进行IDL编译生成的是客户端使用的Stub 文件和服务器端的服务器框架Skeleton文件。CORBA通过协议是IIOP定位不同系统上ORB间基于Internet的交互标准,规范了传输的语法和ORB之间的消息格式,从而建立了ORB之间的基于面向连接TCP/IP协议的互操作性,从‘而实现了Internet上ORB之间的交互。IIOP是GIOP协议的一个子集,是专门用于在TCP/IP下实现交互而做的协议。

Web Services是把应用程序透过SOAP接口,连到网络上。Web Services当然还有很多。可以在网络上,从任何的地方去使用组件。

2.3JavaBeans组件模型

JavaBeans技术也是针对JAVA语言在Internet上的应用而提出的一种技术,其目的就是“一次编写,在任何地方都可运行和重用”。JavaBeans是建立在JAVA平台上的,扩展了JAVA语言,可被放在容器中,提供具体的操作功能,它可以是可视化的,也可以是不可见的后台处理程序;既可以是中小型的控制程序,也可以是完整的应用程序。

JavaBeans 通过串行化实现定制组件的永久性存储,通过反串行化可以实现组件状态的恢复。一般来讲,JavaBeans由两个部分组成,即数据和处理这些数据的方法。JavaBeans中的公共方法是JavaBeans同外界通信的主要途径。JavaBeans引入了对象总线的概念,由本地扩展到Internet和企业内部网。它提供了三中对象总线:IIOP、RMI以及JDBC。其中JDBC用于数据库访问,IIOP用于与CORBA 组件通信,而RMI是用JAVA语言建立的分布式计算环境,其客户端的JAVA程序通过RMI内部通信机制调用应用服务器上的JAVA对象的有关方法。由于JAVA语言的可移植性使得RMI也具有很强的跨平台特性,但是RMI只能访问JAVA对象,与CORBA组件之间的通信还需要进一步研究。

3.几种组件技术的区别

COM技术是Microsoft的独家技术,经历了OLE 2/COM、ActiveX、DCOM和COM+等几个阶段。Microsoft的COM平台效率比较高,同时它有一系列相应的开发工具支持,应用开发相对简单。但是COM/DCOM适应的平台单一,而且编程C++紧密结合,对其他语言的支持产生了很多问题。其中DCOM的指针问题最为典型。

COBRA标准主要分为3个层次:对象请求代理、公共对象服务和公共设施。最底层是对象请求代理ORB,规定了分布对象的定义(接口)和语言映射,实现对象间的通讯和互操作,在其上定义了一些服务和一些基础设施的支持。CORBA的特点是大而全,互操作性和开放性非常好。然而其缺点是庞大而复杂,并且技术和标准的更新相对较慢。CORBA支持多平台,避免了平台不一直所带来的问题,CORBA使用IDL转换标准语言,目前确认的有5种。

JavaBeans是依赖JAVA语言的组件,由于JAVA的平台无关性,使得JavaBeans可以容易的运行在不同的开发平台之间。是理想的Internet技术的载体,CORBA规范和和互操作标准也深入到Intranet和Internet中。对于异构的企业级应用,CORBA和JavaBeans有明显的优势,CORBA处理网络的透明性,而JavaBeans处理实现的透明性。JavaBeans和CORBA技术的结合将成为组件技术的新的发展方向。

JavaBean因其外部接口而与纯对象不同。JavaBean设计成对单一进程而言是本地的,它们在运行时通常可视。这种可视组件可能是按钮、列表框、图形或图表。EJB是设计成运行在服务器上,并由客户机调用的非可视远程对象。可通过多个非可视JavaBean构建EJB。它们安装在EJB服务器上,并象调用其它CORBA远程对象那样获得进行调用的远程接口。

对现有资产或系统的利用上,Java 和 CORBA 语言使得可以将这些有用的资源继续保留。由于其编译后的字节码结构,Java 语言将创建和分发可移植的对象,而 CORBA将这些对象与计算环境的其余部分进行连接和集成。

当前流行的Web service技术就是利用SOAP以一种平台无关和位置无关的方式来调用组件。SOAP客户端向服务器发送请求信息,要求执行组件的功能,服务器处理发送的请求,执行我们需要的函数,然后把执行结果以响应信息发送到客户端。这些消息都是XML格式的,而且可以以多种协议在客户端和服务器之间进行传输。可以说Web service就是一种更高层次的组件技术,是把功能完全封装后利用WSDL描述接口,来提供服务的。

4.组件开发模式(CBSE)

基于组件的开发(Component Based Development)是在C/S模式向3层转化的时候发展起来的。这使得软件开发能像产品组装一样生产。它是以组合、继承、设计组件为基础,按照一定的集成规则,分期、递增式开发应用系统,缩短开发周期。

基于组件的开发思想使软件的开发按照大规模的工业化的方式进行,是一种一般性的软件体系结构,提高了软件的可重用性。在一个组件的开发模型中,首先要有组件框架,用于组件的运行环境,然后开发组件,按照规范实现组件的的接口和组件类。将组件配置到组件框架中,与其他组件协作提供服务。CBSE以组件为核心,从根本上改变了软件生产方式,提高了软件重用率,保护了已有的投资,使开发者将更多的注意力放到业务流程和业务规则上去。CBSE开发方式采用松耦合,模块化,重点在于接口,是一种进化式的并发式开发。

组件的开发思想可以帮助开发人员封装一组接口作为一个特定服务从更广泛的意义上组件比类和对象更完善、功能更强一个组件可以直接封装一个来自分析和设计模型的问题可以更快地进行应用项目的开发在更高级别上实现重用与纯面向对象开发过程相比,组件开发的重点在于组件的功能识别和装配,而不是面向对象方法中的类的识别与开发。正式因为组件技术的规范性,所以标准组件接口模型能在后续的开发中被重用几率更高,因此,组件技术是未来软件开发中的重要技术。

5.结束语

组件技术是对面向对象技术的一次进步,当前的软件开发技术正从面向对象技术转向基于组件的开发技术,基于组件的开发模式也是未来软件开发模式的发展方向,虽然当前组件模型仍存在一些问题,比如组件之间的通信问题和跨平台问题,但是,毫无疑问,组件技术的提出是对原有开发技术和方法的一次跨越,弥补了不足,提出了新的开发方式。

参考文献:

1. Sun Microsystems Inc. Entrprise JavaBeans Speciation, Sun Microsystem Inc,1999.

2. PAUL J , Perrone. J2EE构建企业系统专家级解决方案[M] . 张志伟,谭郁松,张明杰译. 北京:清华大学出版社,2001.

3. Tbuan L Tbai, DCOM入门 ,中国电力出版社

4. DON BOX, COM本质论,中国电力出版社