UML软件工程组织

利用Rational XDE中模式的能力来促进软件的重用
王辉 (huiwang_290@hotmail.com)

软件的重用一直以来都是软件开发追求的重要目标之一。软件的重用可以缩短软件开放周期,提高软件质量。可重用的软件组件、设计、代码是软件开发企业最重要的资产。但是软件的重用受到很多因素的影响,比如软件设计的质量,项目的交付时间,以及软件开发过程各阶段工作产品的管理及规范都在某种程度上制约了软件的重用。软件的重用可以分为多个层次:代码级重用,组件级重用,设计的重用,软件架构的重用以及解决方案的重用。对于开发人员来说更加关心代码级重用,组件级重用,设计的重用和软件架构的重用。Rational XDE提供了通过支持模型和代码模板来达到软件重用目的的机制,可以实现各个层次的软件重用。本文是将向大家介绍如何在XDE 中创建自己的模式,并利用XDE的代码模板和模式的结合更加促进软件的重用。

在本文的前一篇文章 "在XDE中应用模式"中我们已经了解了如何在XDE中应用一个创建好的模式。如果你只是应用模式的开发人员,这已经足够了。但如果你是一名模式的设计人员,本文的内容对你来说是非常重要的。作为一个模式的设计人员,你必须对在创建模式过程中的每一个概念有透彻的理解。接下来我们对XDE中有关模式的概念做一个介绍。

Rational XDE中有关模式的概念

在学习使用Rational XDE来创建模式之前我们需要对Rational XDE中涉及到的模式的概念有所了解,这样在学习使用模式的过程中,大家会有更清晰的思路。

Rational XDE对模式的支持

Rational XDE对模式的支持体现在几个方面:模式的创建(定制模式)、模式的应用(使用模式)、对已有模式的支持和RAS模式支持。

  1. 模式的创建:在Rational XDE中,我们可以创建属于自己的模式,模式中可以包含模式的用UML表示的模式设计模型以及可以参数化的模板参数,还可以包含支持代码生成的代码模板。在Rational XDE 中提供了专门的工具和视图帮助模式的开发人员完成模式的创建工作。在创建模式时,模式开发人员可以为模式添加完善的文档,以指导模式的使用者选择和应用模式,同时Rational XDE 提供了应用模式向导的机制来指导模式用户对模式的使用。模式开发人员可以定制特定模式的使用向导,通过提示对话框一步一步的指导模式的使用。
  2. 模式的应用: 如果你只是模式的使用者,你可以利用Rational XDE非常方便的应用已有的模式,结合Rational XDE的代码和模型同步的特性可以大大的提高软件开发的效率和提高软件的质量和可靠性。
  3. 对已有模式的支持:在Rational XDE中包含了对业界最著名的模式的支持,例如"四人帮"模式、J2EE核心模式等。在RDN(Rational 开发者网络)上,有一个专门为交换模式资产的区域,我们可以从这个区域免费的下载可用的模式。
  4. RAS(可重用资产规范)支持:在XDE中模式可以按照RAS的标准来组织和归档,RAS是对软件开发过程中可重用资产进行组织的业界标准。模式以RAS标准组织意味着模式可以更好的被软件组织重用。

模式模板(pattern template)

模式模板是XDE中模式的核心部分,几乎所有的模式元素都定义在模式模板当中,其中包括模式的设计模型和参数。我们可以通过Model Explore来浏览和编辑它。模式模板用资产<<Asset>>原型来表示,如图1所示。从图1中我们可以看到名为RASPackage1的模式模板,其中包含模式的设计模型以及模型中类的定义。


图1: 模式模板

模板参数(template parameter)

模式的设计人员必须为模式模板设置模板参数,哪怕模式模板本身不需要参数,这个模板参数也是必须的。你可以为模板参数设定缺省的值,或者在模式的应用时为模板参数赋值。

根上下文(Root Context)

根上下文是模式的一个属性,用它来指明模式模板的一个模式内容被应用的范围,这个范围可以是模式模板内容体的整体,也可以是模式模板内容体中的一个包或者一个类。通过这个设置我们可以实现相同的模型的不同部分可以被不同的模式使用。

绑定和绑定点(binding and binding location)

绑定是模式中的参数被赋予具体的参数值的过程,这个参数值可以是用户指定的一个模型元素,也可以是用缺省值自动创建的元素。当一个模式被应用之后,在指定的绑定点中就有一个绑定对象被创建,它被用来维护这个模式的模板参数和具体的参数值之间的绑定关系。你可以直接在绑定对象中修改被绑定的参数值。在缺省的情况下,绑定点和扩展点是同一位置。

扩展点(expansion location)

扩展点是在使用模式时,模式实现文件存放的地方。你必须要为模式的应用设置它。

模式与模式资产

模式的基本组件是参数化协作,你可以把一个参数化协作看作为一个模式。模式资产是具有RAS资产结构的模式,它是RAS资产的一种。因此不是所有的模式(参数化协作)都是模式资产,但模式可以被转换成为模式资产。说到这里你可能有点困惑,模式和模式资产到底有什么区别呢?为了解释模式和模式资产的区别,我们首先应该对RAS(可重用资产规范)有所了解。

Reusable Asset Specification (RAS) 提供了一种标准的方法用于打包和释放一系列相关的文件。这些文件或工作产物的集合被称为asset(资产)。RAS资产简化了与其他用户共享过程的解决方案,因为大家使用了方便一致的方法来组织,文档化,共享,存储和恢复软件的资产。RAS资产在尺寸,复杂性和目的上可以是千差万别的。RAS资产的范围是资产的制造者根据客户的需要制定的。我们来看一个RAS资产的例子,一个资产包含一系列的引用文件,这些文件可以包含源程序的代码片断,文档等。资产也可以被设置为网络资源定位。另一个使用RAS资产的例子是创建一些存贮了设计模式和代码模板的资产。这些RAS资产包含通用的代码结构和模型。应用他们可以快速的产生设计和代码。更加复杂的RAS资产能够被设计包含用于创建子系统的软件架构,以适应系统需求变化的需要,这样的一个RAS资产可以作为整个应用的基础。

XDE资产由可以被重用的模型和模型元素组成。资产包括各种类型的引用文件:代码模板、外部代码文件、模式模型、定制的模式图标、电子表格、文字处理文件、脚本和html页面。基本上所有可以被模型引用的文件都可以包含在模式资产当中。模式资产是RAS标准兼容的,它具有以下特征:

  • 拥有模式(参数化协作)的模型和包被设置为原型<<Asset>>
  • 为文档化的目的产生一个RAS标准的XML文件
  • 为模式分配一个根上下文(Root Context),它可以包含一些非参数化的元素或者嵌套的模式
  • 可以使用Apply Pattern Wizard来应用模式
  • 可以作为RAS类型文件导入和导出所有相关的文件

现在大家应该明白模式和模式资产的区别了吧,模式和模式资产的核心内容是一样的,都可以被重用。但模式资产具有RAS标准兼容的结构,可以使模式更方便的在开发团队或者组织之间进行交换,可以以标准的格式方便的导入和导出,而且可以在资产库中方便的检索和查询。因此当我们创建模式时,首选的方式是创建模式资产。

创建模式

在我们开始在XDE中创建模式资产之前我们应该对将要创建的模式中的元素和结构有一个清晰的思路。一个模式是一个解决某种问题的方案,但这个方案的具体实现可以是根据不同的需要而不同。你可以只是根据你的开发项目来实现这个模式,或者你希望将这个模式实现成为可以通用的。为了能够更加好的让大家理解如何在XDE中创建模式资产,我们选择通过实现一个"四人帮"的Proxy模式作为例子。这个模式已经在XDE中缺省的被安装了,我们将按照它的实现来展示创建模式资产的整个过程。

首先我们先来简要的介绍一下Proxy的作用和Proxy模式中包含哪些内容。Proxy模式的作用是在客户和处理程序之间加一个中间层,当客户发出处理请求时,请求先发给Proxy对象,再由Proxy对象将客户请求转发给真正的处理程序,最后由处理程序处理客户的请求。Proxy模式的好处在于客户程序可以拥有对处理程序的稳定接口,也就是说,无论处理程序发生了什么变化,客户程序对处理程序的调用都不需要有任何变化。同时也可以实现通过相同的调用方式对客户的不同请求调用不同的处理程序。客户程序与处理程序是独立分开的,他们通过Proxy对象连接在一起。下面我们来看一下Proxy模式中有哪些元素组成,以及他们之间的关系。在Proxy模式中应该有三个角色:客户、代理(Proxy)和处理程序。

他们之间的调用关系可以用UML的时序图表示,见图2


图2:Proxy模式的时序图

图中aClent代表客户程序,aProxy代表代理对象,theRealSubject代表处理程序。客户程序首先生成一个代理对象aProxy,代理对象创建处理程序对象,然后客户调用代理对象aProxy的request方法,代理对象将调用请求转发给theRealSubject对象的request方法完成真正的处理。我们在对这个模式进行建模或者设计时,应该考虑如何对这些实体对象进行抽象,也就是创建哪些类或者接口来代表这些实体。这是一个分析的过程,这里我们不对这个过程进行详细的讲解。根据XDE中欲安装的Proxy模式的实现可以知道Proxy模式拥有一个接口和两个类,见图3


图3: 模式Prxoy的类图

接口Subject抽象出了客户感兴趣的方法,类Proxy是代理对象的抽象,它负责创建处理对象和转发客户请求到处理对象,这个类实现了Subject接口,类RealSubject抽象了处理对象,它同样实现了接口Subject。类Proxy包含类型为RealSubject的成员,因此类Proxy与类RealSubject的关系是关联关系。而类Proxy和类RealSubject分别与接口Subject之间是实现关系。为了使Proxy模式的实现更加通用,我们需要为这个模式设置参数,参数的目的是在应用这个模式时,通过对参数赋值来生成用户希望得到的具体类、属性和方法的实现。在这个模式中,我们将设定四个参数分别代表接口Subject、类Proxy、类RealSubject以及操作request。在这模式中我们还要建立模式的类图和时序图以描述类之间的静态和动态的关系。在清楚了要为模式资产创建哪些元素和结构之后我们开始创建Proxy模式资产。

我们将按照以下的步骤对创建模式的整个过程进行详细的介绍:

步骤1:创建一个存放模式资产的模型
步骤2:添加新的模式资产到模型
步骤3:定义模板参数
步骤4:定义缺省的模板参数值
步骤5:创建模式的静态和动态图
步骤6:为模式中的方法添加代码模板

到现在为止我们已经完成了创Proxy建模式资产的所有步骤,现在我们可以应用我们创建的Proxy模式来生成程序的设计和框架代码了。应用模式的过程请参考《利用Rational XDE中模式能力来促进软件的重用-在XDE中应用模式》。

本文对在XDE中创建模式资产的基本步骤作了详细的讲解,如果你希望了解在XDE中创建模式资产的更详细的信息,请参XDE 的帮助系统中的Rational XDE 资源部分。

参考资源

Rational XDE介绍 http://www.ibm.com/developerWorks/cn/java/l-xde/

利用Rational XDE中模式的能力来促进软件的重用-在XDE中应用模式 http://www.ibm.com/developerWorks/cn/java/l-xde-pattern1/

Rational 开发者网络http://www.rational.net/

developerWorks Rational产品园地 http://www.ibm.com/developerworks/rational

developerWorks中国网站 Java 专区 http://www.ibm.com/developerworks/cn/java

关于作者

具有多年的Java开发经验,对OOAD,UML,Rational产品颇感兴趣. 你可以通过 huiwang_290@hotmail.com联系他.

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