unified modeling language,统一建模语言
UML图的种类、组成元素和含义
用例图
静态结构图:类图、对象图、包图、组件图、部署图
动态行为图:交互图(时序图与协作图)、状态图、活动图
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也归入这类)
画图工具
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 |
---|---|---|---|
- |
private | ||
# |
protected | ||
~ |
package private | ||
+ |
public |
PlantUML+VSCode
vscode插件:PlantUML
wsd文件:
@startuml name
Derived --|> Base
@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