UML软件工程组织

让设计与分析重用-—基于构件开发的应用框架设计
(清华大学 谢晓芹 柳西玲)

框架必须是健壮的、可扩展的、灵活的,且支持动态内容,它要求基于开放或共享标准。框架的设计要力求做到:完备性、灵活性、可扩展性、可理解性,同时抽象能用于不同的场合;用户能轻松地添加和修改功能,定制框架;用户和框架的交互清晰,文档齐全。框架设计的一个核心问题就是发现可重用的设计和“热点”,以保证框架具备充分的灵活性,使用户能在已有构件的基础上生成应用程序,实现“零代码编写”的理想目标。

一、如何设计应用框架?

目前在框架设计方面成熟的技术较少,大体可分为两类:实践法与系统法。

1. 实践法

许多专家甚至认为框架不可能是系统设计的结果,而只是在从底向上设计中的一个结果。实践法也可以说是实例(Example)驱动的设计方法,它是从若干个具体的典型应用中,抽象出相似点来构建框架,框架反过来又应用于不同的问题,并在解决不同问题的过程中得到更新,在框架的设计和实现的两步中,不断反复。等到框架逐渐成熟时,需要修改和反复的内容就会越来越少。

具体步骤为:

分析问题领域,确定所需框架。从一类应用而不是单个的程序去分析、比较各种不同的软件解决方案,寻求这些方案的共性和每个程序的唯一性特征。这些共性,尤其是那些经常被多个程序使用的部分将成为框架的基础。然后定义框架体系结构并设计,包括设计用户与框架间的交互、给用户提供的最终工具等。

  • 框架的实现。包括框架核心类的实现、框架的测试、框架的试运行、框架的反复更新。
  • 框架的部署。包括文档的提供、分发过程,为用户提供技术支持,维护和更新框架。

这种方法也就是先在具体类基础上进行泛化,提取出抽象类。抽象化也是框架开发的一个关键。不过,根据这种方法设计出的框架的可适用性很大程度上依赖于其基于的具体应用。

由于框架的开发具有反复性,且需要深入了解应用领域,因此框架的开发很难按进度表进行。框架的设计者也需要和应用开发者紧密合作,因为框架只有在使用它开发应用的过程中才能发现其哪些部分有待改进。

2. 系统法

由于有人认为框架的设计也可以通过系统的方法得到,因此人们提出了逐步泛化的框架设计方法。此时框架的设计分两步:

第一步是问题的泛化。它要求解决如下问题:问题领域中的哪些概念可以表现为变量,并且需要统一处理?是否可以发现一些具体的概念,它们能被泛化为一个更抽象的概念?

第二步是框架的设计。在这一步中,泛化是从反向考虑,以实现每一级的框架。换言之,最先实现最通用的框架,然后实现次通用的框架,以此类推。如图1所示, 其中,框架0就是最终要实现的框架。

这一步需要解决如下问题:系统的哪一部分可能需要改变?用户需要在什么地方向框架中加入自己的代码?

采用两步的设计方法可以避免在早期的开发过程中局限于应用专用的类和体系结构,并且有利于使用通用的设计模式。

框架的设计是一个反复的过程,在这个过程中需要领域和设计两方面的专家意见,框架用户和框架开发者之间的交流对框架的设计也很重要,因为框架是在不断反复的过程中逐步成熟的。

3. 框架设计与应用设计

框架的设计和应用的设计到底有何不同?一般而言,两者的侧重点不同。设计应用系统时,要求对专用领域的重要概念有深入的了解。这些概念通过建模演变成类,并作为实现整个应用的构建块。而设计框架时,重点在识别出必须具备灵活性的地方,也就是“热点”,这也是框架的关键所在。

构件库系统基于框架而不是具体的类,使得构件库系统的使用更具灵活性。但在框架基础上构建具体的应用时, 类的使用和开发总是随之而来,在框架上生成应用可以通过创建子类、配置各构件对象、调整实例等来获得。

4. 框架文档

文档必须包括如下内容:框架的目的,如何使用框架,框架的设计细节等。

二、框架采用哪些支持工具?

一般而言,没有支持工具的框架很难被使用。任何一个框架的提出总是配有一系列工具软件,这样基于框架的应用开发才切实可行。这些工具允许用户与应用框架交互、配置和构筑新的应用。下列工具通常被使用:

  • 浏览工具 用户可以利用它浏览框架的类层次结构等信息。
  • 编辑工具 用户用来调整和修改框架元素的属性等,如修改类或构件等。
  • 帮助系统 为用户使用本框架系统提供向导功能,如可以采用HTML格式。
  • 测试系统 用来测试生成的应用系统,通常支持仿真操作。
  • 文档工具 帮助创建应用系统的文档,如Javadoc工具。理解并学会使用框架是一件费时的工作,这也是框架设计方法的唯一不足之处,因此要求框架的文档必须齐备。
  • 配置管理工具 使用框架而不是具体的对象虽然提供了复用性,但它同时也带来了开发上的复杂性。框架内包含各种构件或构件库,一个框架可能需要和其他框架通信。一个框架也可能由其他子框架系统组成,这样一种组成结构必然提出配置管理的问题。例如,如何在多个框架内共享构件?如何由构件或子框架组装新框架?框架内的构件如何通信与协作?不同的框架间如何交互?

使用这些高级工具的最终目的就是减少编码和记忆的工作量,简化用户的操作。理想情况下,用户可以不用编一句代码而实现新系统的构建。例如,在一可视化界面上,通过选取一些图标就能生成可执行程序。目前已有一些类似的工具,如University of Geneva开发的Vista系统。

三、都有哪些著名的框架系统?

目前有许多框架系统,例如用户界面方面的框架有MVC、ET++等,其中ET++采用C++语言实现,运行于Unix等系统中;针对其他领域的则有FOIBLE、MacApp、FACE (Framework Adaptive Composition Environment)等。

早期一些框架系统多采用传统的面向过程语言实现,现在面向对象语言为软件和设计的重用提供了更强有力的支持。由于框架开发的学习曲线较复杂,因此框架开发的语言最好能对框架的文档建立提供有效的方法;框架的使用要求开发语言具备高可移植性;框架的设计其实也是一些高层的决策,很自然采用高级语言来实现。Java语言由于具有平台独立性以及轻量级的链接过程、自动垃圾回收、简单语言结构、标准软件包、面向对象等特性,因此可以说Java是进行框架构筑的合适语言。现在市场上已出现了许多采用Java语言编写的框架系统。

LEC India Software Centre Pvt. Ltd.公司研制了一个面向EJB 构件的应用框架系统。它主要面向基于EJB的应用程序,是一个服务器端的框架,能在EJB构件的开发中解决稳定性以及其他一些企业级的特性等问题。

现在又出现了许多采用J2EE编程环境的应用框架,如Pacific技术服务公司开发的一套多层框架,能用来开发Web应用服务器;Jcorporate公司开发的Expresso Framework是一使用java来建造分布式、重用、基于构件的安全的Web应用程序的应用框架。

四、 如何设计知识工程应用框架?

在知识爆炸的时代,如何从数据中提取信息,从信息中提取知识已成为一个重要的应用领域。越来越多的知识处理应用系统急待开发,若能有一个成熟可靠的知识处理框架系统,将大大加快此类应用系统的开发。针对这种情况,清华大学知识工程研究室结合自己的经验,目前提出了在知识工程应用领域的框架,主要针对网络计算模式下的知识获取、传输、管理和应用,基于Web的数据挖掘与知识发现等内容,所有的代码均采用Java实现。

将应用框架结构化为框架的框架,划分为如下三个子框架:

(1) 领域专用构件框架:提供领域专用的构件模型集合,并为分层的构件模型提供统一接口。

(2) 可视化组装框架:提供整个框架系统的图形化界面,并为可视化组装和操作构件提供工具。

(3) 连接框架:为构件间的交互、通信提供机制。

框架内各构件的分布如图2所示。

建立的基于框架的构件系统具有如下性能:

  • 实现面向产品化、实用性的构件库系统,并具开放性、可扩展性;
  • 支持异构环境中的框架、构件的互联和通信;
  • 实现新旧系统的兼容性;
  • 提供一致的接口分配;
  • 遵循重要构件标准(如CORBA);
  • 构件具有透明本地化、平台无关性特点;
  • 系统的配置、数据交换基于XML和Java的标准化格式;
  • 支持个性化信息服务定制和可重构。
  • 良好的用户学习曲线。

框架的设计本身也是一个循环迭代的过程,它在不断应用于实践的过程中,得到更新和提高。我们也在不断的完善这套系统。目前一些公用构件如电子表单自动生成系统、数据提取和文件转换系统等作为大粒度构件已得到广泛使用。

框架能使应用程序的开发简单,价格低廉,但是开发框架不是一件容易的事。它是一个需要领域和设计经验的反复过程。为了保证框架的灵活性,必须提取和发现热点。设计模式可以简化这个过程,因为它提供了对过去经验的抽象。应用框架能高度抽象同一领域内的问题,进而降低开发难度和强度。虽然框架和构件技术已经出现许多年了,开始走入实用,但还不成熟,有大量问题有待研究。

 


版权所有:UML软件工程组织