本文面向于那些 软件架构师,设计师和开发人员,他们想使用 IBM® Rational® Software Architect 从 Java™ 源代码来逆向工程生成 UML 类和序列图。 逆向工程常常被用来从已有的源代码中以一种抽象模型 UML 格式来得到丢失的设计文档,其能够用来研究一个系统的静态结构和动态行为,并用于扩展新的特性到产品。 做者详细说明了使用 IBM Rational Software Architect 进行逆向工程的限制,并阐述了克服这些限制的技术。 您将从使用这些技术技巧和窍门中受益,以识别组件,并从 Java 类中产生像 UML 类和序列图这样的高层抽象。
软件结构师、开发人员及测试人员都熟知统一建模语言(UML),该语言适用于文档化用例、类图、序列图和其余图表。也能够经过其余许多软件辅助工具来帮助软件工程师来完成这些工做,或者是正向工程或者是逆向工程的。 架构
IBM® Rational® Software Architect 在不少工业中得以普遍采用,由于它提供了不少的特性以帮助逆向工程师。 问题是当您以 Java™ 代码逆向构建 UML 类及序列图时,Rational Software Architect 不能自动地产生有用的 UML 类及序列图。 可是已经存在改善 Rational Software Architect 输出产物的技术。本篇文章论证了怎样使用这里介绍的技术技巧,从 Java 代码中识别其组成部分及对 UML 种类和序列图进行高层的抽象。 编辑器
使用逆向工程,您能够很容易就从正向工程中获得您想要的,本篇文章将介绍在逆向工程如下领域中存在的问题: 工具
接下来的部分为每一个问题提供一个解决方案,并论证了怎样产生有意义的类及序列图。例子向您展现了怎样从一个已给 Java 项目的源代码中,识别一个系统的继承关系及组成部分,以对 UML 类图及序列图进行高层的抽象。 测试
注意:
本篇文章中的例子产生于 Rational Software Architect 7.0 版本 spa
继承关系是一种广泛的对象型的模式。它容许一组类共享共同的状态和行为,从而子类能够从父类那里继承共同的状态和行为。从一个已存在系统中发现整个的继承树结构是至关有用的,由于它能向您揭露在树中什么是顶级类以及什么是子类。并且,您能够识别一个继承树中有哪些共同状态及行为,以及这些共同行为怎样起做用。您能够在探索过程当中以如下三种方式使用 Rational Software Architect。 设计
第一步是在一个已存在系统中自动获得其顶级类。这样您就能使用这些类做为切入点以研究继承树中的类。您能够按如下步骤来完成此项。 orm
这能够揭示整个工做空间的架构。 对象
图 2 显示了获得一个抽象类图的树状结构所需的剩余步骤:
作完第六步,您将在右边面板中见到Car类图的树状结构。
结果有如下缺陷:
要获得第六步产生的树状结构,还需其余的步骤。您须要增长分离度(如图 3 所示),这决定了从被发现类扩展的层。
默认度是 1,这就是为何在继承树中一些子类会丢失的缘由。在本例中,分离度被增长至 2。
第二个问题是除了在树状结构中被发现的类,其余类没有属性和操做。这不利于使用者出于再使用的目的来研究已存在的广泛模式。
接下来的例子将向您展现,怎样识别具备任意属性及操做的整个继承树。
图 5 展现了产生一个继承树类图的过程:
类图以 Rational Software Architect 默认格式产生。有几个有用的修改能够帮助您将图表进行可视化。例如,您能够修改链接路径样式以使用树状样式路径 ,而且您能够经过在工做区右键点击来打开内容菜单而后点击 Arrange all。到此产生的类图要比自动产生的看上去更好。如图 6 所示。
图6中的类既显示了属性又显示了操做。属性及操做显示的好处在于,您能够研究它们共同的状态及行为,从而进一步了解一个已存在系统是如何被实现的,这将有助于系统的再使用。
Rational Software Architect 能让您经过从一个Java项目中,选择多个 Java 文件,来产生类图。
若是多个类已经被添加到当前的图中,那么它们之间的关系也将被显示。
图 7 是一个从 Java 代码中自动产生的类图的例子
如图 7 所示,您能够从模型搜索器中选择多个 Java 文件 来将它们在新的类图中可视化。若是您想添加更多的类,您能够选择更多的 Java 源代码来将它们在当前的类图中可视化。本图显示类包括在项目及它们的基本关系中。这有利于在项目中自动发现 UML 类,可是自动发现的关系在这里用处不大。
在图 7 中,几乎全部的关系是use除去继承关系。使用关系太过日常以致于不能给出有用的设计信息,愈来愈多的特别的汇集及组成关系被隐藏了甚至当全部的关系在图中都出现过。汇集关系表现为一对多关系当一个类含有其余类的不少项目时,组成关系用于描述一多一关系当一个类仅含有其余类的一个例子时。这个高层的抽象意味着对类之间更精确的关系发现,并为本设计的执行提供了有用的信息。这个类图若是没有抽象关系的细节将再也不像之前那样有用。
这里,咱们尝试并探索了,以半自动方法产生UML类图的高层抽象方案。 UML 类以和之前一样的技术发现,而且类间的关系由人为指定。高层的抽象方案基于研究已有源代码所必须的知识。
图 8 的例子显示了,怎样应用这个方法来获得高层的 UML 类图。
为了获得一个高层的类图,您必须首先创建一个空白模型。
接下来的一步是从自动生产类图中总结选择的类。 Rational Software Architect 中的总结,能让您从一个类中拷贝一个类并粘贴到另外一个类图中,这必须在一个空白模型中完成。若是您将总结的类粘贴到同一个类图,或本空白模型之外另外一个类图中时,那么该类的属性和功能将丢失。
下一步,在类间建立关联关系,这使您可以在汇集及组成关系中选择一个。图 10 显示了一个高层的类图。
经过将图 10 与图 9 进行比较,您能够发现半自动方法能精确显示类间关系。本图可用于独立设计执行文件,或已有系统远期改善。
着重点:
若是不通过总结,汇集及组成关系将不能应用于 Rational Software Architect 。
序列图是应用最为普遍的 UML 动态建模方法。它致力于识别一个系统的行为。一个序列图一般应用于建模用例,以显示一个系统的方法及功能。
Rational Software Architect 不能从 Java 代码中自动建立一个序列图。下面的步骤会告诉您怎样去建立一个:
当您完成建立一个序列图,一个序列文件产生于Collaboration: Interaction标签下。 您能够从 Java 代码中向序列图添加类。两者均见于图 12 。
图 12 的主要工做区显示了一个序列图的例子。
一个方法调用意味着信息从召集者传向被召集者。被召集者是方法全部人,它从方法召集者那里收到信息。信息能够是单道的也能够是双道的。一个序列图由在处于一组方法全部者及一个初始发起者之间的,一系列方法标记组成。第一个标记必须从发起第一个方法标记的地方开始。
本篇文章论证了怎样经过应用 Rational Software Architect v7.0 ,从 Java 代码中使用逆向工程建立 UML 类及序列图。层级类图表明着一种方式,该方式能发如今一个项目或工做集中,发现整个类间的层次关系。这将有助于开发人员向一个已有系统扩展或添加新功能。高层的类图能直观显示类间的汇集及组成关系。这有助于开发人员扩展或修改一个已有设计。这对开发人员们开发大型应用系统意义非凡。序列图显示了在执行特定任务时类间的动态方法标记。这为系统中提供了清晰的运行原理图。