首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

UML - 正向工程与逆向工程(Reverse Engineering)

2012-11-09 
UML -- 正向工程与逆向工程(Reverse Engineering)?图 2 显示了得到一个抽象类图的树状结构所需的剩余步骤:

UML -- 正向工程与逆向工程(Reverse Engineering)

?

图 2 显示了得到一个抽象类图的树状结构所需的剩余步骤:

    通过右键点击位于 Abstraction之下的类 Car来打开内容菜单。 显示右边面板中 Car类图,通过选择菜单中的 Show Diagram选项。 通过选择并右键点击右边面板中类图 Car来打开内容菜单。 通过选择内容菜单中 Explore in Browse Diagram选项来产生抽象类图的树状结构。

做完第六步,您将在右边面板中见到 Car类图的树状结构。

图 2. 从整个工作场所中发现其抽象结构
UML - 正向工程与逆向工程(Reverse Engineering)

结果有以下缺陷:

结构树中被发现类的同类及子类可能被丢失。 除去被发现的抽象类之外,其他类没有属性及操作。

要得到第六步产生的树状结构,还需其他的步骤。您需要增加分离度(如图 3 所示),这决定了从被发现类扩展的层。

图 3. 改变分离度
UML - 正向工程与逆向工程(Reverse Engineering)

默认度是 1,这就是为什么在继承树中一些子类会丢失的原因。在本例中,分离度被增加至 2。

第二个问题是除了在树状结构中被发现的类,其他类没有属性和操作。这不利于使用者出于再使用的目的来研究已存在的普遍模式。

接下来的例子将向您展示,怎样识别具有任意属性及操作的整个继承树。

    向 Rational Software Architect 载入一个 Java 项目。 切换至 Diagram Navigation视图,按以上步骤所述,从工作场所中发现其抽象结构。 从您感兴趣的第二步中找出一个抽象类。 通过寻找模型搜索器中的类,找出等级树状结构类 ,双击打开编辑器中的类,按下 F4以打开等级树。确保 type hierarchy已被选择。 右键点击类,并将其转变为一个可视的类图,通过选择 Visualize > Add to New Diagram File > Class Diagram,如图4所示。 通过右键点击并选择 Visualize > Add to Current Diagram来向当前的图添加剩余的类。
图 4 . 将类可视化为新的类图
UML - 正向工程与逆向工程(Reverse Engineering)

图 5 展示了产生一个继承树类图的过程:

    打开并按下 F4以显示类的等级。 选择每一个类并将其添加到类图中。 检查并完成右边的图。
图 5. 产生一个继承树类图的机理
UML - 正向工程与逆向工程(Reverse Engineering)

类图以 Rational Software Architect 默认格式产生。有几个有用的修改可以帮助您将图表进行可视化。例如,您可以修改连接路径样式以使用树状样式路径 ,并且您可以通过在工作区右键点击来打开内容菜单然后点击 Arrange all。到此产生的类图要比自动产生的看上去更好。如图 6 所示。

图 6. 带有属性的继承树状图及树状路径连接
UML - 正向工程与逆向工程(Reverse Engineering)

图6中的类既显示了属性又显示了操作。属性及操作显示的好处在于,您可以研究它们共同的状态及行为,从而进一步了解一个已存在系统是如何被实现的,这将有助于系统的再使用。

如图 7 所示,您可以从模型搜索器中选择多个 Java 文件 来将它们在新的类图中可视化。如果您想添加更多的类,您可以选择更多的 Java 源代码来将它们在当前的类图中可视化。本图显示类包括在项目及它们的基本关系中。这有利于在项目中自动发现 UML 类,但是自动发现的关系在这里用处不大。

在图 7 中,几乎所有的关系是 use除去继承关系。使用关系太过平常以至于不能给出有用的设计信息,越来越多的特别的聚集及组成关系被隐藏了甚至当所有的关系在图中都出现过。聚集关系表现为一对多关系当一个类含有其他类的很多项目时,组成关系用于描述一多一关系当一个类仅含有其他类的一个例子时。这个高层的抽象意味着对类之间更精确的关系发现,并为本设计的执行提供了有用的信息。这个类图如果没有抽象关系的细节将不再像以前那样有用。

这里,我们尝试并探索了,以半自动方法产生UML类图的高层抽象方案。 UML 类以和以前同样的技术发现,并且类间的关系由人为指定。高层的抽象方案基于研究已有源代码所必须的知识。

图 8 的例子显示了,怎样应用这个方法来得到高层的 UML 类图。

图 8. 使用 UML 模型向导建立一个空白模型
UML - 正向工程与逆向工程(Reverse Engineering)

为了得到一个高层的类图,您必须首先建立一个空白模型。

    按图 8 所述步骤建立一个新的空白模型:
      在文件种类下,选择 UML Modeling。 在模板下,选择 Blank Model。 在文件名区域,输入 Blank Model。 对于目的文件夹,输入 example。 默认的图检查框 "Create a default diagram in the new model" 应该被检查。 对于默认的图种类,选择 Freeform Diagram。 点击 Finish

接下来的一步是从自动生产类图中总结选择的类。 Rational Software Architect 中的总结,能让您从一个类中拷贝一个类并粘贴到另一个类图中,这必须在一个空白模型中完成。如果您将总结的类粘贴到同一个类图,或本空白模型以外另一个类图中时,那么该类的属性和功能将丢失。

    通过图 9 所示的步骤,从自动生成的类图中总结已选择的 Java 类:
      从 classdiagram2.dnx 中选择类 FuelTankEnginePassenger以及 Car 在一个已选类上右键点击以打开内容菜单 选择 Harvest菜单
    将已总结的类粘贴至分离的创建于步 2 的类图中。 在类间创建聚集及组成关系。
图 9. 一个类图中的总结类
UML - 正向工程与逆向工程(Reverse Engineering)

下一步,在类间创建关联关系,这使您能够在聚集及组成关系中选择一个。图 10 显示了一个高层的类图。

图 10. 半自动方法产生的 UML 类图的高层抽象
UML - 正向工程与逆向工程(Reverse Engineering)

通过将图 10 与图 9 进行比较,您可以发现半自动方法能精确显示类间关系。本图可用于独立设计执行文件,或已有系统远期改善。

着重点:
如果不经过总结,聚集及组成关系将不能应用于 Rational Software Architect 。

当您完成创建一个序列图,一个序列文件产生于 Collaboration: Interaction 标签下。 您可以从 Java 代码中向序列图添加类。二者均见于图 12 。

图 12 的主要工作区显示了一个序列图的例子。

图 12. 产生于 Java 源文件的序列图
UML - 正向工程与逆向工程(Reverse Engineering)

一个方法调用意味着信息从召集者传向被召集者。被召集者是方法所有人,它从方法召集者那里收到信息。信息可以是单道的也可以是双道的。一个序列图由在处于一组方法所有者及一个初始发起者之间的,一系列方法标记组成。第一个标记必须从发起第一个方法标记的地方开始。

总结

本篇文章论证了怎样通过应用 Rational Software Architect v7.0 ,从 Java 代码中使用逆向工程创建 UML 类及序列图。层级类图代表着一种方式,该方式能发现在一个项目或工作集中,发现整个类间的层次关系。这将有助于开发人员向一个已有系统扩展或添加新功能。高层的类图能直观显示类间的聚集及组成关系。这有助于开发人员扩展或修改一个已有设计。这对开发人员们开发大型应用系统意义非凡。序列图显示了在执行特定任务时类间的动态方法标记。这为系统中提供了清晰的运行原理图。

致谢

作者对 Philip Norton 和 Noel Rooney 对本文所作的总结和回馈表示感谢。

参考资料 学习您可以参阅本文在 developerWorks 全球网站上的 英文原文。阅读名为 Reverse Engineering of UML Class and Sequence Diagrams from Java 的白皮书,Philip Hartman(2006年)。通过阅读 IEEE 文章 Reverse Engineering is Reverse Forward Engineering 来学习更多内容,该文由 Ira D. Baxter 和 Michael Mehlich 于 1997 年所写。访问 developerWorks 上的 Rational 专区,了解有关 Rational 软件交付平台产品的技术资源和最佳实践。订阅 Rational Edge 中文版,获得了解高效软件开发背后概念的文章。 订阅 IBM developerWorks 时事通讯,获得有关最佳的 developerWorks 教程、文章、下载、社区活动、网络广播和事件的每周更新。 浏览 技术书店,获得有关这些和其它技术主题的书籍。 获得产品和技术下载 IBM Rational 软件的试用版。下载这些 IBM 产品评估版,并着手使用来自于 DB2?,Lotus?,Tivoli?,以及 WebSphere? 的应用程序开发工具和中间件产品。讨论 查看 developerWorks 博客,并加入 developerWorks 社区。 Rational Software Architect,Data Architect,Software Modeler,Application Developer 和 Web Developer 讨论区: 询问有关 Rational Software Architect 的问题。

?

热点排行