崔亚芬,李晗双,蒋振刚
(1.吉林省招生办公室,长春 130000;2.长春理工大学 计算机科学技术学院,长春 130022)
软件复用是指重复使用“为了复用目的而设计的软件”的过程[1]。其中,构件组装和构件通信是软件复用中的核心技术,目前国内外都有这方面的研究,在美国军方与政府资助的项目中,已建立了若干构件库系统,如CARDS、ASSET、DSRS等[2];国内许多科研机构也致力于构件方面的研究,如:北京大学软件工程研究所、中国科学院软件研究所[3]。国内外在构件组装与构件通信技术上,都取得了优秀的成果,但也有许多不足之处[4]。比如传统组装技术对现有构件模型和构件之间的协同关系支持不足;其次从软件体系结构角度看,缺乏对构件组装体系结构模型的支持;在构件通信方面上,组装后的软件系统,在构件通信上复杂度较高。结合以上观点,无论哪种形式都是基于接口形式的组装,为了适应不同软件环境,在软件开发中,每个构件都需要重新编写接口程序,之后才能进行组装,从而导致构件之间具有了隐式的依赖关系,同时使构件之间也过于依赖外部的服务,为构件之间的组装增加了难度。
针对构件组装与构件通信的问题,本文提出的一种基于反射机理的组装构件通信技术,简称CMP(Configurable Messaging Protocol),是把构件组装和构件通信分离,构件的组装是依靠构件基类进行组装的,只需要继承;而构件的通信依赖于反射机理,不需要重新编写接口程序。通过这样的机制,为构件组装和系统设计与系统演化提供了相当大的柔性,减少了软件的开发风险,同时也能相应地提高软件的质量。主要从两个方面解决此问题,一是在构件组装方面:在体系结构的基础上设计构件模型,为构件通信提供基础平台;二是在构件通信的方面:在构件组装总线模型上,设计单位总线式管理模型,以解决构件通行存在的再开发问题。
所谓构件组装,指的是将构件组装成一个大的构件或系统所采取的“动作”[5,6]。本文提出的构件组装模型,是结合OOP思想并根据企业信息化应用的分析与研究结果,总结出的CMP通信技术模型。总体结构如图1所示。基于CMP的构件组装框架主要分为五个层次:界面显示层、功能控件层、基础类库层、数据处理层及系统参数管理。
当用户启动软件时加载系统基本对象,并按照对象的配置要求初始化。通过加载抽象的业务对象和加载系统的配置参数对象,使用总线控制单元组装功能构件,这样就完成了可视化的交互界面的初始化。这部分功能主要包括:
构件信息管理对象:构件信息对象是由系统加载并创建。构件信息对象完成对需要组装构件属性值的加载,并以静态泛型的形式存储于系统,构件信息对象包括:生命周期、组装构件信息、显示定位参数等功能。
基础Form虚拟对象:基础Form虚拟对象是功能界面的基类。基础Form虚拟对象提供以界面为单位的虚拟组装管理者,是所有界面的父类。
可视化功能控件对象:可视化功能控件对象是界面创建的,并且在界面释放时也相应的释放。可视化功能控件对象是等同于构件。可视化功能控件对象需要在界面中注册和交互,主要包括:属性、事件的入口、可以读取界面中的公共参数值等。可视化功能控件对象有一个基类,继承基类后,在组装过程中,基本上不需要管理。
图1 CMP框架总体结构
功能控件层主要由两部分组成,一部分是功能控件的父类,另一部分是功能控件的功能实现部分。功能控件父类的主要任务是到其父容器中注册,主要注册的信息包括:属性信息、事件入口信息、获取事件参数值,综合来说就是完成与父容器之间的全部交互工作,并为功能控件提供可实现某种功能的虚函数;功能控件对象的任务是完成预先设置好的功能,并尽可能地降低耦合度。
基础类库是基础的类和属性、方法的一个集合,为所有层次提供功能。
数据处理层是处理业务逻辑的[7]。
系统参数层主要包括以下几个对象:
(1)系统参数管理对象:系统参数对象是由系统加载并创建[8]。系统参数对象是管理记录系统级别的参数,也是为构件通信提供参数的对象,系统参数对象还包括参数的生命周期、参数的定位、参数唯一性判断等功能。
(2)系统基础属性对象:系统参数对象是由系统加载创建的。系统参数对象是记录系统基础属性如版本、作者、语言等。
(3)系统事件管理对象:系统事件对象是由拥有者创建的,并且拥有者在释放时,系统事件管理对象也相应的释放。系统事件对象是由功能控件触发的,并根据配置数据依次执行注册功能控件的入口函数,从而达到组装功能控件之间的通信作用。
以上为CMP的核心对象部分,采用面向对象理论。所有的存储形式全部采用对象的形式。当软件在某个领域内使用时会生产出大量的功能对象,而这些功能对象可以通过参数配置的形式动态组合,完成具体的功能。
构件通信是构件组装的核心部分。在目前的构件组装中最难解决的问题之一就是构件的通信,目前的构件模型的通信方式分为:基于方法调用(消息传递)的组合、插头插座式组合、基于连接子的构件组合[9],并且没有一个统一的标准[10]。Kung-Kiu Lau通过分析现有构件组装方法的不足,认为构件组装的不足主要表现在消息传递上,虽然有人提出了连接器模型及构造连接器的复合方法,但也需要重新编写连接器。
针对构件组装后的构件通信问题,本文提出的构件通信采用反射机理,通过局部共享池来解决构件之间的通信问题。这种方式不需要重新编接口程序,可以极大地提高软件系统的内聚,明显地降低软件系统的耦合度。下面分为三个部分具体介绍CMP的构件通信:
(1)反射调用应用,反射调用是构件通信的核心部分,在用户需要执行某个功能时,某个单独构件不足以完成,这时需要多个构件协同来完成,构件协同工作需要相互传递触发事件和传递参数,为降低软件系统的耦合性,引入了反射机理。反射需要的条件是:路径、命名空间、类名、事件名称、参数值。只要在软件系统开发时把这些配置参数写到配置源中,即可通过反射就可以执行某个类中的函数,在CMP中提出使用这种方式来建立构件的通信。
(2)CMP构件的反射触发事件,构件触发事件指的是在初始化界面完成时,用户在操作某个功能时候所触发的事件。通过这个事件来调用反射共享池中的某个构件组合。首先构件中可能会存在多个用户操作,把每一个操作起一个唯一的名称,这个名称就代表一个完整的用户操作。其次调用反射池入口,通过这个名称找到反射共享池,找到构件组合通行的配置函数列表,通过反射依次调用相应的构件。这样就完成了构件的反射触发事件。
图2 CMP构件协同通信
(3)CMP的构件协同通信。上面两点完成了CMP构件通信的准备工作,如图2具体介绍多个构件协同通信。
如上所述,CMP的构件通信采用反射机理,通过配置参数的形式实现构件之间的通信功能,这样减少构件之间的相互依赖性。在实际应用中,面对不断的需求变化可以重新开发某个功能构件而不会影响整个软件系统。
本文提出的基于反射机理的构件组装与通信方法,通过编写CMP软件,得到证实,此种方式是可行的。软件界面如图3所示,是一个组装后的软件界面,是通过三个复合构件组装而形成的,三个复合构件通过配置参数,以界面为总线单元建立参数共享池、事件共享池,并进行通信。CMP和传统软件相比较,构件组装降低了70%的开发周期时间和84%的项目成本。
图3 CMP构件组装软件
本文在以往的构件组装模型和构件开发模型上,提出一种新型的构件组装方式。本文所提出的构件组装模型,抛弃接口式的构件组装,在CMP软件平台上通过配置参数创建多个总线单元模型,并通过配置参数,在总线模型中调用构件中的功能,实现构件的组装和通信。通过这种模型可以使功能和软件分离,而通过这种功能和软件分离的方法给软件复用提供了一种新的思想。这种构件组装的模型可以满足用户需求的多变性。表1和表2列出本文提出的CMP模型和其它构件组装模型在接口和组装方式上的区别。
表1 CMP模型和其它构件组装接口比较
表2 CMP模型和其它构件组装方式比较
在后续的工作中我们也需要尝试基于软件体系结构的推演方法,并结合面向服务架构的理论,实现软件系统平台式的半自动或智能的分配和管理构件的基础通信功能,使软件趋向于智能系统。
[1]Will Tracz.Confessions of a Used Program Salesman-Institutionalizing Software Reuse[C].Addison-Wesley Publishing Co.,New York,NY,April 1995.
[2]吕建,张鸣,廖宇,等.基于移动Agent技术的构件软件框架研究[J].软件学报,2000,11(8):1018-1023.
[3]杨芙清,梅宏,李克勤,等.支持构件复用的青鸟III型系统概述[J].计算机科学,1999,26(5):50-55.
[4]Roger S Pressman.Software Engineering:A Practitioner’sApproach[M].NewYork:McGraw-Hill Higher Education,2001.
[5]K Lau,P V Elizondo,Wang Z.Exogenous connectors for software Components[C].In Proceedings of 8th International Symposium on Component Based Software Engineering,Springer-Verlag,2005:90-106.
[6]Gan Guohua,Sun Changsong.A Component Composition Description Language Based on XML[C].Proceedings of the International Workshop on Modern Science and Technology Kitami,Japan,2004,9.
[7]于海.基于J2EE构架的生产物流管理系统的研究与实现[D].天津:南开大学,2012.
[8]侯立华,宁汝新.J2EE平台上的PDM系统构件设计[J].北京理工大学学报,2003(2):181-185.
[9]陈波.基于软件体系结构的构件模型和语言研究[D].长沙:国防科学技术大学,2007.
[10]Ravichandran T.Organizational Assimilation of Complex Technologies:An Empirical Study of Component-Based Software Development[J].IEEE Transactions on Engineering Management,2005,52(2):249-268.