一、UML
UML是统一建模语言,是一种可视化的语言。本系列内容拟通过Umbrello工具一起来学UML。正向逆向工程均以C++代码为例。
(本文第一次上传图片时图片都在本地,所以读者们一直看不到图片,这里我重新整理了一下这篇文章)
二、UML工具对比
我所接触到的工具以及其各自的特性如下:
工具名称 优点 缺点
Rational Rose 功能全,可以正向和逆向工程 收费,且其比较庞大
Visio 简单 收费,无正向和逆向工程
VS2008 可以逆向工程 收费,逆向工程也不是很完美,所能表达的关系太少
(貌似只能表达泛化关系,即继承关系)
UML Start 免费,可以正向工程 无逆向工程
Umbrello 免费,跨平台,可正向逆向工程 Windows下安装稍微有点复杂
这里的“正向工程”是指通过UML图来生成代码,逆向工程是指通过代码生成UML图。
三、Umbrello的安装
在Linux安装应该是比较方便的,我在Fedora中用过。这里说说Windows下的安装。
1. 下载
http://windows.kde.org页面点击“Download Installer ”即可下载KDE。基于KDE可以在Windows下跑Linux应用。
2. 安装KDE
安装过程中步骤为:
a. 选择"Install from Internet",如上图。
b. 选择安装路径,如上图。
c. 安装模式选择终端用户,编译器模式我选择的是MSVC2008,如上图。
d.选择临时现在的文件存储的路径,如上图。
e. 选择联网方式,我这里选择的是直接接入,如上图。
f. 选择一个站点来下载安装文件(我选的jp,速度还可以),如上图。点击下一步之后入进入下图,如果没有看到任何内容,可以返回这一步重新选择一个站点,如上图。
g. 我选择的stable latest,如上图。
h. 选择kdesdk,可以看到后边括弧中有umbrello,如上图。其实,在4.3版本中是单独的一个umbrello,大家可以根据自己选择的kde版本,在列表中找一下。之后点击下一步、下一步、完成、即可完成安装。
安装好之后可以在开始->程序中看到上图。
点击Umbrello,启动后窗口如上图,大功告成。
四、Umbrello设置
点击Settings->Configure Umbrello.
a. 默认语言,General->Default Language中,即启动Umbrello之后默认的语言;
b. 支持的语言,Code Generation->Language中,若默认语言为C++,而你想生成Java,那么在这里选择。同时可以看到Umbrello支持的语言;
c. 生成代码的路径,Code Generation->Folders,这个很重要,如果是一个不存在的路路径,就如法生成代码。
五、Umbrello初体验
a. 点击上图中的“类图”(第3行第6个图标),生成一个名为Base的类,然后再创建一个名为Derive的类。
b. 点击上图中的“实现关系”(第3行第14个图标),然后先点击Derive类,再点击Base类,可以看到如下图的UML类图:
该图表示类Derive集成了Base,Derive实现了Base。
c. 正向工程。点击工具栏Code->Code Generation Wizard,然后选择要生成代码的类。完成之后可以在Settings中设置的代码路径中看到四个文件,Base.h, Base.cpp, Derive.h, Derive.cpp。
如果点击工具栏Code->Generate All Code,则会直接生成所有类的代码。
d. 逆向工程。
删除左边UML Model中的Logical View中的Base和Derive,并且删除绘图区域中的图。
右击上图中的Logical View,选择Import Class,选择刚才生成了Base和Derive类的.h文件。这时又可以看到Logcal View中有了Base和Derive两个类,将这两个类分别拖动到绘图区。Umbrello自动帮我们生成了类图以及类之间的关系。
六、小节
认识了一款优秀的UML建模工具——Umbrello,后续将基于该工具来介绍UML。此外,学习使用Umbrello,有以下几个好处:
1. 他是开源免费的,可以让我们摆脱对收费软件的依赖
2. 本身出身与Linux平台,我们知道如何在Windows上跑Linux下的一些程序
3. 等于是学习了一款跨平台的工具,以后我们在Linux下可以很顺手的用Umbrello进行建模
一起来学UML(1)——UML建模工具Umbrello初体验
一起来学UML(2)——类图和泛化
一起来学UML(3)——类间的依赖、关联、聚合、组合关系
一起来学UML(4)——类图中的多重性(Multiplicity)
一起来学UML(5)——用例图