从 Java 代码逆向工程生成 UML 类图和序列图
yuyutoo 2025-01-03 19:51 1 浏览 0 评论
前言
本文面向于那些软件架构师,设计师和开发人员,他们想使用 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 所示)。
这可以揭示整个工作空间的架构。
图 2 显示了得到一个抽象类图的树状结构所需的剩余步骤:
通过右键点击位于 Abstraction之下的类 Car来打开内容菜单。
显示右边面板中 Car类图,通过选择菜单中的 Show Diagram选项。
通过选择并右键点击右边面板中类图 Car来打开内容菜单。
通过选择内容菜单中 Explore in Browse Diagram选项来产生抽象类图的树状结构。
做完第六步,您将在右边面板中见到 Car类图的树状结构。
结果有以下缺陷:
结构树中被发现类的同类及子类可能被丢失。
除去被发现的抽象类之外,其他类没有属性及操作。
要得到第六步产生的树状结构,还需其他的步骤。您需要增加分离度(如图 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来向当前的图添加剩余的类。
图 5 展示了产生一个继承树类图的过程:
打开并按下 F4以显示类的等级。
选择每一个类并将其添加到类图中。
检查并完成右边的图。
类图以 Rational Software Architect 默认格式产生。有几个有用的修改可以帮助您将图表进行可视化。例如,您可以修改连接路径样式以使用树状样式路径 ,并且您可以通过在工作区右键点击来打开内容菜单然后点击 Arrange all。到此产生的类图要比自动产生的看上去更好。如图 6 所示。
图6中的类既显示了属性又显示了操作。属性及操作显示的好处在于,您可以研究它们共同的状态及行为,从而进一步了解一个已存在系统是如何被实现的,这将有助于系统的再使用。
产生一个高层的 UML 类图
Rational Software Architect 能让您通过从一个Java项目中,选择多个 Java 文件,来产生类图。
在模型搜索器中,使用 Visualize来将它们添加到一个新图或当前的类图中。
如果多个类已经被添加到当前的图中,那么它们之间的关系也将被显示。
图 7 是一个从 Java 代码中自动产生的类图的例子
如图 7 所示,您可以从模型搜索器中选择多个 Java 文件 来将它们在新的类图中可视化。如果您想添加更多的类,您可以选择更多的 Java 源代码来将它们在当前的类图中可视化。本图显示类包括在项目及它们的基本关系中。这有利于在项目中自动发现 UML 类,但是自动发现的关系在这里用处不大。
在图 7 中,几乎所有的关系是 use除去继承关系。使用关系太过平常以至于不能给出有用的设计信息,越来越多的特别的聚集及组成关系被隐藏了甚至当所有的关系在图中都出现过。聚集关系表现为一对多关系当一个类含有其他类的很多项目时,组成关系用于描述一多一关系当一个类仅含有其他类的一个例子时。这个高层的抽象意味着对类之间更精确的关系发现,并为本设计的执行提供了有用的信息。这个类图如果没有抽象关系的细节将不再像以前那样有用。
这里,我们尝试并探索了,以半自动方法产生UML类图的高层抽象方案。 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 的类图中。
在类间创建聚集及组成关系。
下一步,在类间创建关联关系,这使您能够在聚集及组成关系中选择一个。图 10 显示了一个高层的类图。
通过将图 10 与图 9 进行比较,您可以发现半自动方法能精确显示类间关系。本图可用于独立设计执行文件,或已有系统远期改善。
着重点:
如果不经过总结,聚集及组成关系将不能应用于 Rational Software Architect 。
创建一个序列图
序列图是应用最为广泛的 UML 动态建模方法。它致力于识别一个系统的行为。一个序列图通常应用于建模用例,以显示一个系统的方法及功能。
Rational Software Architect 不能从 Java 代码中自动创建一个序列图。下面的步骤会告诉您怎样去创建一个:
创建一个空白模型。
创建一个序列图:
在 Blank Model上右键点击。
从 drop-down (context) 菜单中,选择 Add Diagram然后选择 Sequence Diagram(如图 11 所示)。
向序列图添加类。
在两个类间对方法标记进行排序。
保存序列图。
当您完成创建一个序列图,一个序列文件产生于 Collaboration: Interaction 标签下。 您可以从 Java 代码中向序列图添加类。二者均见于图 12 。
图 12 的主要工作区显示了一个序列图的例子。
一个方法调用意味着信息从召集者传向被召集者。被召集者是方法所有人,它从方法召集者那里收到信息。信息可以是单道的也可以是双道的。一个序列图由在处于一组方法所有者及一个初始发起者之间的,一系列方法标记组成。第一个标记必须从发起第一个方法标记的地方开始。
总结
本篇文章论证了怎样通过应用 Rational Software Architect v7.0 ,从 Java 代码中使用逆向工程创建 UML 类及序列图。层级类图代表着一种方式,该方式能发现在一个项目或工作集中,发现整个类间的层次关系。这将有助于开发人员向一个已有系统扩展或添加新功能。高层的类图能直观显示类间的聚集及组成关系。这有助于开发人员扩展或修改一个已有设计。这对开发人员们开发大型应用系统意义非凡。序列图显示了在执行特定任务时类间的动态方法标记。这为系统中提供了清晰的运行原理图。
- 上一篇:使用 seaborn 绘制 12 类图
- 下一篇:二十三种设计模式之-模板方法模式
相关推荐
- 双十二不用愁了,酷炫的PPT数字滚动动画来了,业绩展示更亮眼
-
试想一下,当在职场路演融资、业绩展示、公开演讲现场使用下面动画特效是不是非常有视觉冲击力呢?但是不是学习了该技巧就能做出震撼感十足的动画特效呢?答案显然是否定的,小编深知PPT的核心能力不在掌握技巧的...
- 终于等到你,Android 首个滚动截图工具:咔咔截屏录屏大师
-
寻觅寻觅,总算在Android平台上找到一款支持滚动截图的应用。从此,分享有趣的QQ、微信聊天记录或网页截图时,再也不用一屏屏截图并手动拼接了。和iOS平台盛名的长图不同,咔咔截屏录屏大师并...
- PPT怎样设置图片无限循环滚动,设置方法很简单,新手一学就会
-
如果我们制作的PPT中的图片是动态图片,会自我进行滚动,是不是会让我们的幻灯片播放的效果变得更加出众呢?这里就向大家介绍设置这一效果的方法。一、插入图片1、依次单击“插入”--“图片”--“来自文件...
- 微信可以发送滚动字幕了,超简单,看一遍就会了
-
大家好,最近在和朋友聊天的时候,发现他给我发的消息能在屏幕上滚动,废话不多说,来看下效果吧。如果聊天的时候,消息都变成这样,是不是更有趣了呢!想要实现这样的效果,方法非常简单,需要用到一款小程序,根据...
- 世界首创!我国开创“车轮”卫星运行模式,隔着云层也能测量地面
-
在航天发射和卫星监测领域,我国又创造了个世界首次——卫星编组以“车轮式编队”运行。今年3月30日18时50分,我国长征二号丁运载火箭在太原卫星发射中心发射升空,成功将宏图一号01组卫星送入预定轨道,...
- 利用滚动条来制作动态图表,不会的看过来
-
现在一份数据,要求根据数据来制作任意3天销量的动态图表。制作过程如下:1、插入----滚动条-----出现“十字”时按住鼠标左键向右拖动绘制滚动条----选中滚动条----右键----设置对象格式--...
- 微信红包数字跳动表情包 微信红包金额随机跳动动图
-
最近微信里面很流行随机红包,当我们打开红包的时候可以看到数字在跳动。其实这是一个套路啦。微信红包数字跳动怎么弄呢?下文中详细教教大家。微信红包数字金额随机跳动图片表情包随机红包怎么发1.首先我们选择一...
- 四屏交错滚动教程,更简单快捷的方法教给你
-
简单的方法制作四屏交错滚动。·先打开醒图软件,进入醒图,选择拼图,需要几张一组就选几张,我选择三张一组,选择三张图片,选择完成。·选择长图拼接,选择纵向拼接,这样三张图片就拼接成一个长图了。·点右上角...
- 创意最美早上好动态图片带字 免打字夏日早安问候语动态鲜花图片
-
1、一万个美丽的未来,抵不上一个温暖的现在;每一个真实的现在,都是我们曾经幻想的未来,愿你爱上现在,梦见未来。早安!2、早安,我永恒的爱人,虽然我尚未起床,但思想已经飞到你的身边来了,忽而高兴,忽而忧...
- #安全提示每日一图#滚动摩擦。
-
#安全提示每日一图#滚动摩擦。????
- 最后一图逼死强迫症,当你上下滚动屏幕时它还会动
-
今天学校食堂加餐,我的炒菜里居然还有肉尼玛这不一样的吗为了游戏,命都可以不要这少年才是人生赢家叔叔你在干什么当女孩子问男朋友“我今天哪里不一样”时貌似两个礼物都不错啊我也不知道为什么,今天沙发君自己就...
- 这个动态甘特图,居然是条件格式制作的,老板看了都夸你厉害
-
Hello,大家好,今天跟大家分享下我们如何在利用Excel制作一个项目进度表,它的本质其实就是一个甘特图,它最大的特点就是表头是动态的,我们可以通过点击【滚动条】让数据动起来,非常适合用于时间跨度比...
- 如何使用OLED实现滚动效果
-
前言这篇文章不过多描述OLED工作原理及驱动过程,仅从实用性出发,如何使用OLED实现滚动效果。这里我们以正点原子战舰板OLED实验例程为基础。(本文配套工程文件,在底部下方供大家学习下载。)对于OL...
- 12月29日问候大家早上好图片动态表情,问候早晨好表情动态祝福语
-
用清晨的阳光沐浴,给你舒展;用清新的空气洗漱,给你舒心;伴清莹的雨露散步,给你舒情;向美好的一天欢呼,给你舒怀,用快乐的词汇凝聚,给你祝福,祝你在绚丽的晨光中走好每一天。朋友,早安!新的一天开始了,带...
- 一款不可或缺的截图软件-ShareX
-
电脑上截图,相信不少小伙伴都是用的微信或QQ内置的功能,其实Windows系统也有自带的截图工具,快捷键Window+Shift+S。...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)