精华内容
下载资源
问答
  • 代码来逆向工程生成UML 类和序列图。 逆向工程经常被用来从已有的源代码中以一种抽象模型 UML 格式来获得丢失的设计文档,其可以用来研究一个系统的静态结构和动态行为,并用于扩展新的特性到产品。作者详细说明...

    本文面向于那些软件架构师,设计师和开发人员,他们想使用

    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 所示)。

    这可以揭示整个工作空间的架构。

    06638c45084c5b11045fa6bd69b69978.png

    图 1.发现整个工作空间的架构

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

    通过右键点击位于 Abstraction之下的类 Car来打开内容菜单。

    显示右边面板中 Car类图,通过选择菜单中的 Show Diagram选项。

    通过选择并右键点击右边面板中类图 Car来打开内容菜单。

    通过选择内容菜单中 Explore in Browse Diagram选项来产生抽象类图的树状结构。

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

    06638c45084c5b11045fa6bd69b69978.png

    图 2. 从整个工作场所中发现其抽象结构

    结果有以下缺陷:

    结构树中被发现类的同类及子类可能被丢失。

    除去被发现的抽象类之外,其他类没有属性及操作。

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

    662ec42218bae6b41fa7c49330a10182.png

    图 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来向当前的图添加剩余的类。

    7063c49c8634bbad74938b6a3040b214.png

    图 4 . 将类可视化为新的类图

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

    打开并按下 F4以显示类的等级。

    选择每一个类并将其添加到类图中。

    检查并完成右边的图。

    6904fc1e1dcd510e0081aa383ad3b7ec.png

    图 5. 产生一个继承树类图的机理

    类图以 Rational Software Architect 默认格式产生。有几个有用的修改可以帮助您将图表进行可视化。例如,您可以修改连接路径样式以使用树状样式路径

    ,并且您可以通过在工作区右键点击来打开内容菜单然后点击 Arrange all。到此产生的类图要比自动产生的看上去更好。如图

    6 所示。

    2732d287a2ecd9acefc69c34944d301f.png

    图 6. 带有属性的继承树状图及树状路径连接

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

    产生一个高层的 UML 类图

    Rational Software Architect 能让您通过从一个Java项目中,选择多个 Java

    文件,来产生类图。

    在模型搜索器中,使用 Visualize来将它们添加到一个新图或当前的类图中。

    如果多个类已经被添加到当前的图中,那么它们之间的关系也将被显示。

    图 7 是一个从 Java 代码中自动产生的类图的例子

    6c988c940f4ebe76588255a3eb74527a.png

    图 7. 一个自动产生的类图

    如图 7 所示,您可以从模型搜索器中选择多个 Java 文件 来将它们在新的类图中可视化。如果您想添加更多的类,您可以选择更多的

    Java 源代码来将它们在当前的类图中可视化。本图显示类包括在项目及它们的基本关系中。这有利于在项目中自动发现

    UML 类,但是自动发现的关系在这里用处不大。

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

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

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

    a509904fa84f533fed73fbcfaa65dcdc.png

    图 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 的类图中。

    在类间创建聚集及组成关系。

    4fb70114b398c7bc627be8a613e8e7aa.png

    图 9. 一个类图中的总结类

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

    cb38731e361eaa51856fb5a4a7eaea59.png

    图 10. 半自动方法产生的 UML 类图的高层抽象

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

    着重点:

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

    创建一个序列图

    序列图是应用最为广泛的 UML 动态建模方法。它致力于识别一个系统的行为。一个序列图通常应用于建模用例,以显示一个系统的方法及功能。

    Rational Software Architect 不能从 Java 代码中自动创建一个序列图。下面的步骤会告诉您怎样去创建一个:

    创建一个空白模型。

    创建一个序列图:

    在 Blank Model上右键点击。

    从 drop-down (context) 菜单中,选择 Add Diagram然后选择 Sequence

    Diagram(如图 11 所示)。

    向序列图添加类。

    在两个类间对方法标记进行排序。

    保存序列图。

    b4e91f685d53fc13cb9faa206ecfcc07.png

    图 11. 创建一个序列图

    当您完成创建一个序列图,一个序列文件产生于 Collaboration: Interaction 标签下。

    您可以从 Java 代码中向序列图添加类。二者均见于图 12 。

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

    dad0d5d7bdc41a386ed3c0726c1bcefb.png

    图 12. 产生于 Java 源文件的序列图

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

    总结

    本篇文章论证了怎样通过应用 Rational Software Architect v7.0 ,从 Java

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

    展开全文
  • 由python代码生成UML类图

    千次阅读 2015-10-28 22:17:25
    1、首先安装graphviz,一个画图工具,地址为: ... 2、pyreverse能方便的生成uml类图,pylint里自带了pyreverse这个工具。使用pip安装pylint pip install pylint 3、使用,可以参考的命令为

    1、首先安装graphviz,一个画图工具,地址为:

    http://www.graphviz.org/pub/graphviz/stable/windows/graphviz-2.28.0.msi
    2、pyreverse能方便的生成uml类图,pylint里自带了pyreverse这个工具。使用pip安装pylint

    pip install pylint

    3、使用,可以参考的命令为,ccc为存放代码的目录

    pyreverse -ASmy -o png ccc/

    展开全文
  • 代码如下图所示,我只想知道各类之间,各类与接口之间,以及主运行类与各类和接口之间的关系要如何表示。我知道FederationClass继承StarShip,GalaxyClass和CostitutionClass分别继承...代码如下图所示,我只想知道...

    代码如下图所示,我只想知道各类之间,各类与接口之间,以及主运行类与各类和接口之间的关系要如何表示。我知道FederationClass继承StarShip,GalaxyClass和CostitutionClass分别继承...

    代码如下图所示,我只想知道各类之间,各类与接口之间,以及主运行类与各类和接口之间的关系要如何表示。我知道FederationClass继承StarShip,GalaxyClass和CostitutionClass分别继承FederationClass。那么虽然FederationClass implements WrapDrive这个接口,但是如果它没有马上对它进行实现,需要表示关系吗?下面的GalaxyClass对接口进行了实现,是不是两个都要分别标示出来?

    再一个,主类分别对三个类进行了实例化,但后两个涉及多态,这应该怎么表示?是组合还是聚合关系?后面的方法调用是不是不需要在uml中表示出来?

    问题有点多,但都是我关心的问题,希望有大神能帮忙解答!谢谢!!

    class StarShip{

    String shipName = "UFO";

    public StarShip(){

    }

    protected StarShip(String shipName){

    this.shipName = shipName;

    }

    }

    interface WarpDrive{void goToWarp();}

    class FederationShip extends StarShip implements WarpDrive{

    public String captainsName = "Picard";

    public void goToWarp(){

    System.out.println("Warp Factor 8");

    }

    }

    class GalaxyClass extends FederationShip{

    public void goToWarp(){

    System.out.println("Make it so!");

    }

    }

    class CostitutionClass extends FederationShip{

    String costiName;

    static String captainsName = "Kirk";

    public CostitutionClass(String shipName){

    costiName = shipName;

    System.out.println("Building " + shipName);

    }

    }

    public class F14A10ObjekterzeugungMitVererbungStarShipSimulation {

    private static StarShip[] ncc_1701;

    private static int a = 0;

    static int d = 3;

    public static void main (String[] args){

    ncc_1701 = new StarShip[4];

    ncc_1701[a] = new CostitutionClass("Enterprise");

    ncc_1701[d] = new GalaxyClass();

    ((FederationShip) ncc_1701[a] ).goToWarp();

    ((FederationShip) ncc_1701[d] ).goToWarp();

    }

    }

    展开

    展开全文
  • IDEA怎么生成UML类图

    万次阅读 多人点赞 2018-06-20 09:39:09
    最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图...本着怀疑的态度百度了一下,果然IDEA还是很强大的,这个插件都是自带的,接下稍微讲述如何利用IDEA生成UML类图的教程。 ...

    最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图的优秀软件,比如ProcessOn(可视化编辑)、draw.io(可视化编辑)、PlantUML(代码生成),其实看到这里我就想IDEA中有没有像PlantUML一样的自动生成的插件,本着怀疑的态度百度了一下,果然IDEA还是很强大的,这个插件都是自带的,接下稍微讲述如何利用IDEA生成UML类图的教程。

    说之前先说一下Diagram这个单词,意思是图表; 示意图; 图解; [数] 线图的意思。

    • 打开设置 File->Setting或windows下按Ctrl+Alt+S
    • 在搜索框中输入Diagram,如下图:

    如上所示,我们主要关心的只有Java Class Diagrams下面的几个单选框,分别对应红字部分,一般的UML类图只需要知道成员变量、构造器和方法(前面三个),其他的随意,设置好了之后我们就来演示一下,

    • 选择需要的类文件,在编辑器中打开它
    • Ctrl + Shift + Alt + UCtrl + Alt + U或右键选择,生成类Uml关联图,如下图:

    上面的是类的UML图,下面的support包的UML图:

    局限性:虽然这个很是方便,但是也有他自己的局限性,首先这个功能只能是根据类来自动生成的,所以对于设计类的时候就不行了,还是需要正规的UML图软件,还有就是对于专业的UML软件来说,这种自动生成的东西可能表达并不是非常的准确直观,特别是对于UML图有严格要求的人来说,显得格外重要。

    展开全文
  • 如何从JAVA代码生成UML类图

    千次阅读 2010-12-23 12:07:00
    推荐使用ModelGoon!它是一个Eclipse插件,用于基于UML图的模型设计,以及逆向工程(即从已有源代码生成类图等,以作为代码分析或者文档使用)。
  • 使用ModelGoon。 ...安装到Eclipse: ...   在Eclipse中使用: ...ModelGoon Diagrams文件夹项单击打开 ,可以建立class diagram,interaction ...关于顺序图的生成,是在类图中的类方法名上点击右键,选择show sequence即可生成
  • 否则生成类图不自动排列成可阅读模式(连接关系正确,但图非常乱,都叠在一起了)。即,如图:一定要在【proj文件夹】下没有【proj类图】的情况下操作。         弹出的对话框,安自己的需求调整...
  • 代码我已经写完了,但老师...我想从UML生成代码的工具都有了,我想VS2010应该可以从c++代码生成UML图吧。 可是我不知道怎么做, 麻烦大侠告诉我 要点击哪个菜单。 或者要装什么插件吗? 或者用其他软件业可以
  • 最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML...本着怀疑的态度百度了一下,果然IDEA还是很强大的,这个插件都是自带的,接下稍微讲述如何利用IDEA生成UML类图的教程。说之...
  • myelipse里有UML1和UML2两种方式...建立Test工程,如下图,uml包存放uml类图package com.zz.domain;public class User {private int id;private String name;public int getId() {return id;}public void setId(int...
  • 最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML...本着怀疑的态度百度了一下,果然IDEA还是很强大的,这个插件都是自带的,接下稍微讲述如何利用IDEA生成UML类图的教程。说之...
  • 多个文件生成UML类图

    2020-07-30 11:13:05
    代码实时显示UML类图》中介绍了自动对当前编辑的文件生成类图,这里介绍另外一种生成UML类图的方法:解析多个源码文件,生成UML类图。该方法的一个作用就是: 比如对一个包下的所有文件生成类图,展示它们之间的类...
  • 使用UMLDoclet和PlantUML从源码生成UML类图有时候读别人的源码时,搭配UML图会更加方便易懂,所以研究了一下通过Java代码生成UML类图的方法。工具介绍:GraphvizGraphviz 是一款由 AT&T Research 和 Lucent Bell...
  • 类及序列图问题的实质识别一个UML类图的继承树产生一个高层的UML类图创建一个序列图总结致谢参考资料 本文面向于那些软件架构师,设计师和开发人员,他们想使用IBM:registered:Rational:registered:Software ...
  • myelipse里有UML1和UML2两种方式...建立Test工程,如下图,uml包存放uml类图package com.zz.domain;public class User {private int id;private String name;public int getId() {return id;}public void setId(int...
  • coming/article/details/80741717最近,在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图的优秀软件,比如ProcessOn(可视化编辑)、draw.io(可视化编辑)、PlantUML(代码生成),...
  • eclipes根据Java代码自动生成UML类图

    万次阅读 2018-10-10 00:17:58
    比起敲代码,设计UML图的过程真的繁琐,既然繁琐,肯定就有插件可以一键生成! 然后百度发现果然有好多插件,抛去一部分版本太老的插件和教程繁琐的之后,我选择了modelgoon插件。 下载地址:  链接:...
  • 用VS生成类图吧,只能生成一堆框,只有一些小的类关系有箭头表示。远远不能满足要求。下面介绍建模工具EA来生成类图。1、新建类图(例如ClassModel),没用的图表删除,ctrl+s保存。2、选中类图(ClassModel),shift+...
  • idea------通过自带插件生成uml类图

    千次阅读 2019-05-29 22:35:33
    1.idea通过代码生成uml类图 Diagram图表; 示意图 File->Setting 输入Diagram 然后 选一个类 找一个类文件 点击右键 即可得到 问题:这两个选项有啥不同 目前我还 不...
  • 从Java 代码逆向工程生成UML 类图和序列图_雷厉风行_百度空间 2011年6月15日 ... 从Java 代码逆向工程生成UML 类图和序列图收藏本文面向于那些软件架构师,设计师和 开发人员,他们想使用IBM® Rational® ...
  • 用VS生成类图吧,只能生成一堆框,只有一些小的类关系有箭头表示。远远不能满足要求。下面介绍建模工具EA来生成类图。1、新建类图(例如ClassModel),没用的图表删除,ctrl+s保存。2、选中类图(ClassModel),shift+...
  • 本文面向于那些软件架构师,设计师和开发人员,他们想使用 IBM® Rational® Software Architect 从 Java™源代码来逆向工程生成 UML 类和序列图。 逆向工程经常被用来从已有的源代码中以一种抽象模型 UML 格式来...
  • 本文面向于那些软件架构师,设计师和开发人员,他们想使用 IBM® Rational® Software Architect 从 Java™ 源代码来逆向工程生成 UML 类和序列图。 逆向工程经常被用来从已有的源代码中以一种抽象模型 UML 格式来...
  • myeclipse 生成 UML类图

    千次阅读 2017-07-06 15:51:59
    Myeclipse中把java代码导成UML类图   1、右键点击项目名称,选择New-------àUML2 Model   2、给类图命名   3、导成类图 1)如果要把整个项目导成类图,则把整个项目拖到类图中 2)如果要把单个类导...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 610
精华内容 244
关键字:

代码生成uml类图