本文介绍如何使用 PlantUml 插件来画 Uml 图
一、PlantUml简介
PlantUML 是一个可以快速编写各种图表的工具,可以通过安装 Intellij Idea 或者 Vs Code 插件来画图,也可以在线编辑,链接为:
https://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000
类图示例文档链接为:
https://plantuml.com/zh/class-diagram
动动发财小手,关注 + 点赞 + 收藏不迷路。
二、类与类之间关系汇总整理
- 依赖关系(Dependency)
单向,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类,是一种“use a”关系
如果A依赖于B,则B表现为A的局部变量,方法参数,静态方法调用等
局部变量
public class Animal {
public void drink() {
Water water = new Water();//局部变量
....
}
}
方法参数
public class Animal {
public void drink(Water water) {//方法参数
....
}
}
静态方法调用
public class Animal {
public void drink() {
Water.drink();//静态方法调用
....
}
}
- 关联关系(Association)
单向或双向(通常我们需要避免使用双向关联关系),是一种"has a"关系,如果A单向关联B,则可以说A has a B,通常表现为全局变量。
单向关联:
public class Person {
public Phone phone;
public void setPhone(Phone phone) {
this.phone = phone;
}
public Phone getPhone() {
return phone;
}
}
双向关联:
public class Man {
public Women women;
public void setWomen(Women women) {
this.women = women;
}
public Women getWomen() {
return women;
}
}
public class Women {
public Man man;
public void setMan(Man man) {
this.man = man;
}
public Man getMan() {
return man;
}
}
- 聚合关系(Aggregation)、组合关系(Composition)
这两个关系我们放在一起,因为他们看似十分的相似,但是却有着本质的区别。
聚合
不同的工种聚合在一起变成了施工人员,施工人员包含工程师、电工、木工等,是整体和个体之间的关系,即 has-a 的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期。即施工人员可以不存在,但是工程师仍然存在。
public class Builders {
public Engineer engineer;
public void setEngineer(Engineer engineer) {
this.engineer = engineer;
}
public Engineer getEngineer() {
return engineer;
}
}
组合
电脑由cpu、内存、硬盘组合而成,虽然组合和聚合我们都说“有”什么,但是这个“有”是不同的,他体现的是一种 contains-a 的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如cpu坏了,电脑也就无法使用。
public class Computer {
public Cpu cpu;
public void setCpu(Cpu cpu) {
this.cpu = cpu;
}
public Cpu getCpu() {
return cpu;
}
}
- 继承关系(extends)
类继承抽象类,子类继承父类都属于这种关系
public class Child extends Father {
}
- 实现关系(implements)
类实现接口
public class MyRunnable implements Runnable {
@Override
public void run() {
}
}
三、PlantUml类图语法介绍
- 类属性字段以及方法访问权限映射关系**
符号 | 访问权限 |
---|---|
- | private |
# | protected |
~ | package private |
+ | public |
- 依赖
Water <… Animal : 依赖
- 关联
Phone <-- Person : 关联
- 双向关联
Man <–> Women : 双向关联
- 聚合
Engineer <–o Builders : 聚合
- 组合
Cpu <–* Computer : 组合
- 继承
Father <|-- Child : 继承
- 实现
Runnable <|… MyRunnable : implements
- 其他
箭头方向可以在左边,也可以在右边。
–表示纵向的实线,-表示横向的实线。
…表示纵向的虚线,-表示横向的虚线。
在符号两侧可以用""来添加对元素的说明。
在关系末尾可以用:来添加对关系的说明。
四、类图
类图如下:
五、类图 PlantUml 代码
plantuml 代码如下:
@startuml
scale 300 width
title 类图关系示例演示
class Water {
+static void drink()
}
class Animal {
}
class Phone {
}
class Person {
}
class Man {
}
class Women {
}
class Engineer {
}
class Builders {
}
class Cpu {
}
class Computer {
}
class Father {
}
class Child {
}
interface Runnable {
+run()
}
class MyRunnable {
+run()
}
Water <.. Animal : 依赖
Phone <-- Person : 关联
Man "1" <--> "1" Women : 双向关联
Engineer <--o Builders : 聚合
Cpu <--* Computer : 组合
Father <|-- Child : 继承
Runnable <|.. MyRunnable : implements
@enduml
引用:
1.https://blog.csdn.net/qq_28379809/article/details/79499577
2.https://www.cnblogs.com/jisijie/p/5062109.html
3.https://cloud.tencent.com/developer/article/1932863