在Emacs中用PlantUML画UML
文章目录
简介
平时需要画 UML 图,用的比较多的就是 StarUML 、 Visio 、 Rational Rose 。其中 StarUML 是跨平台的免费软件,相比其他的收费软件是个不错的选择。
今天要介绍的是PlantUML它是一个开源的用文字来描述的工具,简单来说就是用文字去写出各种 UML 图,而不是用鼠标去拖拽。上面介绍的工具都是通过鼠标去拖拽的方式去画出各种 UML 图。可能由于是个开发的缘故,天生就喜欢纯文本的东西,解析起来方便,占用内存小,改起来也方便,只要一个文本编辑器就可以改。当然我使用的原因是可以在 Emacs 中通过 Org Mode 结合 Org-Babel 使用,生成对应的 UML 图,所见即所得。
这里有一个在线体验的网址,有兴趣可以点击链接,前去体验。
安装
由于我用的 Emacs 是 Spacemacs 所以我只要在 init.el 中加入如下配置,并下载好PlantUML的jar包放到家目录下,重启之后等待包安装好就可以用了。当然你还需要安装 Java 环境,毕竟这是个 Java 写的工具。
|
|
除了在 Emacs 中使用,也可以在其他文本编辑其中使用。比如: Vim 、 VSCode 、 Sublime 、 Notepad++ 中使用。
类之间的关系
我们先来看一下类之间的关系在 PlantUML 中是怎么画的
| 关系 | 画法 |
|---|---|
| 继承 | <|- - |
| 实现 | <|. . |
| 依赖 | <. . |
| 关联 | <- - |
| 聚合 | o- - |
| 组合 | *- - |
我们就根据上表,来画一下类图。这里顺便提一下,如果要类之间的关系加上标识,可以在行尾加上 : 和标识。
由于使用到了中文所以要加上 -charset utf-8 不然中文会出现乱码,我们给当前的代码块指定一个输出的文件,以便查看。
所以 Org-Babel 要用如下格式,下文全部采用这种格式,就不在每个代码中列出了。
|
|
来看一下类图之间的关系是怎么画的,写完之后使用快捷键 C-c C-c 来生成图片,如下图
|
|
可以看到在 PlantUML 中使用 @startuml 开始, @enduml 结尾,中间就是各个关系之间表示了。
成员变量和方法
看完了类之间关系的画法,来看看成员变量是怎么画的
方法一
通过在类名后面添加成员变量或者方法,使用 : 分割,系统会根据有没有 () 来判断是成员变量还是方法。
|
|
方法二
使用 {} 把成员变量和方法括起来,成员变量的类型可以写在字段名前面,也可以写在字段名后面,写在后面的要用 : 分割。
|
|
方法三
显示的使用 {field} 来指定成员变量,或者 {method} 指定方法,不过不建议使用这种方式,这样会把成员变量和方法搞混。因为这样可以把字段设置为方法,也能把方法设置为字段。
|
|
可见性
写 Java 的都知道, Java 有访问属性, PlantUML 也为我们提供了这个功能,来画出访问属性。下面这张表就展示了它们是怎么画的。
| 字符 | 可见性 |
|---|---|
| - | private |
| # | protected |
| ~ | package private |
| + | public |
|
|
如果不想用图形符号表示可见性,可以通过 skinparam classAttributeIconSize 0 来禁用
|
|
抽象与静态的表示
除了可见性之外, Java 还有抽象类,静态方法。我们可以通过通过 {abstract} 来修饰抽象方法或属性。通过 {static} 修饰静态方法或属性。
|
|
接口、注解、枚举的表示
除了类之外,还有接口、注解、枚举,它们分别用 interface 、 annotation 、 enum 表示
|
|
包
包在 Java 中是一个重要的概念,我们不会把所有的类都放到一个包下面(简单的只有几个类除外),这就要求我们需要区分不同类来自哪个包。或者有一种情况是同名的类在不同的包中,有了包才能比较直观看出这个包有哪些类并且能够区分开。包在 PlantUML 中通过 package 关键字来标识。
|
|
改变箭头的方向
使用文字来画 UML 图有一个很大的限制是不能直接拖拽它们之间的方向,这就需要提供摆放这些类位置的功能。 PlantUML 主要提供了如下两种方法。
方法一
类之间默认使用 -- 画竖线,画横线使用 - 。
|
|
我们可以调换 Romm 和 Student 的顺序来达到摆放的目的。
|
|
方法二
使用箭头内部关键字来改变方向,也就是上下左右了。
|
|
备注
有时候我们想要对一个类或者其他东西加一些说明,备注一些信息,我们就会需要用到 PlantUML 的备注功能,下面介绍三种加备注的方法。
在类的末尾添加备注
我们可以在一个类的末尾通过 note left: xxx 为其添加一个在左边的备注。在上边、右边、下边分别是 note top: xxx 、 note right: xxx 、 note bottom: xxx 。这种方式比较适合只有一个方向上需要添加备注的,如果所有方向都需要备注使用这种方式其实会乱掉,它会相对前一条进行位置的摆放。
|
|
为具体的类添加备注
当 UML 中的类有多个的时候,我们需要为某个具体的类添加备注,通过添加 note left of xxx 来在类的某个方向上添加备注。
|
|
浮动的备注
有时候我们可能需要一个独立的浮动备注,不和任何类相关,这时候可以使用 note 来表示。这里有一点需要注意的是最后面需要用 as xxx 取一个别名,不然会报错。
|
|
总结
UML 是一个工具,可以快速帮我们理清楚各个类之间的关系, UML 不止能画类图,还能画时序图、用例图、活动图,是一个非常方便的工具。本文所讲的 PlantUML 是一个用文本制作 UML 的程序,如果你喜欢纯文本不妨试试。