使用 IBM Rational Software Architect 通过编程方式生成 UML 模型
 

2009-01-04 作者:Ahmed Makady 来源:IBM

 
本文内容包括:
本篇文章向您介绍了,怎样使用 IBM® Rational® Software Delivery Platform API ,来通过结构化文本来生成 统一建模语言(UML)模型,特别是 Rational 软件交付平台的架构管理部分(简称为 Rational Modeling Platform)。如果您已经有了用于构建 UML 模型的结构化信息,那么这就可以节省您的时间。本篇文章对体系架构与编程模型作出了一个概述。它还提供了一个具体的代码示例,以及运行该示例代码需要的大致步骤。

为什么您需要通过编程方式生成 UML 模型

统一建模语言(UML)在全世界范围内,成为软件开发项目方面广泛采用的交流标准。在软件项目中,UML 模型现在用于描述以及交流软件产品,它从获取软件结构的需求出发,然后分析,设计,开发,部署应用,以及维护。

但是,在大多数情况下,项目中的信息资源是用文本格式描述的,所以这些资源在 UML 中需要以最佳实践方式表达出来,这样就能与项目的其他成员顺利交流。

例如,在设计团队设计软件时,提交给团队之前,业务过程分析可能需要,将文本形式的业务过程描述转化为 UML 活动图。UML 活动图对于构建人员与设计人员来说,表达的更加清晰与简洁。业务分析员在理解业务过程描述,为每一个业务过程创建活动图时,可能要花相当长的一段时间 。这时候如果有一个能由文本描述自动生成模型的工具,那无疑能有很大的帮助。 而 Rational Modeling Platform API 通过简单的 Java ™代码,就具有构建一个这种工具的能力。

Rational 建模结构以及编程模型的简介

Rational Modeling Platform 是建立在 Rational 建模方案 的基础之上。它最显著的特性,和建模编辑器,视图以及通过使用平台提供的各种服务,来构建的工具一道,组成了一个 UML 建模器。 该平台基于 Eclipse 技术,这是一个开放源工具集成平台。Rational 建模方案包括了 Eclipse。

Rational Modeling Platform 结构

Rational Modeling Platform 覆盖了大量的技术,这些技术可以分成两组: Rational 建模组件以及 Eclipse 组件。接下来的章节,是在编程模型过程中,发挥过一定作用的每个组件的简单概述。

图 1. Rational Modeling Platform 结构图
Rational 组件顶部, Eclipse 组件底部

Eclipse 组件

  • Eclipse 平台。Eclipse 技术的核心是 Eclipse 平台。该组件包括构建用户界面的框架,管理资源,坐标构建器,集成调试器,以及其他部件。Eclipse 平台,拥有一个集成开发环境需要的全部基本框架。IBM Rational 建模方案,大量使用了该平台提供的扩展性能。
  • Eclipse Modeling Framework(EMF。EMF 是一项用作 IBM Rational 建模方案中枢的集成技术。
  • UML 2 。UML 2 是一个基于 EMF 的 UML 2.1 子结构规格说明的实现。UML 是一种对分布式对象系统可视化,说明,构建以及记录的图形化定义语言。Rational Modeling Platform 为它的 UML 2.1 功能而使用该工具。
  • EMFT Transactions 。 EMFT 就是 Eclipse Modeling Framework Technology。该框架包含了补充管理基于 EMF 模型的一些技术。EMFT Transactions 组件,为建模管理(模型评估以及修改),提供了一个框架。Rational Modeling Platform 为所有的模型管理使用 EMFT Transactions 。
  • EMFT OCL 。EMFT OCL 是一个基于 EMF 的 OCL 2.0 规格说明的工具。 Object Constraint Language (OCL)是一种用于描述应用于 UML 模型规则的规范语言。Rational Modeling Platform 使用 EMFT OCL ,来对它管理的模型评估 OCL 效果,并在代码完成期间,验证用户输入。
  • EMFT Validation 。EMFT Validation 是一种对 EMF 实例模型的可扩展的验证框架。Rational Modeling Platform 使用 EMFT Validation 来约束它管理的模型。特别值得一提的是,它使用框架根据官方规格说明来约束 UML 2 模型。
  • EMFT Query 。EMFT Query 是一种帮组转移 EMF 模型实例的框架。它提供了一种 SQL-inspired 系列的类,以组织查询,以及类的层级结构。 OCL 效果在模型转移期间,支持作为一个过滤器。Rational Modeling Platform 使用 EMFT Query 来在它管理的模型中,执行搜索。
  • Graphical Editing Framework (GEF) 。GEF 为创建图形编辑器提供了一个基础。它包括了基于 模型-显示-控制 (MVC)的框架,以及一个呈现分系统。Rational Modeling Platform 在 GMF(Graphical Modeling Framework)组件中,为它的图形工具而直接使用 GEF 。
  • Graphical Modeling Framework (GMF) 。GMF 是一个创建图形化建模编辑器的框架。它包括了两个主要的部分:一个运行时组件,以及一个工具组件。运行时部分提供了,支持可扩展的基于 GEF 和 EMF 建模图形,所需要的基础。工具部分能够从各种输入模型中,生成一个这样的编辑器。Rational Modeling Platform 可扩展的使用 GMF 运行时元素。

Rational Modeling Platform 组件

Rational Modeling Platform 组件涉及到三层: UML Modeler, UML Modeling 层,以及 Domain Modeling 层。

  • UML Modeler 层。UML Modeler 层包含了,管理平台的 UML 建模环境所需要的类和接口。类 UMLModeler 是一个控制建模器的 UML 模型的生命周期以及概述的切入点。另外, 该层还为与 UML 模型交流需要的各种类,提供了访问方法。
  • UML Modeling 层。 UML Modeling 层包括了与 UML 模型与图协同工作的帮助组件。例如,它包括了在模型中帮助找到 UML 对象的组件,帮组使用 UML 元素种类(例如,获得节点,控制节点,注释)的组件,以及帮组寻找,创建,编辑或者分析图的组件。
  • Domain Modeling 层。 Domain Modeling 层涵盖了各种对生成任意基于 EMF 建模编辑器有用的服务。

Rational Modeling Platform API 术语以及概念

在开始使用 Rational Modeling Platform API 之前,了解怎样管理模型非常重要。接下来的列表包含了,一些您需要了解的重要术语以及概念。

  • Rational Modeling Platform 模型 。Rational Modeling Platform 管理的模型 ,是 EMF 模型的实例。例如, Rational Modeling Platform 中的每一个 UML 模型,都是一个基于 EMF 的 UML 模型的实例,该模型可通过 UML 2 中的org.eclipse.uml2.uml插件获得。该插件是官方 UML 2.0 规格说明的一个工具。UML 模型通过使用 Java 接口来阅读和修改。Model 管理主要通过 UMLModelerJava 类来进行。这是一个显示模型以及概述生命周期操作,并提供建模平台访问方式的实用类.。
  • Rational Modeling Platform 编辑域。EMF 引入了一个编辑域(editing domain) 概念,以控制模型的生命周期。一个编辑域管理一系列自包含的相关 EMF 模型,以及修改模型的 指令(commands)。Rational Modeling Platform 的 UML 建模器使用的编辑域,可通过 UMLModeler.getEditingDomain()方法获得。
  • Commands 。一个 command 对模型的修改具有作用。 一个命令通过 Command Java 接口表达。
  • Command stacks 。一个 command stack 是指与编辑区相关的特性。命令集包含了用于修改模型的命令,这些模型是被编辑域控制的。一个命令集是由 CommandStackJava 接口表达的。
  • Rational Modeling Platform 图。Rational Modeling Platform 图基于 GMF 符号模型。 一个 GMF 注释提供了描述图的基本对象。它定义节点,边缘,形式,以及其他系列化图框架所需的图形信息。在 Rational Modeling Platform 中,图是作为注释,而向 UML 模型元素添加的,并持续存在于 UML 建模文件(.emx 文件)中。Java 接口 IUMLDiagramHelper 用于管理 Rational Modeling Platform 图。

代码对象示例以及概述

下面的 Java 代码示例,演示了 Rational Modeling Platform API 的使用。该代码是通过 IBM®Rational®Software Architect 中的一个 Java Pluglet 显示的 。Pluglets 是一种小型的 Java 程序,用于以一种简单而直接的方式,来对工作台作出一些微小的扩展。Pluglets 用 Java 写成,并置于一个 pluglet 项目中。 pluglet 可以用工作台的相同示例测试,就像任何其他 Java 应用软件一样。Pluglet 作者可以使用 Java 开发环境,并且他们可以访问 Rational Modeling Platform 软件编程接口(APIs)。

代码示例从一个文本文件中,阅读业务过程步骤,并为 Rational Software Architect 中的该过程,创建一个 UML 活动图框架(每一步过程都对应着一个活动节点)。为了创建这个图,代码使用 Rational Modeling Platform API ,以管理 Rational Modeling Platform 模型,图以及模型元素。

代码示例概述

为了更好的理解代码,建议您浏览一下 pluglet 代码的 UML 序列图。该图以一张 JPG 图片的方式显示,并在 下载 部分中作为文章的附属材料。

pluglet 是 pluglet 类的 plugletmain() 方法的执行切入点:GenerateActivityDiagram。代码从获得 Rational Modeling Platform UML Modeler 编辑域开始。如上所述,编辑域用于管理 Rational Modeling Platform 模型。列表 1 中的代码行获得了建模编辑域:


列表 1. 获得 UML Modeler 编辑域
 
TransactionalEditingDomain editDomain = UMLModeler.getEditingDomain();

接下来的一步是模型管理。根据 Rational Modeling Platform 编程模型,模型管理通过定义与运行命令来完成,这些命令来自与编辑域相关的命令集。最简单的方式,是扩展 RecordingCommand 类,并执行 doExecute() 抽象方法,来完成需要的模型改变。列表 2 中的代码片段,创建了一个新的 RecordingCommand,执行 doExecute() 方法,并通过访问 execute() 方法,来执行命令,该方法位于与 UML Modeler 编辑域相关的命令集。

列表 2. 获得一个特定的 UML 模型并对它进行编辑
 
editDomain.getCommandStack().execute(new RecordingCommand(editDomain, undoLabel) {

    protected void doExecute() {

        Collection models = UMLModeler.getOpenedModels();
        for (Iterator iter = models.iterator(); iter.hasNext();) {

            Model model = (Model) iter.next();
            out.println(model.getName());

            if (model == null )
                out.println("Could not open model");
            else{

                //Start operating on models having the name  "*Test*"
                if (model.getName().indexOf("Test") != -1){
                    createProcessActivityDiagram(model);
                }
            }
        }

    }
});

前面代码中的 doExecute()方法,获取了所有当前在 Rational Modeling Platform 环境(Rational Software Architect)环境中打开的模型。接下来,它对这些模型进行迭代,对于每一个以“Test”作为名字一部分的模型,它执行 createProcessActivityDiagram() 方法,传递管理作为一个参数的模型示例。该方法从一个外部文本文档中阅读业务过程步骤示例,并向作为一个参数传递的模型,添加一个新的活动图。新创建的活动图包含了,为从文本文件中读取的每一个业务过程步骤设置的节点。接下来是一个 createProcessActivityDiagram() 方法的具体解释。

方法 createProcessActivityDiagram() 做了所有的模型管理工作。最初,它向进行中的模型添加一个新的 UML 包裹 ,package1。接下来,它向新创建的包裹,添加一个新的 UML 活动 ,Activity1,然后它创建一个新的 UML 活动图,ActivityDiagram1,并将其添加至 UML 活动。然后,过程步骤从文本文件中读取,一个活动节点为其中的每一步添加至 Activity1。最后,通过使用 IUMLDiagramHelper 接口方法 layoutNodes(),图中为活动创建的节点,为显示而作出调整。浏览列表 3 中的代码片段。

列表 3. 修改 Rational Software Architect 中的 UML 模型并添加包裹,活动,图,以及活动节点
 
//Create a package to hold the activity diagram
Package aPackage = addPackage(model, "package1");

//Add an activity "Activity1" to the package
Activity activity1 = addActivity(aPackage, "Activity1");

//Add an activity diagram to the activity
Diagram diagram = addActivityDiagram(activity1, "ActivityDiagram1");
...

//Read process steps from a file...
in = new BufferedReader(new FileReader("..."));

...

while((actionName = in.readLine())!=null){

    //Add an action to the activity
    addAction(activity1, actionName);
}
...

//Adjust diagram layout
UMLModeler.getUMLDiagramHelper().layoutNodes(diagram.getChildren(), "DEFAULT");
...

如果您想得到关于 addPackage(),addActivity(),addActivityDiagram(),以及 addAction() 更多的细节信息,您可以阅读 Rational Modeling Platform API 文件(参见参考资源)。完整的代码可由这里获得(参见下载部分)。

运行示例代码

先行条件

该代码是用 Rational Software Architect V7.0.0 开发与测试的。确保在运行代码之前,您已经安装了 Rational Software Architect 的以下可扩展性特性:

  • Pluglets
  • Plug-in Development Environment
  • Eclipse Technology Extensibility
  • Modeling Extensibility

通过以下步骤,运行示例代码:

  1. 切换至 Rational Software Architect 的 Modeling 视角。
  2. 向 Rational Software Architect 引入 ModelGenProj 项目。
    1. 选择 File > Import
    2. Import 对话框中,选择 Other > Project Interchange 并点击 Next
    3. 在 Import Project Interchange Contents 对话框中,指向文件 ModelGenProj.zip,检查 ModelGenProj 条目并点击 Finish
  3. 打开 GenerateActivityDiagram.java 文件,它位于 com.gbm.rational.support 包裹中。确保 pluglet 代码定义的过程步骤文件的路径,指向了正确的位置。该位置在列表 4 所示的代码行中得以定义。您要么可以在代码中编辑文件位置,要么可以在您的文件系统中创建一个文件夹结构,该文件系统在代码中与参考的路径一起编辑。
列表 4. 指定输入文件路径
 
in = new BufferedReader(new FileReader("..."));
  1. 通过在位于 ModelGenProj > Models > Test 之下的 Rational Software Architect Project Explorer 中双击一个名为 Test 的模型,来打开它。确保这是 Rational Software Architect 中唯一打开的模型,因为 pluglet 代码会处理,所有打开的以字符串“Test”作为名字一部分的模型。
  2. 在 Project Explorer 中,右击 GenerateActivityDiagram.java 文件,并选择 Run As > Pluglet
  3. 在运行代码后,检查您的 UML 模型。您会发现一个新创建的包裹,以及一个创建用于显示 steps.txt 文件中定义的过程步骤的UML 活动图。该文件包含了一列建模的过程步骤,每一个单独成行。为了在 Project Explorer 中检查创建的 UML 图,进入 ModelGenProj > Diagrams > Test 并双击 UML 图 package1:Activity1: ActivityDiagram1

致谢

作者感谢 Amr Yassin 对本篇文章作出的检查工作。

下载

描述 名字 大小 下载方法
示例代码与 UML 序列图
Model-gen-proj.zip
47KB

参考资料

学习
  • 您可以参阅本文在 developerWorks 全球网站上的 英文原文
  • 在 IBM Rational Software Architect 中使用 Pluglet,由 Dave Kelsey 所作,介绍在 IBM Rational Software Architect (IBM® developerWorks®,2006 年 11 月) 中所包含的插件工具。
  • Getting Started with UML2,位于 Eclipse.org Web 站点上,描述了如何开始应用 UML2 plug-ins for Eclipse。 特别是,它给出了一个概览,描述了如何创建模型(以及其内容),既通过编程方式又可以通过使用范例 UML 编辑器。
  • 查看 Eclipse UML2 Project,获得有关开源 Eclipse UML2 项目的更新。
  • 在 Rational Software Architect 7.0 Help 中: 从 Help 菜单中,选择 Help Contents > Extending Rational Software Architect Functionality > Rational Modeling Platform Developer's Guide
  • 在 developerWorks 上的 Rational Software Architect 产品专题,包括技术文档,指南文章,下载以及其它有用的信息。
  • 访问 UML 资源中心,获得关于统一建模语言(Unified Modeling Language,UML)的入门知识、技术资源和最佳实践。
  • UML 资源页面: 查找有关统一建模语言的资源,教程,规范和信息。
获得产品和技术 讨论

火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织