Rational从Java代码逆向工程生成UML类图和序列图_第1页
Rational从Java代码逆向工程生成UML类图和序列图_第2页
Rational从Java代码逆向工程生成UML类图和序列图_第3页
Rational从Java代码逆向工程生成UML类图和序列图_第4页
Rational从Java代码逆向工程生成UML类图和序列图_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持从Java代码逆向工程生成 UML类图和序列图本文面向于那些 软件架构师,设计师和开发人员,他们想使用旧M? Rational? Software Architect 从Java? 源代码来逆向工程生成UML类和序列图。逆向工程经常被用来从已有的源代码中以一种抽象模型UML格式来获得丢失的设计文档,其可以用来研究一个系统的静态结构和动态行为,并用于扩展新的特性到产品。作者详细说明了使用旧M Rational Software Architect进行逆向工程的限制,并阐述了克服这些限制的技术。您将从使用这些技术技巧和窍门中受益,以识别组

2、件,并从 Java类中产生像UML类和序列图这样的高层抽象。软件结构师、开发人员及 测试人员都熟知统一建模语言(UML),该语言适用于文档化用例、类图、序列图和其他 图表。也可以通过其他许多软件辅助工具来帮助软件工程师来完成这些工作,或者是 正向工程或者是逆向工程的。? 正向工程是对一个系统物理结构实现的高层抽象性、逻辑性及独立性设计的传统处理过程。?逆向工程是对一个已存在系统的分析处理,以鉴别它的组成部分及它们的内在联系,从而以高层抽象性来构建一个系统的框架。在大多数情况下,逆向工程用于以抽象的模型UML格式从已存在的源代码中,提取已丢失的设计文件,从而同时可得知一个系统的静态结构及动态行为

3、。类及序列图问题的实质IBM? Rational? Software Architect在很多工业中得以广泛采用,因为它提供了很多的特性以帮助逆向工程师。问题是当您以Java? 代码逆向构建 UML类及序列图时,Rational Software Architect 不能自动地产生有用的 UML 类及序列图。但是已经存在改善 Rational Software Architect输出产物的技术。本篇文章论证了怎样使用这里介绍的技术技巧,从Java代码中识别其组成部分及对UML种类和序列图进行高层的抽象。使用逆向工程,您可以很容易就从正向工程中得到您想要的,本篇文章将介绍在逆向工程以下领域中存在

4、的问题:?发现其抽象类及识别它们的等级结构?产生具有聚合及关联关系的高层抽象性的类图?构建序列图接下来的部分为每个问题提供一个解决方案,并论证了怎样产生有意义的类及序列图。例子向您展示了怎样从一个已给Java项目的源代码中,识别一个系统的继承关系及组成部分,以对 UML类图及序列图进行高层的抽象。注意:本篇文章中的例子产生于Rational Software Architect 7.0 版本识别一个UML类图的继承树文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持继承关系是一种普遍的对象型的模式。它允许一组类共享共同的状态和行为,从而子类可以从父类那里继承共同的 状态和行为。从一个

5、已存在系统中发现整个的继承树结构是相当有用的,因为它能向您揭露在树中什么是顶级类以 及什么是子类。而且,您可以识别一个继承树中有哪些共同状态及行为,以及这些共同行为怎样起作用。您可以在探索过程中以以下三种方式使用Rational Software Architect 。?从一个工作场所或工作集中发现其抽象结构?从抽象结构表中选择一个类从而显示其抽象类图?在一个浏览表中研究树状结构,您会发现显示在Abstraction之下的一系列抽象类。第一步是在一个已存在系统中自动得到其顶级类。这样您就能使用这些类作为切入点以研究继承树中的类。您可以 按以下步骤来完成此项。1. 打开 Rational Sof

6、tware Architect中 Diagram Navigation 视图。2. 在 Object-oriented Pattern 下,右键点击 Abstraction ,然后点击 Discover Architecture (如图 1 所示)。这可以揭示整个工作空间的架构。图1.发现整个工作空间的架构I El ArcHfedLral CHseavery+L . Design Pctterns-.;Object-oriented Pattems'" 一 New Diagrarri File1囹 Cj IrJ+: 一 £ truthbOisccver Archit

7、ecture国 S Svster十 幅 。ctgrai n Show Properties Viewli 罪 My Topic图2显示了得到一个抽象类图的树状结构所需的剩余步骤:3. 通过右键点击位于Abstraction之下的类Car来打开内容菜单。4. 显示右边面板中Car类图,通过选择菜单中的Show Diagram 选项。5. 通过选择并右键点击右边面板中类图Car来打开内容菜单。6. 通过选择内容菜单中Explore in Browse Diagram选项来产生抽象类图的树状结构。做完第六步,您将在右边面板中见到Car类图的树状结构。文档来源为:从网络收集整理.word版本可编辑.欢

8、迎下载支持图2.从整个工作场所中发现其抽象结构* M u w- Imn* Am IW. « WMto e结果有以下缺陷:? 结构树中被发现类的同类及子类可能被丢失。? 除去被发现的抽象类之外,其他类没有属性及操作。要得到第六步产生的树状结构,还需其他的步骤。您需要增加分离度(如图3所示),这决定了从被发现类扩展的层。图3.改变分离度z .尸产/ Z2式那默认度是1,这就是为什么在继承树中一些子类会丢失的原因。在本例中,分离度被增加至2文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持第二个问题是除了在树状结构中被发现的类,其他类没有属性和操作。这不利于使用者出于再使用的目的

9、来研究已存在的普遍模式。接下来的例子将向您展示,怎样识别具有任意属性及操作的整个继承树。3 . 向 Rational Software Architect载入一个 Java 项目。4 .切换至Diagram Navigation 视图,按以上步骤所述,从工作场所中发现其抽象结构。5 .从您感兴趣的第二步中找出一个抽象类。6 .通过寻找模型搜索器中的类,找出等级树状结构类,双击打开编辑器中的类,按下 F4以打开等级树。确保type hierarchy已被选择。7 . 右键点击类,并将其转变为一个可视的类图,通过选择Visualize > Add to New Diagram File &g

10、t; ClassDiagram,如图4所示。8 . 通过右键点击并选择 Visualize > Add to Current Diagram来向当前的图添加剩余的类。图4 .将类可视化为新的类图-1 &-vexie vouakc -"Q 弟btecs图5展示了产生一个继承树类图的过程:9 .打开并按下F4以显示类的等级。10 .选择每一个类并将其添加到类图中11 .检查并完成右边的图。文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持图5.产生一个继承树类图的机理类图以Rational Software Architect默认格式产生。有几个有用的修改可以帮助

11、您将图表进行可视化。例如,您可以修改连接路径样式以使用树状样式路径,并且您可以通过在工作区右键点击来打开内容菜单然后点击Arrangeallo到此产生的类图要比自动产生的看上去更好。如图 6所示。文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持图6.带有属性的继承树状图及树状路径连接,及旧etas”Q PfeZr 优Q ; Ro注俗 bn "箕七函。怛C)e g电西口包良d ()"3Cbm*Q Ofc : Engnpassengers: HasiMapo tank.: FuelTank« ()v qptP之石&ng§rQ 口口匚灼:盯

12、 getTopSpeed) r«Ful ( " 3 drSPass? rg?r ( Jh remotePawenoer () StdrtQr ) rtqpQrj jCfas$*G PogoS tKk上 borgR>L& ftaK卡 ac ease Borgate ()g de treaseBomQRate () e actaterare ()« glee )*Jbv? Ch55»0 Bbcyde NUMgER QFjGERR£: n: TOP卯回;fl(J玳o currents ear : Mt修 wGw j9 doA'r

13、iGr ( w accelerate ( )* bnke )«Java Cta 如G 5pOrt5GarL-T8-SP隹口 :归:曾双JJ&SSEMGE居:联 mNhjel:脸口0艮:加嬴n BRAKE FATQR ; float MM阵中N )* EM。h axFue Capa cry ()v gttPassen gerCa nacity () gtTopSpeed ()*Jaw Class*O FmilyCar 1. TOP_SP6ED_M4H :加at- MAX P将汩GERS :式- MAX FUEL 二 Fhn a肛匚皿TDT :血玳 u B 朋 3 F 鸟 t T

14、QR :巾 CKT accelerate () brak (; g妃tMixFuwQmtQ J ) OtPatsen QrCstracrtyt ) g就To口()图6中的类既显示了属性又显示了操作。属性及操作显示的好处在于,您可以研究它们共同的状态及行为,从而进 一步了解一个已存在系统是如何被实现的,这将有助于系统的再使用。产生一个高层的UML类图Rational Software Architect能让您通过从一个 Java项目中,选择多个 Java文件,来产生类图。1 .在模型搜索器中,使用 Visualize来将它们添加到一个新图或当前的类图中。如果多个类已经被添加到当前的图中,那么它们

15、之间的关系也将被显示。图7是一个从Java代码中自动产生的类图的例子文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.图7. 一个自动产生的类图* !-% H i.a ow IJ» .1.t I StaNtrKUMXi!LJ)H,r 匕 <. r - 嘛1 聃2* *T»w»MWKT> "p 1-elira.: ftMu*fl / i*F * 3f EHW士 pTtal RigE-3 iioh brctaapr.»-.HKW W1*1 IQ Ann 4 j RLJl,>w hju . -L1GporaaLwi-.即

16、明1 i-Rj- J. 1fcrf'e.i-.rMtea mq>QBMEk«“MW -二r 1Ln»*«d4* FI9444*1) AwnCu ( I ghH li口 PiBfKwl-班J 也UH色显蛇JH', t M厂 Z KriiTKI : 1 rMisa fMwTuri£k»*«pIS' lip HF>4 )s wtr H4M-M4 I a«T#5M fl « A|4k41 n rt10P-49H*d) UrtfrTfW O£> I) 门Gfvuft4wE

17、供事困Z & 凰咖如图7所示,您可以从模型搜索器中选择多个Java文件来将它们在新的类图中可视化。如果您想添加更多的类,您可以选择更多的Java源代码来将它们在当前的类图中可视化。本图显示类包括在项目及它们的基本关系中。这 有利于在项目中自动发现 UML类,但是自动发现的关系在这里用处不大。在图7中,几乎所有的关系是 use除去继承关系。使用关系太过平常以至于不能给出有用的设计信息,越来越多 的特别的聚集及组成关系被隐藏了甚至当所有的关系在图中都出现过。聚集关系表现为一对多关系当一个类含有其 他类的很多项目时,组成关系用于描述一多一关系当一个类仅含有其他类的一个例子时。这个高层的抽象意

18、味着对 类之间更精确的关系发现,并为本设计的执行提供了有用的信息。这个类图如果没有抽象关系的细节将不再像以前 那样有用。这里,我们尝试并探索了,以半自动方法产生UML类图的高层抽象方案。UML类以和以前同样的技术发现,并且类间的关系由人为指定。高层的抽象方案基于研究已有源代码所必须的知识。图8的例子显示了,怎样应用这个方法来得到高层的UML类图。文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持图8.使用UML模型向导建立一个空白模型为了得到一个高层的类图,您必须首先建立一个空白模型。2 .按图8所述步骤建立一个新的空白模型:A. 在文件种类下,选择 UML Modeling 。B.

19、 在模板下,选择Blank Model 。C. 在文件名区域,输入 Blank Model 。D.对于目的文件夹,输入 example。E. 默认的图检查框 "Create a default diagram in the new model" 应该被检查F. 对于默认的图不类,选择 Freeform. Diagram 。文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持G.点击 Finish 。接下来的一步是从自动生产类图中总结选择的类。Rational Software Architect中的总结,能让您从一个类中拷贝一个类并粘贴到另一个类图中,这必须在一个空

20、白模型中完成。如果您将总结的类粘贴到同一个类图,或本空白模 型以外另一个类图中时,那么该类的属性和功能将丢失。3 .通过图9所示的步骤,从自动生成的类图中总结已选择的Java类:A. 从 classdiagram2.dnx 中选择类 FuelTank , Engine , Passenger 以及 CarB.在一个已选类上右键点击以打开内容菜单C. 选择Harvest菜单4 .将已总结的类粘贴至分离的创建于步2的类图中。5 .在类间创建聚集及组成关系。图9. 一个类图中的总结类 i«Gttr () CoiGt jr (J itcerite () 2*。3产町3 ieTa-5wnge-

21、pa:t,i (; fief "Tuf «ir nrfl f 1-erw RttJM OH* G Dbvd#加Q CH14* 0。才。aigiuRu痴而:Mmm .a.; j宝apfc即? f i sErgineALrng (二0 K - r M *"'.l-_hrJLJTi:瓦丁5CUif e-ltGtSi" : r*口Jam E丽 tng«eD修配HfUl:脂X匚 paf u响匕其艰匚,:% 至 打臂:伸飞c)« adlcFje11.) WEy*3I)唬Fb ;J tfU)二JW C toiG IrteArt tpeeU

22、: O MtZE (>兴石口金典c ;G Peeostjck3 tK>ripAvtt : fiwt口 rpeaseBennie ( CtcieseBanijpRacf (凯甘嗣t)* lX田粘二fyfX 旧之 from PrtijKl:w 0纤Grirnibcarit力那三p_<l , t : 5 ”汇*4比三濡匕石;力工 h*5£ :'w=肌 JF±f 1白总:Ua: - EW】i气 3 fcj:« ac«it<d:e !: b ik6 () *M面cfwCipHh '9 tP®5ei?f<apa

23、ctr ) irhAfT-vif''iflrwfl f 、Frrc1 i!SrK5>电 Frwrw l中.冷¥/ CW* 自 sportiCdn _"庄b:%状 二"HgGE«j:E _EMEL ;ggj正V港:益T F彘L J h10显示了一个高层的类图下一步,在类间创建关联关系,这使您能够在聚集及组成关系中选择一个。图文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持图10.半自动方法产生的 UML类图的高层抽象0 FuefTankn忙障并11世! 支口 mFustCapacty: Float好 FuelTank )

24、addFuel ( ) remove Fuel () fiEmpty t)* isPijSI ()1-tarkQ Passengera name : String '/ getName () setNam& ()-Ar-passengersO Engine二m g : b >0 8之 n/ staitEngine () stopEngine () isEn in e Running (1-engine1© Car口 nghie ; Engine口 pa55 rrgers : H&shMsp口 tank: FuelTank getMaxFueCapacity () getPa&tengerCapacitv ;Q getTopSpeed)宿 reFueI()/ addPassenaer()? remcvePassengr () startCar ()h etopCar ( )通过将图10与图9进行比较,您可以发现半自动方法能精确显示类间关系。本图可用于独立设计执行文件,或已有系统远期改善。着重点:如果不经过总结,聚集及组成关系将不能应用于Rational Software Architect 。创建一个序列图序列图是应用最为广泛的 UML动态建模方法。它致力于识别一个系统的行为。一个序列图通常应用于建模用例, 以显示一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论