unified modeling language,统一建模语言

UML图的种类、组成元素和含义

用例图
静态结构图:类图、对象图、包图、组件图、部署图
动态行为图:交互图(时序图与协作图)、状态图、活动图
image.png

Entity

class:包含属性和方法
abstract class
interface:只有方法,可以看作只有方法的抽象类,一个类可以继承一个接口,然后实现接口里的方法
annotation
enum
entity
circle 圆圈
() 和circle一样
diamond 菱形
<> 和diamond一样

Relation

Generalization,泛化,继承

空心三角形+实线。箭头指向被继承的类。
PlantUML语法:class1 <|— class2

Realization,Implementation,实现

空心三角形箭头+虚线,箭头指向被实现的接口。
或者圆形+实线,圆形在被实现的接口那边。
PlantUML语法:class1 <.. class2

Dependency,依赖

虚线+箭头,箭头指向被依赖的类。
弱依赖关系,A类在任何地方中临时性地用了B类,称A类依赖于B类。比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用。
PlantUML语法:class1 <.. class2

Association,关联

实线+箭头,箭头指向被依赖的类。
强依赖关系,一个类持续地依赖另一个类,具体有一对多,一对一等。这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量
PlantUML语法:class1 <— class2

Aggregation,聚合

空心菱形+实线+箭头,菱形在比较大的类那边,箭头指向被包含的类。
弱包含关系,A类包含B类,但是两个类的声明周期不一样,如鸟群和鸟,鸟可以离开鸟群。
关联的一种特例,整体和部分的关系,且整体和部分可以分开,A类中有一个B类,通过set方法对B类进行设置
PlantUML语法:class1 o— class2

Composite,组合

黑色实心菱形+实线+箭头,菱形在比较大的类那边,箭头指向被包含的类。
强包含关系,A类包含B类,且A类和B类的生命周期一样,构造A类的时候B类也被被构造(如鸟和翅膀)。
PlantUML语法:class1 *— class2

Inner Class

十字圆圈+实线+箭头,十字圆圈在比较大的类那边
PlantUML语法:class +— innerclass

类图

+: 表示public
-: 表示private
#: 表示protected(friendly也归入这类) UML图 - 图2

画图工具

PlantUML语法

plantUML定义了描述UML图的语法,渲染引擎是Graphviz,使用时可能需要安装Graphviz
https://plantuml.com/zh/class-diagram

类:用关键字abstract或abstract class来定义抽象类。抽象类用斜体显示。 也可以使用interface, annotation 和 enum关键字。

—是竖线,-是横线
..是虚线,—是实线
>是箭头,|>是三角箭头
o是空心菱形,*是实心菱形

puml的注释:
‘单行注释

注释类:
可以使用note left of , note right of , note top of , note bottom of这些关键字来添加备注。
还可以在类的声明末尾使用note left, note right,note top, note bottom来添加备注。

注释类的字段:
note right of 类名::字段名
多行注释,note of …后不要冒号,并且加上end note表示结束注释

布局控制:
参考:https://crashedmind.github.io/PlantUMLHitchhikersGuide/layout/layout.html
left to right direction
up to bottom direction

直线:
为了只绘制水平或垂直直线,可以使用skinparam linetype ortho。
为了使所有直线笔直(但不一定是水平或垂直),可以使用skinparam linetype polyline

分隔符:— .. == __

隐藏空白属性和方法:hide empty members

辅助布局:
可以使用 together 关键词将某些类进行分组: 布局引擎会尝试将它们捆绑在一起(如同在一个包(package)内)
together{
class1
class2
}
你也可以使用建立 隐藏 链接的方式来强制布局
Together2 -[hidden]—> Bar1
Bar1 -[hidden]> Bar2

: 后可以对关系写注释,””可以在类名前写注释

Character Icon for field Icon for method Visibility
- UML图 - 图3 UML图 - 图4 private
# UML图 - 图5 UML图 - 图6 protected
~ UML图 - 图7 UML图 - 图8 package private
+ UML图 - 图9 UML图 - 图10 public

PlantUML+VSCode

vscode插件:PlantUML

wsd文件:

  1. @startuml name
  2. Derived --|> Base
  3. @enduml

安装PlantUML后按alt+D可以渲染.wsd文件(PlantUML文件)
ctrl + shift + P有export current diagram的命令

PlantUML+VSCode+Markdown

vscode插件:Markdown Preview Enhanced, PlantUML
加上Markdown Preview Enhanced可以在markdown的预览里渲染PlantUML,md中用代码格式```puml。
vscode输入tab,点击编辑器界面右下角Space:4调整为tab:4(有没有相应的setting.json的设置选项?)
相关设置:Editor: Detect Indentation: false,”editor.insertSpaces”: false,Editor: Tab Size,Render Control Characters,4参考:https://stackoverflow.com/questions/34174207/how-to-change-indentation-in-visual-studio-code

参考:https://hulinhong.com/2019/12/10/vscode_uml/
https://blog.csdn.net/heqiangflytosky/article/details/77050849
http://www.cxyzjd.com/article/Honnyee/115243923

mermaid

https://zhuanlan.zhihu.com/p/355997933
Typora对画图的支持:https://support.typora.io/Draw-Diagrams-With-Markdown/
类图
```mermaid