使用 Rational Software Architect 进行模型驱动和基于模式的开发,第 2 部分: IBM Rational Software Architect 中的模型驱动开发工具支持

Rational Software Architect 为使用模式的模型驱动开发(model-driven development,MDD)提供完整的工具支持。Rational Software Architect 基于资产的开发框架通过支持模型、模式和转换的复用来补充 MDD。本文中一个简单的情景向您概述了如何在 MDD 中使用 Rational Software Architect。

Colin Yu, 开发经理, EMC

Colin YuColin Yu 是可复用资产存储库(支持 Rational Software Development 平台上的基于资产的开发)的开发经理。他以前所干的工作包括随需应变的软件开发(他的工作类似于 WebSphere Business Integration 平台的解决方案架构师)和 WebSphere Studio 开发。您可以通过 coliny@ca.ibm.com 联系到 Colin。



2007 年 5 月 09 日

如本系列第 1 部分中所提到的,要使用模型驱动及基于模式的开发方法,您需要支持以下内容的集成开发环境(integrated development environment,IDE):

  • 利用统一建模语言(Unified Modeling Langugage,UML)建模
  • 模式基础架构
  • 模型转换及代码生成
  • 具体到平台的设计和开发工具
  • 单元测试环境

IBM® Rational® Software Architect 不但提供支持端到端的模型驱动开发(model-driven development,MDD)的这些功能,而且还提供支持基于资产开发的增值功能,通过支持模型、模式和转换的复用为 MDD 进行补充(参见图 1)。

图 1. 集成开发环境
图 1. 集成开发环境图

本文,也就是系列的第 2 部分,强调了与模型驱动开发、模式和基于资产的开发相关的 IBM Rational Software Architect 的重要工具支持。一个简单的场景将指导您了解那些特性,并且为第 3 部分中的案例研究做准备。

利用 UML 建模

模型已经成为软件设计的主要工件,因此从相应的程序代码上转移走了相当多的注意力。因而,模型不仅令您获取并传达应用程序架构的所有方面,而且还作为各种自动和半自动过程导出程序和相关模型的源头。所以,您可以将模型用作以下目的:

  • 可视化地表示您想要构建的系统
  • 促进对系统的一般了解
  • 开发、验证,并传达系统的架构
  • 生成代码

Rational Software Architect 集成了强大的 UML 软件建模框架,并且完全支持 UML 2.0(UML 标准的第一个重要的修订版)建模。这意味着它能够更好地支持 MDD 工具及方法,可以帮助您获取并传达设计的意图。

在 UML 建模中,模型包含许多元素,例如角色、用例、类和包,以及一个或多个表示系统具体角度的图,例如活动图或类图。


Rational Software Architect Modeling 透视图

Rational Software Architect 提供了一个组合以下相关视图的建模透视图。

Model Explorer

Model Explorer(图 2)展示了可能包含许多模型的建模项目。模型(本身就是模型元素)包含相应的模型元素,例如包、类、参数、方法和约束。在 Model Explorer 中,您可以添加、删除、分类,并组织元素,您还可以在图编辑器中打开 UML 图。

图 2. Model Explorer 视图
图 2. 展示 Model Explorer 视图的抓图

Diagram Navigator

Diagram Navigator 是工作区中不同的项目视图。它在目录(树型)视图中显示建模项目、UML 模型,及其 UML 图,如 图 3所示。

图 3. Diagram Navigator 视图
图 3. Diagram Navigator 视图的抓屏

UML 图帮助您可视化并控制模型中的元素。不同的图表示您正在开发的系统、应用程序,或数据库的不同视图。因为图可以说明模型的多个方面,所以同样的模型元素可以出现在一个或多个图中。

UML 利用许多涉众公认的标准标记,提供让用户获取并传达应用程序架构所有方面的各种图。这些是 13 个正式的 UML 2.0 图,每一个都表示系统的不同方面:

  • 活动图:活动图提供对系统行为的视图,它描述了过程中的活动序列。除了展示活动中动作之间的流,类似流程图,活动图还可以展示并行或并发的流,及交替的流。
  • 类图:您可以使用类图来对组成系统的对象建模,展示对象之间的关系,以及描述那些对象要做什么,及它们要提供什么服务。类图对对象建模过程是很重要的,并且在分析和设计阶段是有用的。
  • 通信图:原来在 UML 1 中称为协作图,通信图展示了对象之间的消息流,并且展示了若干对象如何一起合作实现共同目标。类似于序列图,通信图也对用例的动态行为建模。然而,通信图更看重对象的协作,而不是时间序列。
  • 组件图:组件图展示了系统组件之间的结构关系。在 UML 2 中,组件是系统或子系统中自治,封装的单元,它提供一个或多个接口。因此,组件图能够让架构师来验证,组件在实现系统的所需功能。
  • 复合结构图:复合结构图探索了在通信链路上协作的连通实例的运行时实例。
  • 部署图:部署图描述了处理节点的运行时配置,以及运行于那些节点(系统的硬件、安装在硬件之上的软件,以及连接不同机器的中间件)之上的组件的静态视图。
  • 交互总览图:交互总览图是活动图的变体,它当中的节点表示交互图。交互图包含序列、通信、交互总览,及时序图。
  • 对象图:使用对象图来探究对象的真实世界的实例,以及它们之间的关系。对象图类似于类图,因为关系的标记是一样的。要解释对象之间复杂的关系,对象图是很好的选择。
  • 包图:包图可以让您将模型元素组织为用文件夹表示的组,这使 UML 图更容易理解。
  • 序列图:序列图说明了交互中对象之间消息的时间序列。它包含参与者小组,例如角色、系统或子系统、类,和用生命线表示的组件,以及交互过程中交换的消息。
  • 状态机图:状态机图描述了对象所处的各种状态,以及那些状态之间的变迁。
  • 时间图:时间图探究了具体的时期中一个或多个对象的行为。
  • 用例图:使用用例图来可视化(或例举)用例和角色之间的关系,以及用例和其他用例之间的关系。

Diagram Editor

您可以由 Diagram Navigator 或 Model Explorer 视图在 Diagram Editor 中打开 UML 图(图 4)。您可以同时选择打开多个图,然后使用选项卡在打开的图之间切换。

UML 图包含许多图元素。图元素,也称为图形,是表示 UML 元素(例如类、接口,和关系),或者没有 UML 语义的几何形状(例如椭圆形、菱形和矩形)的图形或文本元素。在 Diagram Editor 中,您可以从 Model Explorer 中将现有的模型元素拖拽到图中,或者您可以使用选项板来创建新的图元素。(如果图元素表示 UML 元素,那么其相应的 UML 元素将被添加到模型中。)

图 4. Diagram Editor 视图
图 4. 显示 Diagram Editor 视图的抓屏

属性(Properties)

如果您选择 UML 图中的图元素,您可以在 Properties 视图中看到并设置该图元素的属性(图 5)。属性是控制 UML 图中图形和连接件的特征的值。例如,每个图形和连接件都有一个线条颜色属性,您可以通过它指定图形的边或者连接件的线的颜色。您还可以指定属性值,从而改变连接件的线条样式,以及显示或隐藏间隔或间隔标题。

如果您在 Model Explorer 中选择模型元素,那么您可以看到并设置模型元素的属性,例如名称和可视性、模型的概要文件,和类的属性及方法。

图 5. Properties 视图
图 5. 显示 Properties 视图的抓屏

模型模板

Rational Software Architect 包含用例、分析和设计模型的模板。每一个都针对不同的开发阶段:需求、分析和设计。

Rational Software Architect 不为表示实现的物理组成的实现模型提供模板,包括实现子系统和实现元素(源代码、数据和可执行文件)。不包含实现模板的原因是 Rational Software Architect 的操作理论是:通过设计使用平台无关的模型,然后通过各种不同的转换,让 Rational Software Architect 把这些设计转换为代码或实现级工件。

用例模型

用例模型提供有关您正在开发的系统或应用程序的行为的详细信息。它根据为实现目标或解决用户所确定的问题而必须存在的功能,确定出系统的需求(用例),并且指定周围环境(角色)和用例与角色之间的关系(用例图)。用例模型还包括描述用户与系统如何交互的用例图和活动图。

分析模型

分析模型描述了您正在建模的系统或应用程序的结构。它包括了描述用例模型中所确定的功能需求的逻辑实现的类和序列图。

分析模型确定出系统中的主要类,并且包含一组描述系统如何构建的用例实现。类图通过利用原型对系统的功能部分建模对系统的静态结构进行描述。序列图通过描述用例中事件执行时的流对用例进行实现。这些用例实现对系统的一些部分如何在具体用例环境中交互进行建模。

分析模型描述了系统的逻辑结构,因而它是设计模型的基础。

设计模型

设计模型是基于分析模型的,它向系统的实际实现中添加了详细信息。设计模型通过使用各种图(包括序列图、状态机图、组件图和部署图),详细地描述了应用程序是如何构成,以及如何实现的。它还描述了程序设计构想及技术,例如那些用于持久性、分布、安全,及记录的内容。

设计模式通常对设计模型进行提炼,从而获取经常使用的,或复杂的结构和过程。


模式框架

如前面设计模型部分中所提到的,您可以利用设计模式对设计模型进行提炼(修改或添加 UML 元素),从而将解决方案应用到已知问题上。您可以利用 Rational Software Architect 的模式框架来完成许多重要的任务:

  • 撰写模式
  • 以插件的形式将模式作为可复用资产进行打包
  • 在模式库中找到并导航到模式
  • 将模式应用于 UML 元素

撰写模式

您可以通过扩展两个插件来撰写设计模式:抽象出模式服务用途的模式服务模式框架。模式服务和模式框架提供构建、设计、编码、搜索、组织,及应用模式的基本功能。

“Content authoring demystified”这篇文章(参见参考资源)详细地介绍了如何撰写新的模式。

打包并发布模式用于重用

您可以导出一个符合可复用资产规范(Reusable Asset Specification,RAS)的作为可部署,可复用资产的模式插件,以便将来可以再次使用。可复用资产可以作为文件进行交换,或者发布到资产存储库中,让其他人来搜索,然后方便地将模式导入到他们的 Rational Software Architect 工作台中。

“Content authoring demystified”这篇文章(参见参考资源)也介绍了如何将模式打包为 RAS 资产文件,并且导出到文件系统中。或者,您可能想要将资产直接导出到存储库中,如图 6所示。

图 6. 将模式导出到资产存储库中
图 6. 将模式导出到资产存储库中的屏幕显示

发现模式

在 Rational Software Architect 可以通过很多方法找到模式,例如使用 Pattern Explorer 和 Asset Explorer。

Pattern Explorer:在建模透视图中,单击通常位于屏幕最右边的图标。模式导航器出现,它显示出 Rational Software Architect 所安装的模式,其中装载着四人帮(Gang of Four,GoF)设计模式。如果您已经导入了其他模式,那么这些模式也会列出来。在 Pattern Explorer(图 7)中,您可以搜索、组织,或将模式拖拽到 UML 图中。

图 7. Pattern Explorer 视图
图 7. Pattern Explorer 视图的屏幕抓取

Asset Explorer:所有的模式都默认地存储在模式类型的本地 RAS 存储库中,您可以将其组织成逻辑分组,或者子目录。在 RAS 透视图的 Asset Explorer 视图中,您可以在 Patterns Repository 目录下找到 Rational Software Architect 所安装的模式。

如果您已经创建了到任意资产存储库的连接,那么不论是本地或是远程,如果有其他人发布了资产存储库,您都可以从所连接的资产存储库中找到模式,如 图 8所示。您可以从资产存储库中将模式导入到 Rational Software Architect 工作区中,以便您可以在 Pattern Explorer 中使用它们。

图 8. Asset Explorer 视图
图 8. Asset Explorer 视图的屏幕抓取

应用模式

应用模式是非常直截了当的。您可以从 Pattern Explorer 中将模式实例拖拽到 UML 图中,然后将 UML 元素作为参数绑定到模式实例上(选择现有的或创建新的)。当您将参数绑定到模式实例上之后,模式实例将通过修改现有模型元素或新增模型元素来精练模型。

在本文后面的部分中,您将找到有关应用模式的更多信息,以及一个实例。


转换

如早先提到的,您可以将设计模型转换为 Rational Software Architect 中的实现级工件,例如可执行的代码、XSD、WSDL、文档,和配置脚本。

Rational Software Architect 装载了五个转换,如图 9所示。您可以将这些转换应用于 UML 元素的不同级别,例如模型、包、类,和接口。例如:

  • UML to C++
  • UML to Java
  • UML to EJB
  • UML to CORBA
  • UML to XSD

这些转换提供了由 UML 模型生成相应的 Eclipse 项目和相关工件的基本功能。例如,UML 到 Enterprise Java® beans(EJB)的转换将创建 EJB 项目,而 UML 到 Java 的转换将创建 Java 项目。您可以扩展这些转换,添加行为,或者您可以通过扩展 Rational Software Architect 转换框架,撰写您自己的转换。“Content authoring demystified”这篇文章(参见参考资源)介绍了如何扩展 UML 到 Java 的转换的实例,以及如何创建自己的 Rational Software Architect 转换的实例。

图 9. Rational 软件中包含的转换
图 9. Rational 软件中包含的转换

基于资产的开发框架

模型、模式,和转换是可复用的资产。开发它们之后,其他人可以进行组织、存储并使用,从而加速 MDD,并确保更好的投资回报率。因此,基于资产的开发对 MDD 是重要的补充。

Rational Software Architect 利用可复用的资产规范(Reusable Asset Specification,RAS)来提供标准的方法打包并消耗(使用)向已知环境提供问题解决方案的资产。RAS 资产是相关工件和描述资产的清单的集合,如图 10所示。Artifacts(工件) 是软件开发生命周期中的任意工作产品,例如需求文档、模型、源代码文件、部署描述符、测试用例,及脚本。一般来说,术语 工件 与文件相关联。

图 10. 什么构成了资产
图 10. 什么构成了资产(工件的清单或列表)

打包资产用于重用

利用 Rational Software Architect 建模工具的 RAS 导出功能来打包资产,可以确保自动地获取所有参考过的文件,以及您想要分享的相关模型和项目、文档、源代码,和其他开发工件。(要了解更多信息,阅读参考资源中的“Content authoring demystified”文章。)在将资产打包之后,您可以选择在本地文件系统中保存,或者导出到资产存储库中。

导入现有资产

Rational Software Architect 中的 RAS 导入功能解包并还原 RAS 资产中的文件到本地文件或文件夹,或者到 Eclipse 工作区中。导入带有可部署插件的资产,例如模式和转换,将导致在 Rational Software Architect 中安装插件。您可以从本地文件系统或资产存储库中导入资产。

资产存储库

RAS 资产可以存储在基于 RAS 的资产存储库中。利用 Rational Software Architect,当您在打包资产时,可以选择将其导出到所连接的资产存储库中。您还可以在 RAS 透视图的 Asset Explorer 视图中将资产以 .ras 的文件格式从文件系统中发表到所连接的存储库中。

此外,您可以在 Asset Explorer 中观看、搜索,并从资产存储库中导入资产,如图 8所示。Rational Software Architect 支持以下四类基于 RAS 的资产存储库。您可以在 Asset Explorer 视图中创建到达这些存储库的连接。

  • 本地存储库:本地文件系统存储库为个人使用。除非您使用网络文件系统来存储本地存储库,不然您不能在团队之间共享该存储库。
  • 工作组存储库:基于 Web 服务的存储库为团队所使用。这是您可以安装到 J2EE 应用程序服务器上的 Java® 2 Platform,Enterprise Edition(J2EE®)应用程序。它可以用于在安装了 Rational Software Architect 的团队之间进行资产的分享。您可以从® alphaWorks®(参见参考资源)上下载工作组存储库。
  • XDE 存储库:该选项提供对遗留 Rational XDE 存储库的反向支持。
  • developerWorks 存储库:存储在 IBM® developerWorks®中。您可以搜索并导入 IBM 提供的新设计模式。模式的数量在稳固的增长着,因此不要忘记常去看看。

将所有内容放在一起:简单的场景

现在是时候了解如何将所有的 MDD 工具支持放在一起的时候了。该场景将带着您经过以下这些步骤:

  1. 在资产存储库中存储设计模式资产
  2. 导航到存储库并导入设计模式
  3. 创建 UML 模型
  4. 向 UML 模型中应用 Interface Inheritance 设计模式
  5. 将模型转换为 Java 代码

步骤 1. 在资产存储库中存储设计模式资产

  1. 从本文的下载部分下载 Interface Inheritance 设计模式。当该模式应用到一个类时,设计模式将把该类的公共方法抽取出来,放入一个接口中,并且创建类和接口之间的集成关系。
  2. 创建到存储库的连接。
    1. 在 Rational Software Architect 中,启动 RAS(可复用资产)透视图。
    2. 在 Asset Explorer 视图中,创建到存储库的连接,单击 存储库图标图标。
    3. 如果您已经安装了 Workgroup Repository,那么选择 Workgroup Repository 并输入存储库实例的 URL,或者,选择 Local Repository,并输入您要存储资产的位置。
  3. 将模式资产导入存储库。
    1. 在 Asset Explorer 视图中,单击右键打开环境菜单,并选择 Publish Asset...
    2. 定位到您所下载的资产文件,并在发布的列表中选择repository(参见图 11。)
    3. 在资产发布之后,Interface Inheritance 模式将出现在连接的存储库之下的资产列表中。
图 11. 将模式资产导入存储库
图 11. 将模式资产导入存储库的视图

步骤 2. 导航到存储库并导入设计模式

  1. 导航到资产并搜索。在 Asset Explorer 中,您可以从不同的存储库中导航这些资产,并且使用存储库图标图标打开搜索对话框来搜索资产。
  2. 导入设计模式。
    1. 右键单击 Interface Inheritance 资产,并在环境菜单中选择 Import...。Import RAS Asset 向导将启动。消息窗口告诉您,该资产包含可部署的插件,以及导入它将安装插件。单击 OK 确认该信息。
    2. 完成导入向导的过程。
    3. 模式插件应该被 Rational Software Architect 动态地加载。切换到 Modeling 透视图,单击存储库图标 图标,打开 Pattern Explorer。您会看到 Miscellaneous Patterns 类别下的 Interface Inheritance 模式。注意:如果您没有看到,那么插件没有被动态地加载上,因此,您需要使用 -clean 参数重新启动 Rational Software Architect,这样将使它加载新的插件。

步骤 3. 创建 UML 模型

  1. 创建名为Lab2 的新 UML Project。
  2. 创建名为 Lab2Model 的新 Modeling Project,如图 12中所示。将自动打开一个模型的默认图。
图 12. 创建新的 UML 模型
图 12. 创建新 UML 模型位置的屏幕显示
  1. 在图中,创建名为 com.ibm.xtools.patterns.samples.impl 的包。
  2. 创建名为 Lab2Class 的新类,包含以下共有方法:
    • op1(arg1:String):String
    • op2(arg1:Integer):Integer
  3. 如果您想看到完整的标记,在类上单击右键,并在环境菜单中选择图 13中展示的选项。
图 13. Show Signature 选项
图 13. Show Signature 选项的路径显示

步骤 4. 向 UML 模型中应用 Interface Inheritance 设计模式

  1. 如果您在 Model Explorer 中创建,将 Lab2Class 拖拽到 com.ibm.xtools.patterns.sample.impl 中。注意:如果您在图中创建了类,忽略此步骤。
  2. 在 Pattern Explorer 中,从 Miscellaneous Patterns 类别中找到 Interface Inheritance模式,将其拖拽到图中,如图 14中所示。
图 14. 找到 Interface Inheritance 模式
图 14.(屏幕)找到 Interface Inheritance 模式的位置
  1. 将鼠标指针放在 Pattern Instance 的 Abstract Interface参数上(图 15)。您会发现该参数上的菜单栏中有两个图标:
    • 第一个将创建一个与参数名相同的假名的 Interface。
    • 选择 第二个图标,并输入接口名称:Model2Interface
图 15. 应用模式
图 15. 开始应用模式的位置的屏幕显示
  1. 创建名为 com.ibm.xtools.patterns.interfaces 的包。
  2. 在 Model Explorer 中将 Model2Interface拖拽到com.ibm.xtools.patterns.interfaces
  3. Lab2Class 拖拽到模式实例的Implementation Class 参数中。这将把 Lab2Class 绑定到 Implementation Class 参数上。
  4. 从 Model Explorer 中将 Model2Interface 拖拽到图中,以研究关系。您会找到:
    • Model2Interface 与 Lab2Class 有同样的公共方法
    • Lab2Class 已经实现了 Model2Interface。注意:如果您没有看到关系,那么单击图的空白部分,选择 Filters > show/hide relationships...,并单击 OK。这将刷新图中的关系,如图 16 所示。
图 16. 应用模式的完整过程
图 16. 应用模式的过程图

步骤 5. 将模型转换为 Java 代码

  1. 在 Model Explorer 中右键单击 Lab2Model 注意:务必选择带有存储库图标图标的模型,不是.emx文件。
  2. 在环境菜单中选择Transform > Run Transformation > UML to Java
  3. 创建名为 Lab2Code 的新目标项目。
  4. 选择 Run,执行转换。
  5. 观察 Lab2Code 项目中生成的代码,这是 Interface Inheritance 模式的。

将您投资的价值最大化

您可以看到 Rational Software Architect 的完整工具支持为您的模型驱动开发和模式带来的优势。当您将它和补充 MDD 的 Rational Software Architect 的基于资产的开发框架组合起来时,您就可以通过复用模型、模式,及转换,将时间和金钱的投资回报率最大化,统一开发过程,加速开发循环,并且标准化共享的资产。


下载

描述名字大小
Design patternInterfaceInheritance.zip54KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=218765
ArticleTitle=使用 Rational Software Architect 进行模型驱动和基于模式的开发,第 2 部分: IBM Rational Software Architect 中的模型驱动开发工具支持
publish-date=05092007