UML软件工程组织
|
利用Rational XDE中模式的能力来促进软件的重用--在XDE中应用模式 |
来源:IBM 王辉 (huiwang_290@hotmail.com) |
2004 年 1 月
软件的重用一直以来都是软件开发追求的重要目标之一。软件的重用可以缩短软件开放周期,提高软件质量。可重用的软件组件、设计、代码是软件开发企业最重要的资产。但是软件的重用受到很多因素的影响,比如软件设计的质量,项目的交付时间,以及软件开发过程各阶段工作产品的管理及规范都在某种程度上制约了软件的重用。软件的重用可以分为多个层次:代码级重用,组件级重用,设计的重用,软件架构的重用以及解决方案的重用。对于开发人员来说更加关心代码级重用,组件级重用,设计的重用和软件架构的重用。Rational XDE提供了通过支持模型和代码模板来达到软件重用目的的机制,可以实现各个层次的软件重用。本文是将向大家介绍如何在XDE 中应用已经创建好的模式来促进软件的重用。 使用模式的好处 1. 模式可以被很好的共享 2. 模式通过已经定义好的解决方案来解决问题 3. 模式可以被广泛的应用 4. 模式可以很好的提升软件的重用性 Rational XDE中有关模式的概念 Rational XDE对模式的支持
模式模板(pattern template) 图1: 模式模板 模板参数(template parameter) 根上下文(Root Context) 绑定和绑定点(binding and binding location) 扩展点(expansion location) 模式的应用 步骤1:选择模式、学习模式使用方法 图2:组织模式对话框 如图2所示,你可以添加你需要的模式到XDE中,这样你就可以在你的应用开发中使用其他人开发的模式。但要注意的是在XDE中,模式是按照RAS资产的形式被组织的,模式被存放在RAS的资产库中,资产库的文件形式是ras为扩展明的,比如你可以在XDE的按章目录下的addinsPatternscontentGoFJavav2.5目录下找到名为GoF.ras的文件,这个文件中存放了四人帮的模式。也就是说其他人创建的你希望使用的模式也必须符合RAS标准才可以在XDE中使用。你可以访问 Rational 开发者网络(RDN)中的 模式交换区域,,这里有很多已经被开发的模式可以用来加速你的软件开发过程。 现在我们来了解一下Facade模式的内容。我们来看一下Facade模式的文档,为了查看模式的文档我们首先需要在模式浏览器(Pattern Explore)中打开模式,可以通过菜单Tool > Patterns > Open Favorites Libray > GoF Pattern Libray for Java V2.5来打开整个四人帮模式库,这时你将在模式浏览器中看到四人帮中的所有模式,如图3。 图3: 模式浏览器 用鼠标选中Facade模式,然后在窗口菜单中选择显示视图 > Pattern Documentation,你将会看到模式文档视图,如图4。 图4: 模式文档视图 模式的文档为你提供了模式的应用环境、能够解决的问题以及在XDE中应用模式的方法。下面我们来看一下模式文档中的各个部分。 Short Description: 简要的对模式进行描述。 Version: 模式的版本 Last Modified Date: 模式的修改时间 上面的部分是模式的基本信息,下面是模式文档的主题部分。 Participants: 参与者代表了模式模板的参数,它描述了这个模式中的每一个模式模板参数的在模式中的作用、数量关系、类型、参数值的来源、缺省值和代码模板的使用。 在Facade模式中有三个参与者:Facade、SubsystemInterface和operation。 Facade参与者知道哪一个子系统负责处理用户的请求,并将请求转发给适当的子系统对象。它的类型是Class,它的参数值的来源可以是用户提供的已存在的类,也可以有XDE为你新创建一个类。这个参与者被设定了缺省值Facade,这意味着如果你不为它设定参数值,它将使用Facade作为参数值使用。 SubsystemInterface参与者实现了子系统的功能,它处理被Facade转发过来的用户请求。它的类型是Class,参数值的来源是用户提供已存在的处理类。用户需要在应用Facade模式之前构建好这个子系统类。 Operation参与者是子系统处理用户请求的操作或者可以说是函数。它的类型是操作(operation),参数值的来由可以是用户提供或者来自于集合。 下面我们通过模式的类图和时序图来了解模式中参与者之间的关系。 图5:Facade模式的类图 在这个类图中我们可以看到参与者Facade和SubsystemInterface之间的关系。请注意在这个图中你可以发现有<%=Facade%>的表达式,这里Facade代表了模式模板的一个参数,在应用模式时通过为这个参数赋值可得到相应的类名,比如你可以将FacadeTest赋给它,这样产成的Facade类的名字就是FacadeTest,而其他引用了Facade参数的地方的值也是FacadeTest。当你应用了这个模式后,这个类图也会出现在你的模型中,与这个图不同的是参数部分已经被赋值了。 图6:Facade模式的时序图 图6是Facade的时序图,它描述了模式中各个对象的交互关系。在应用了这个模式后,这个时序图也会在你的模型中出现,与这个图不同的是参数部分已经被赋值了。 Classification部分描述了作为RAS资产模式的信息。 Author : 模式的作者,可用来对模式进行检索 Packager: 模式的包装者 Keyword : 用于检索的关键词 Problem Solved : 模式解决的问题 Benefit : 使用这个模式的好处 Usage 部分描述了应用这个模式的步骤和活动 现在我们已经对Facade模式中的参与者以及他们之间的关系和模式能够解决的问题有了一定的了解,接下来让我们开发使用这个模式。 步骤2:应用模式 首先我们需要创建一个Java建模项目,在这个项目中应用Facade模式。通过以下步骤来创建Java 建模项目: 文件 > 新建 > 项目 弹出新建项目对话框见图7 图7: 创建Java建模项目 在新建项目对话框的右边的浏览栏中选择Modeling,然后在新建项目对话框的右边的浏览栏中选择Java Modeling Project。 点击下一步,在项目名的文本框中输入FacadeTest。点击完成。XDE将为你创建Java建模项目,如图8。 图8:Java 建模项目 在Model Explore视图中,你可以看到刚创建好的项目Java Code Model,在XDE的右边是我们刚才打开的模式浏览器(Pattern Explore),一会我们将在这里开始应用Facade模式。现在我们的任务是创建一个代表子系统的类,这是Facade模式的SubsystemInterface参与者的要求。我们简单的创建一个名为SubSystem的类。步骤如下: 在模型浏览器(Model Explorer)鼠标右键点击Java Code Model,选择 Add UML > Class,命名为SubSystem。 然后为类SubSystem添加一个操作名为test()。这个操作将成为Facade 模式operation模式模板参数的值。步骤如下: 鼠标右键点击类SubsystemInterface,选择 Add UML > Operation,命名为test。 接下来开始应用模式Facade,步骤如下: 在模式浏览器(Pattern Exlpore)中鼠标右键点击Facade模式,选择 Apply this pattern。应用模式向导样式选择器对话框弹出,如图9 图9: 应用模式 选择Apply Pattern Dialog,应用Facade模式对话框弹出如图10。 图10:应用Facade模式对话框 这个对话框分为几个部分,最上面是模式描述部分,它简要的说明了Facade模式的用途。接下来的部分是模式模板参数信息部分,这是我们应用模式的核心部分,在这里我们需要为模式模板的参数赋值。在Facade模式中我们需要为四个参数进行赋值。 Facade参数:类型为Class因此我们需要为他设定一个类,在Facade参数的值域中我们可以看到已经有 了一个Facade的值,这是Facade模式的缺省值,如果你不希望用这个缺省值,可以通过鼠标双击值域弹出如图11的对话框。 图11:Facade的选择参数值对话框 你可以重新设定Facade参数的值,这里我们用缺省的值Facade。 接下来为SubSystemClass参数赋值,这个参数的类型为Class,我们要为它指定一个类,这个参数没有缺省值,因此我们必须为它分配一个。双击SubSystemClass参数的值域,弹出SubSystemClass参数的选择参数值对话框如图12 图12: SubSystemClass的选择参数值对话框 在对话框的左边浏览栏中选择我们之前创建好的SubSystem类,点击Select按钮,这样我们就为SubSystemClass设定了值。SubSystemClass将有SubSystem类来代替。 接下来为参数operation赋值,operation的参数类型为操作,因此我们要为它设定一个操作值。如图13 图13: operation的选择参数值对话框 在对话框的上方可以看到两个选项:User和Collection. 选择User意味着需要我们设定一个操作作为参数值,Collection表示可以选择多个操作的集合作为参数值。这里我们选择User选项,并在对话框的左边的浏览兰中找到之前我们创建好的SubSystem类的test() 操作作为参数值。 接下来为SubSystem参数赋值,它的类型为包, 并且有缺省的值SubSystem,这个参数的作用是将生成模式中的元素是存放的包。我们使用缺省值SubSystem,在生成模式元素时,你将会看到一个名为SubSystem的包被生成,在这个包之下是模式的模型元素。 我们已经为Facade模式的四个参数赋了值,接下来的事情是设定扩展点和绑定点。前面我们已经介绍过了扩展点和绑定点的概念,扩展点是生成模型的模型元素的存放地点,绑定点是指绑定对象的存放地点, 这里我们都选择Java Code Model包。这样我们就已经为Facade模式设定好了所有的参数值,如图14 图14:为Facade模式的参数赋值 下面点击Apply按钮完成模式的应用,XDE将根据我们设定的参数值为我们产生模式的模型元素。我们已经成功的完成了应用Facade模式的步骤,下面我们来看看应用模式为我们生成了哪些模型元素。首先我们来看一下模型浏览器中的内容,见图15 图15:应用模式Facade生成的模型元素 首先我们可以看到在Java Code Model下有一个叫做Subsystem的包,这是根据Facade模式的Subsystem参数值创建的。在这个包下可以看到两个类的模型Facade和SubSystem,他们的名字也是根据前面我们设定的参数值制定的。与包Subsystem平行有一个名为 Facade Participants的类图如图15 图16:应用 Facade模式生成的类图 和在模式Facade中的类图相比可以发现,他们的区别只在于Facade模式模板的参数被我们所设定的参数代替了。 与Facade Participants的类图平行的还有一个名为AccessSubystem的协作的实例,见图16 图17 在模型浏览器中可以看到AccessSubystem协作实例中包含了几个对象(aClient、aFacade和aSybsystemClass),还有一个交互实例,交互实例描述了系统中某些对象间的交互过程,典型的使用时序图来表示。双击时序图AccessSubsystem你可以看到Facade模式产生的时序图,见图17 图18:Facade模式生成的时序图 在图中你可以发现与Facade模式中的时序图的区别就在于模式模板的参数被我们赋的值代替了。 到此为止我们已经完整的经历了一次应用模式的过程。在XDE中应用模式可以为你创建模式实现的框架,在生成的框架的基础上进一步的细化来完成模式的实现。 Rational XDE介绍 http://www.ibm.com/developerWorks/cn/java/l-xde/ 利用Rational XDE中模式的能力来促进软件的重用-在XDE中创建模式 http://www.ibm.com/developerWorks/cn/java/l-xde-pattern2/ Rational 开发者网络http://www.rational.net/ developerWorks Rational产品园地 http://www.ibm.com/developerworks/rational developerWorks中国网站 Java 专区 http://www.ibm.com/developerworks/cn/java
|
版权所有:UML软件工程组织 |