去年的8月13日,这个公众号推出了一篇使用 dot 语言绘制流程图的文章。如果有对它了解的读者可能会发现,dot 语言在绘制复杂的流程图的时候语法非常复杂,且需要在程序中进行精心的设置才能保证输出的流程图比较美观,各种组件之间的布局比较合理。此外,dot 语言在绘制时序图、状态图、类图等 UML 图的时候更会耗费极大的精力且结果不是很如人意。从今天开始,将利用两期的文章介绍另外一种功能强大的UML 图的程序设计方法——PlantUML。PlantUML 是一款开源的软件,从它的名字就可以看出它是专门为了绘制 UML 图而存在的。由于它的安装和配置比较复杂,因此本文将会比较详细的介绍其安装与配置方法。一旦做好这些准备工作之后,就可以享受它带来的高效、便捷的功能。

安装与配置

PlantUML 有多种使用方式,在它的官网上,提供了在线编辑的方法,读者如果不想在自己的电脑上折腾的话可以通过下面的网址进入在线编辑的页面:

http://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000

在线编辑只适用于拥有网络连接的环境里,如果处在没有网络的地方,就不能用了。因此还是建议读者可以花些时间在自己的电脑上安装,安装这款软件,需要提前安装好两个依赖软件 java 和 graphviz。前者是运行 PlantUML 的必需条件,后者可以保证绘制所有种类的 UML 图。如果读者之前曾经关注过那篇关于 dot 语言的文章的话,应该会对安装 graphviz 的方法有所了解。不过没看过也没关系,这里会重新进行介绍:

  1. 如果是 Linux 系统,可以使用 apt 包管理工具下载该软件;如果是 Windows 系统,请前往 http://www.graphviz.org/ 网站下载 graphviz。不过,PlantUML 官网提到目前 PlantUML 在 graphviz 2.26.3-2.38 这几个版本下可以正常使用,2.39和2.40在 PlantUML 中无法很好的工作。而目前 graphviz 已经到了2.44版,至于能不能很好的使用,就不清楚了。因此建议读者搜寻 graphviz 2.38版的软件,如果有需要,也可以邮件发送到 watahashiyasumi@qq.com,小编可以提供这一版的软件。
  2. 在我的电脑上,该软件安装在了 D:\SoftWare\Graphviz 文件夹下,在这之后,需要修改系统变量,将 D:\SoftWare\Graphviz\bin 添加到系统变量的 Path 中。
  3. 在环境变量中新建一个 GRAPHVIZ_DOT 的变量,这个变量的值为:D:\SoftWare\Graphviz\bin\dot.exe
  4. 重启电脑,打开 Windows 系统的命令行,输入 dot -v,如果显示 graphviz 的版本号,就表示安装和配置成功了。

下面介绍如何搭建 java 环境,读者需要前往下面的网站下载最新版本的 java SE 安装程序:

https://www.oracle.com/java/technologies/javase-downloads.html

之后安装在合适的地方就可以了,在我的电脑上,安装在了 D:\SoftWare\java 目录下。到这里都比较简单,下面的配置要格外小心:

  1. 在系统变量中新建一个 JAVA_HOME 的变量,变量值是 D:\SoftWare\java;
  2. 将 D:\SoftWare\java\bin 添加到 Path 变量中;
  3. 在系统变量中新建一个 CLASSPATH 的变量,变量值是 .:D:\SoftWare\java\lib,注意,这里的".:"绝对不可以省掉;
  4. 打开 Windows 系统的命令行,输入 java,应该会出现“用法:java [options] [args...]”;
  5. 继续输入 javac,应该会出现“用法:javac ”。如果可以出现第4步和第5步的结果,就说明 java 环境搭建成功了。

然后,需要下载 plantuml.jar 文件,将其放在某个目录下,使用命令行进入这个目录,输入 java -jar plantuml.jar -version 这条命令,应该可以看到安装的 java 版本、graphviz 版本,以及 GRAPHVIZ_DOT 的变量值等信息。到这里,所有的准备工作就都完成了,接着就可以绘制思维导图和流程图了。

思维导图

下面是绘制思维导图的一段代码,之后再对其进行解释和说明。

@startmindmap+ OS++ Ubuntu+++ Linux Mint+++ Kubuntu+++ Lubuntu+++ KDE Neon++ LMDE++ SolydXK++ SteamOS++ Respbian-- Windows 95-- Windows 98-- Windows NT--- Windows 8--- Windows 10@endmindmap

@startmindmap 和 @endmindmap 是程序开始和结束的标志,这与 Fortran 的语法比较相似。+ 和 - 控制思维导图中各个标签相对于第一级标签的方向,+ 表示位于右侧,- 表示位于左侧。符号越多表示层级越深,这段代码可以在 txt 文件中进行编辑,编辑完成后,只需要在命令行输入 java -jar plantuml.jar filename.txt 就可以自动生成 filename.png 文件了。下面是以上这段代码的运行结果:

java 绘制dag_graphviz安装

因为篇幅所限,这里就不介绍如何改变字体与标签的颜色了,详细的内容可以在 PlantUML 官网获取。

流程图

PlantUML 关于流程图部分有两种语法,官方建议使用新语法,旧版本的语法在未来可能会被抛弃,因此下面的代码是建立在新语法上的。

@startumlstartif (Graphviz installed?) then (yes)  :process all\ndiagrams;else (no)  :process only  __sequence__ and __activity__ diagrams;endifstop@enduml

这是关于选择结构的流程图代码,@startuml 和 @endumal 是程序开始和结束的标志,start 和 stop 是流程图开始和结束的标志。可以看到这种语法和我们普通的编程语言的语法非常类似,冒号后面是要执行的语句,如果在某个分支里面有很多冒号的话,会按照冒号后面的语句出现的先后顺序自动排布执行顺序。特别要强调的是,执行语句末尾的分号不可以丢掉,否则编译是会失败的。下面是这段代码的运行结果:

java 绘制dag_java_02

可以看到,__sequence__ 表示在 sequence 下面添加下划线。除了分支结构外,还可以实现 while 循环结构:

@startumlstartwhile (data avalible?)  :read data;  :generate diagrams;endwhilestop@endumal

java 绘制dag_graphviz安装_03

看到这里,是不是感觉这款软件比较好用?它避免了在使用 visio 时不断地拖拉组件,并且会烦恼要将组件放到哪里以及如何对齐的情况。更多关于思维导图和流程图的使用方法可以进入下面的网站学习:https://plantuml.com/zh/。在官网上,还可以下载关于软件使用说明的 pdf 文档。在下一期的文章中,将介绍使用 PlantUML 绘制类图、状态图和时序图的方法。