《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 基于构件的组装开发环境

基于构件的组装开发环境

2008-12-22
作者:谢晓芹 李涓子 徐鹏 王克宏
1 引言
    构件是可独立开发和部署的单元,它具有自包含性,可重用性。基于构件的软件开发可以提高软件开发效率和产品质量, 基于构件的软件开发要求相应的工具支持. 基于构件的开发环境" title="开发环境">开发环境(Component-based Development Environment, 简称CBDE)已成为软件工程领域的一个研究热点。CBDE必须为用户提供重用构件的所有信息.本文介绍了构件模型" title="构件模型">构件模型的研究现状" title="研究现状">研究现状,CBDE环境的需求以及java语言对CBDE需求的满足,最后给出了一个原型系统实现。
2 构件模型
    构件的表现形式多种多样,但在组装开发环境中应以一种统一的方式对其建模,才能实现异构" title="异构">异构构件的集成,实现真正的构件重用。
2.1 构件模型内容
    构件模型定义了构件的本质属性,规定了构件接口的结构以及构件之间、构件与构件基础设施之间的交互机制。对构件的建模通常包含以下几个方面[1]:
。语法级:传统的接口描述语言、通常的程序设计语言;
。行为级:通过前后条件来刻画操作的语义;
。同步级:设定构件的不同操作之间的同步来保证相应操作的原子性;
。质量级:刻画构件所提供的服务的质量,如:最大响应延迟、平均响应时间等。
。非技术级:包括作者,日期,公司名称,关键词等.
2.2 研究现状
   目前在学术界和产业界出现了多种构件模型,其中Traczi 90年提出的3C模型是学术界普遍认同的一个具有指导性作用的构件模型。该模型从概念(Concept)、内容(Content)和语境(Context)三个不同方面来描述构件[3]:
。概念:关于构件做什么的抽象描述,可以通过概念去理解构件的功能。概念包括接口规范和语义描述两个部分。
。内容:概念的具体实现,描述构件如何完成概念所刻画的功能。
。语境:构件和外围环境在概念级和内容级的关系,语境刻画构件的应用环境,为构件的选用和适应性修改提供指导。
   但是3C模型本身没有形式化的良好定义。在产业界,成熟的构件模型有OMG的CORBA、Microsoft的COM/DCOM/COM+和SUN的JavaBeans/EJB,它们三足鼎立,构成了实现级构件模型工业标准的竞争与互操作并存的格局。但这些构件模型有自己独有的实现语法和语义,要实现异构构件的共享有一定困难。 许多文献提出了自己的构件模型,及其相应的组装方法。但这些模型通常局限于专有的领域,缺乏通用性。现有的构件模型一般认为构件由构件接口和构件内容两部分组成,构件接口是为成功复用" title="复用">复用该软件实体而需要提供给外界的所有信息,包括构件向外提供和请求的服务、构件的自描述信息和定制信息、构件的初始化、实例化和永久化方法以及构件对目标复用环境的依赖和构件组装信息等[4]。构件内容就是直接复用的软件实体,它可以具有源代码、二进制码、文档、分析设计模型和脚本等不同的物理形态,并遵从一定的格式标准。XML语言被用来作为构件的描述语言,将有利于基于Web的构件复用。Java语言作为跨平台的语言可用来实现构件内容。
3 基于构件的开发环境(Component-Based Development Environment)
    基于构件的开发的前提除了要有大量可供选择的构件外,还需要有相应的工具支撑。CBDE可帮助用户完成基于构件的开发过程,为构件的浏览、定制和组装提供统一平台,从而支持异构构件的集成和组装。
3.1 CBDE的功能需求
    CBDE的设计必须满足如下七种需求[2]:
。 必须遵循模块化设计的规则. CBDE环境能够将构件的私有部分和公开部分进行分离. 私有部分无法从构件外部访问,一般包括构件的实现和资源两部分. 公有部分包括构件的自描述信息,实例化机制,以及可选的公共接口定义. 语法描述的基本单元是接口, 接口描述是独立于构件, 根据接口描述开发商可以提供可互换的构件.
。 环境必须支持构件的自描述, 构件的元数据直接存储在构件内部. 外部描述易造成构件实现与描述数据的不一致性, 且不易构件的查询. 而内部自描述提供了自动生成描述文件的可能性; 减轻了对构件库的要求;而且将构件之间的依赖关系描述也封装在构件内部,利于构件实现的演化.
。 构件必须在一个全局的接口名字空间内定义和访问. 这样就能以全球唯一的方式命名构件接口,从而降低名字空间的语义匹配问题.
。 环境必须支持构件开发和应用组装两种开发过程. CBDE支持传统的构件开发,但又擅长于支持应用组装,构件开发集中在功能方面,应用组装着重于应用的商业逻辑. 应用组装是包含搜索,选择,配置构件三步的一个迭代过程.
。 必须支持多种视图,包括开发视图,组装视图,类型视图和实例视图. 前两者表示前述的面向构件的两种开发过程, 后两者表示组装视图的两种刻面. 
。 必须解决构件的维护问题. 引用重用可以解决构件的演化问题. 引用重用意味着在Internet上保存引用构件的单一主备份, 一般CBDE以缓存机制提供复制功能, 同时CBDE在使用构件的应用和存放该构件的库之间建立永久连接,这样构件能实现自动更新.
3.2 Java语言对CBDE的支持
   Java语言支持构件技术, 如SUN提出的构件模型有JavaBean和Enterprise Java Bean. 而且Java语言能很好的满足第2节中提出的需求[2].
。 Java语言支持在类级和包级的封装. 一个构件可以看成一个或多个类或者是一个包.
。 Java语言用接口实现比多重继承更强的功能。接口和类可以同等对待,接口把方法的定义和类的层次区分开来,通过它可以在运行时动态地定位所调用的方法,有利于代码的重用。
。 Java提供反射机制,能在运行时获取构件的型构描述. 因此自动生成构件的自描述信息成为可能.
。 Java接口使用一种世界通用的名字空间定义, 例如包的命名定义以反向的Internet域名开始。
。 Java支持动态链接和后绑定。
4 原型实现
    基于上述思想,我们利用Java语言设计了构件组装引擎的原型系统,系统的支撑运行环境如图1示。Java作为构件的实现语言,XML作为构件的描述语言,基于XML的体系结构描述语言作为模式语言。组装模式描述了构件间的连接方式,它被看作是与构件同等的实体。组装模式描述了角色之间的交互关系,一个构件能扮演一个或多个角色,一个角色也可被不同的构件实现。该系统的主要功能模块为:
1).用户需求的可视化表示到构件组装脚本语言的转换
a. 将用户需求、构件的使用场景以及构件交互关系用相应的文档表示格式记录下来。
b. 构件间的交互可以用消息序列图描述,传送的消息来自面向领域构件间交互原语字典。这样在描述构件和组装模式时能避免对API的直接调用,增加重用性。
2).构件组装语言编译器设计实现
    包括语法分析器,语义分析器和代码生成器。
    因为构件组装语言采用XML语法结构,语法分析器可以使用XML相关技术实现。语义分析器主要是针对消息序列图和组装语义定义实现。代码生成器完成构件组装语言到最终系统编程语言的实现,主要是原语与具体API的映射。体现了应用=构件+脚本的理念。

结论
    本文给出了构件模型的研究现状和存在问题,研究了基于构件的开发环境需满足的条件,并利用Java语言实现了构件组装引擎原型系统,可视化构件组装模型的设计已应用于数据表示引擎系统中。

参考文献
[1] Beugnard, A., Jézéquel, J.-M., Plouzeau, N., and Watkins, D. Making Components Contract Aware.
Computer 32, 7 (1999), 38-45.
[2] C. Lüer and D. Rosenblum, "WREN - An Environment for Component-Based Development", In Proceedings of the Joint 8th European Software Engineering Conference and 9th ACM Sigsoft International Symposium on the Foundations of Software Engineering (FSE-9), Vienna, 2001,
[3] Tracz, W., “Where Does Reuse Start?” Proc. Realities of Reuse Workshop, Syracuse University CASE Center, January 1990.
[4] 张波 基于XML的分布式软件体系结构研究 中科院博士学位论文 2001

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。