# 1、安装plantuml
(1)plantuml官网下载msi文件进行安装(建议按默认目录安装),安装完毕后,进入程序的bin目录,运行`dot -c`命令完成安装:
![](https://img.kancloud.cn/8f/59/8f592256467d6be10b2ec99b99d89422_331x97.png)
注意设置好环境变量:GRAPHVIZ_DOT:C:\Program Files\Graphviz 2.44.1\bin\dot.exe
以及Path中追加:C:\Program Files\Graphviz 2.44.1\bin
(2)vs code安装插件`PlantUML`和`Graphviz Preview`
(3)vs code设置,在“设置”-->扩展-->plantuml设置,打开json,设置:
~~~
"window.zoomLevel": 2,
"go.formatTool": "goimports",
"editor.fontSize": 15,
"graphvizPreview.dotPath": "C:/Program Files/Graphviz 2.44.1/dot.exe",
"plantuml.commandArgs": [
]
~~~
(4)使用
vs code打开puml文件,通过键盘Alt+D即可调出plantuml,预览uml图。
右键单击puml文件,弹出菜单中选择“导出工作区图表”,即可将类图导出成各种格式的文件。
# 2、安装goplantuml
goplantuml可以将go项目导出为puml文件,供plantuml生成类图
https://github.com/jfeliu007/goplantuml
安装方法:
~~~
go get github.com/jfeliu007/goplantuml/parser
go get github.com/jfeliu007/goplantuml/cmd/goplantuml
~~~
使用方法:
~~~
goplantuml c:/go/src/sd-chain/blockchain7 > ClassDiagram.puml
~~~
以上方法将项目blockchain7导出为ClassDiagram.puml,然后可以通过plantuml查看了(在vs code插件中查看)。
# 3、类图
在类图中一共包含了以下几种模型元素,分别是:类(Class)、接口(Interface)、依赖(Dependency)关系、泛化(Generalization)关系、关联(Association)关系、聚合关系(Aggregation)、组合关系(Composition)和实现(Realization)关系。
一般关系表现为**继承或实现关系**(is a),关联关系表现为**变量**(has a ),依赖关系表现为函数中的**参数**(use a)。
![](https://img.kancloud.cn/e5/b8/e5b83e5026288e701f6d74ead873ba6e_220x154.png)类图中的关系表示
**泛化(Generalization)关系**:表示为类与类之间的继承关系,接口与接口之间的继承,类对接口的实现关系。
表示方法: 用一个空心箭头+实线,**箭头指向父类**。
![](https://img.kancloud.cn/64/19/641917ebb05929828113297e7b46d313_380x186.png)
**实现(Realization)关系**:一般来讲实现关系是针对类与接口之间的关系而言的。在UML类图中,实现关系用空心三角形+虚线来表示。**箭头指向接口**
![](https://img.kancloud.cn/ca/84/ca8455512fe53de8abbb0e815ce98353_275x192.png)
**关联关系(Realization)**:类与类之间的联接,它使一个类知道另一个类的属性和方法。
表示方法:用 实线+箭头, **箭头指向被使用的类**。
![](https://img.kancloud.cn/49/88/4988a694dc1c82beaa8af964fd1705a4_257x60.png)
**聚合关系(Association)**:是关联关系的一种,是强的关联关系。聚合关系是整体和个体的关系。关联关系的两个类处于同一层次上,而聚合关系两个类处于不同的层次,一个是整体,一个是部分。聚合关系是类之间的一种较弱的耦合关系,如一个字符串数组和一个字符串就是一种聚合关系。
表示方法:空心菱形+实线+箭头,**箭头指向整体**。
![](https://img.kancloud.cn/5e/df/5edfa609bb1432a10191a902444065a8_276x59.png)
**组合关系(Aggregation)**:是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期,组合关系不能共享。如一只青蛙有四条腿,青蛙类与青蛙腿类之间的关系就是组合关系。
表示方法:实心菱形+实线。**实心菱形指向为组合类**。
![](https://img.kancloud.cn/ec/c7/ecc74cc7ae145ae910e65232c58ab4ac_276x173.png)
**依赖关系(Dependency)**:是类与类之间的连接,表示一个类依赖于另一个类的定义。例如如果A依赖于B,则B体现为局部变量,方法的参数、或静态方法的调用。
依赖关系是指两个或多个类之间的依存关系,如植物类依赖于土壤类。 依赖关系还可以再细分为5种类型,分别是绑定(Binding)依赖、实现(Realization)依赖、使用(Usage)依赖、抽象(Abstraction)依赖和授权(Permission)依赖。
表示方法:虚线+箭头 **箭头指向被依赖的一方**,也就是指向局部变量。
![](https://img.kancloud.cn/33/f1/33f1ec25d5ebcbbb1ded38049808c9e1_380x174.png)