本文面向于那些软件架构师,设计师和开拓职员,他们想利用 IBM? Rational? Software Architect 从 Java? 源代码来逆向工程天生 UML 类和序列图。 逆向工程常常被用来从已有的源代码中以一种抽象模型 UML 格式来得到丢失的设计文档,其可以用来研究一个别系的静态构造和动态行为,并用于扩展新的特性到产品。 作者详细解释了利用 IBM Rational Software Architect 进行逆向工程的限定,并阐述了战胜这些限定的技能。 您将从利用这些技能技巧和窍门中受益,以识别组件,并从 Java 类中产生像 UML 类和序列图这样的高层抽象。
软件构造师、开拓职员及测试职员都熟知统一建模措辞(UML),该措辞适用于文档化用例、类图、序列图和其他图表。也可以通过其他许多软件赞助工具来帮助软件工程师来完成这些事情,或者是 正向工程 或者是 逆向工程的。
正向工程是对一个别系物理构造实现的高层抽象性、逻辑性及独立性设计的传统处理过程。

逆向工程是对一个已存在系统的剖析处理,以鉴别它的组成部分及它们的内在联系,从而以高层抽象性来构建一个别系的框架。在大多数情形下,逆向工程用于以抽象的模型 UML 格式从已存在的源代码中,提取已丢失的设计文件,从而同时可得知一个别系的静态构造及动态行为。
类及序列图问题的本色
IBM? Rational? Software Architect 在很多工业中得以广泛采取,由于它供应了很多的特性以帮助逆向工程师。 问题是当您以 Java? 代码逆向构建 UML 类及序列图时,Rational Software Architect 不能自动地产生有用的 UML 类及序列图。 但是已经存在改进 Rational Software Architect 输出产物的技能。本篇文章论证了若何利用这里先容的技能技巧,从 Java 代码中识别其组成部分及对 UML 种类和序列图进行高层的抽象。
利用逆向工程,您可以很随意马虎就从正向工程中得到您想要的,本篇文章将先容在逆向工程以下领域中存在的问题:
1.创造其抽象类及识别它们的等级构造
2.产生具有聚合及关联关系的高层抽象性的类图
3.构建序列图
接下来的部分为每个问题供应一个办理方案,并论证了若何产生故意义的类及序列图。例子向您展示了若何从一个已给 Java 项目的源代码中,识别一个别系的继续关系及组成部分,以对 UML 类图及序列图进行高层的抽象。
把稳:
本篇文章中的例子产生于 Rational Software Architect 7.0 版本
识别一个 UML 类图的继续树
继续关系是一种普遍的工具型的模式。它许可一组类共享共同的状态和行为,从而子类可以从父类那里继续共同的状态和行为。从一个已存在系统中创造全体的继续树构造是相称有用的,由于它能向您戳穿在树中什么是顶级类以及什么是子类。而且,您可以识别一个继续树中有哪些共同状态及行为,以及这些共同行为若何起浸染。您可以在探索过程中以以下三种办法利用 Rational Software Architect。
从一个事情场所或事情集中创造其抽象构造
从抽象构造表中选择一个类从而显示其抽象类图
在一个浏览表中研究树状构造,您会创造显示在 Abstraction之下的一系列抽象类。
第一步是在一个已存在系统中自动得到其顶级类。这样您就能利用这些类作为切入点以研究继续树中的类。您可以按以下步骤来完成此项。
打开 Rational Software Architect 中 Diagram Navigation视图。
在 Object-oriented Pattern下,右键点击 Abstraction,然后点击 Discover Architecture(如图 1 所示)。
这可以揭示全体事情空间的架构。
图 1.创造全体事情空间的架构
图 2 显示了得到一个抽象类图的树状构造所需的剩余步骤:
通过右键点击位于 Abstraction之下的类 Car来打开内容菜单。
显示右边面板中 Car类图,通过选择菜单中的 Show Diagram选项。
通过选择并右键点击右边面板中类图 Car来打开内容菜单。
通过选择内容菜单中 Explore in Browse Diagram选项来产生抽象类图的树状构造。
做完第六步,您将在右边面板中见到 Car类图的树状构造。
图 2. 从全体事情场所中创造其抽象构造
结果有以下毛病:
构造树中被创造类的同类及子类可能被丢失。
撤除被创造的抽象类之外,其他类没有属性及操作。
要得到第六步产生的树状构造,还需其他的步骤。您须要增加分离度(如图 3 所示),这决定了从被创造类扩展的层。
图 3. 改变分离度
默认度是 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 . 将类可视化为新的类图
图 5 展示了产生一个继续树类图的过程:
打开并按下 F4以显示类的等级。
选择每一个类并将其添加到类图中。
检讨并完成右边的图。
图 5. 产生一个继续树类图的机理
类图以 Rational Software Architect 默认格式产生。有几个有用的修正可以帮助您将图表进行可视化。例如,您可以修正连接路径样式以利用树状样式路径 ,并且您可以通过在事情区右键点击来打开内容菜单然后点击 Arrange all。到此产生的类图要比自动产生的看上去更好。如图 6 所示。
图 6. 带有属性的继续树状图及树状路径连接
图6中的类既显示了属性又显示了操作。属性及操作显示的好处在于,您可以研究它们共同的状态及行为,从而进一步理解一个已存在系统是如何被实现的,这将有助于系统的再利用。
产生一个高层的 UML 类图
Rational Software Architect 能让您通过从一个Java项目中,选择多个 Java 文件,来产生类图。
在模型搜索器中,利用 Visualize来将它们添加到一个新图或当前的类图中。
如果多个类已经被添加到当前的图中,那么它们之间的关系也将被显示。
图 7 是一个从 Java 代码中自动产生的类图的例子
图 7. 一个自动产生的类图
如图 7 所示,您可以从模型搜索器中选择多个 Java 文件 来将它们在新的类图中可视化。如果您想添加更多的类,您可以选择更多的 Java 源代码来将它们在当前的类图中可视化。本图显示类包括在项目及它们的基本关系中。这有利于在项目中自动创造 UML 类,但是自动创造的关系在这里用途不大。
在图 7 中,险些所有的关系是 use撤除继续关系。利用关系太过平常以至于不能给出有用的设计信息,越来越多的特殊的聚拢及组成关系被隐蔽了乃至当所有的关系在图中都涌现过。聚拢关系表现为一对多关系当一个类含有其他类的很多项目时,组成关系用于描述一多一关系当一个类仅含有其他类的一个例子时。这个高层的抽象意味着对类之间更精确的关系创造,并为本设计的实行供应了有用的信息。这个类图如果没有抽象关系的细节将不再像以前那样有用。
这里,我们考试测验并探索了,以半自动方法产生UML类图的高层抽象方案。 UML 类以和以前同样的技能创造,并且类间的关系由人为指定。高层的抽象方案基于研究已有源代码所必须的知识。
图 8 的例子显示了,若何运用这个方法来得到高层的 UML 类图。
图 8. 利用 UML 模型引导建立一个空缺模型
为了得到一个高层的类图,您必须首先建立一个空缺模型。
按图 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 中选择类 FuelTank,Engine,Passenger以及 Car
在一个已选类上右键点击以打开内容菜单
选择 Harvest菜单
将已总结的类粘贴至分离的创建于步 2 的类图中。
在类间创建聚拢及组成关系。
图 9. 一个类图中的总结类
下一步,在类间创建关联关系,这使您能够在聚拢及组成关系中选择一个。图 10 显示了一个高层的类图。
图 10. 半自动方法产生的 UML 类图的高层抽象
通过将图 10 与图 9 进行比较,您可以创造半自动方法能精确显示类间关系。本图可用于独立设计实行文件,或已有系统远期改进。
着重点:
如果不经由总结,聚拢及组成关系将不能运用于 Rational Software Architect 。
创建一个序列图
序列图是运用最为广泛的 UML 动态建模方法。它致力于识别一个别系的行为。一个序列图常日运用于建模用例,以显示一个别系的方法及功能。
Rational Software Architect 不能从 Java 代码中自动创建一个序列图。下面的步骤会见告您若何去创建一个:
创建一个空缺模型。
创建一个序列图:
在 Blank Model上右键点击。
从 drop-down (context) 菜单中,选择 Add Diagram然后选择 Sequence Diagram(如图 11 所示)。
向序列图添加类。
在两个类间对方法标记进行排序。
保存序列图。
图 11. 创建一个序列图
当您完成创建一个序列图,一个序列文件产生于 Collaboration: Interaction 标签下。 您可以从 Java 代码中向序列图添加类。二者均见于图 12 。
图 12 的紧张事情区显示了一个序列图的例子。
图 12. 产生于 Java 源文件的序列图
一个方法调用意味着信息从调集者传向被调集者。被调集者是方法所有人,它从方法调集者那里收到信息。信息可以是单道的也可以是双道的。一个序列图由在处于一组方法所有者及一个初始发起者之间的,一系列方法标记组成。第一个标记必须从发起第一个方法标记的地方开始。
总结
本篇文章论证了若何通过运用 Rational Software Architect v7.0 ,从 Java 代码中利用逆向工程创建 UML 类及序列图。层级类图代表着一种办法,该办法能创造在一个项目或事情集中,创造全体类间的层次关系。这将有助于开拓职员向一个已有系统扩展或添加新功能。高层的类图能直不雅观显示类间的聚拢及组成关系。这有助于开拓职员扩展或修正一个已有设计。这对开拓职员们开拓大型运用系统意义非凡。序列图显示了在实行特界说务时类间的动态方法标记。这为系统中供应了清晰的运行事理图。