文章

使用PlantUML绘制类图

本文基于 vscode 的 PlantUML 插件绘制类图。

类的 UML 表示

使用 UML 表示一个类,主要由三部分组成。类名属性方法。其中属性方法的访问修饰符用 -#+ 表示 privateprotectedpublic

1

如图所示,表示A类有一个private属性,protected 构造函数和public方法。

@startuml

class A{
    - String field
    + A()
    # void method()
}
note right: 这是测试类 A

@enduml

类的关系

在面向对象语言中,类的关系有很多种,可以概括为三类:泛化依赖关联

泛化

泛化指父类跟子类的关系,表示is-a的关系。如父类是抽象类或普通类,则这种关系叫继承。如,父类是接口,则这种关系叫实现。UML 中,继承和实现由不同的标记表示。

继承

PlantUML 用 --|> 表示继承关系。实线和三角形的抽象表示,指向谁,即继承谁。

@startuml

    class A
    abstract B

    ' A 继承 B
    A --|> B

@enduml

2

实现

PlantUML 用 ..|> 表示实现关系。虚和三角形的抽象表示,指向谁,即实现谁。

@startuml

    class A
    interface C

    ' A 实现 C
    A ..|> C

@enduml

3

依赖

类之间,最弱的关联方式。常用于在 A 类的方法中使用 B 类的对象作为参数、局部变量或者对 B 类静态方法的调用。

PlantUML 用 ..> 表示依赖关系。虚线和箭头的抽象表示,指向谁,即依赖谁。

@startuml

    class A
    class B

    ' A 依赖 B
    A ..> B

@enduml

4

关联

关联关系,即对象之间的引用关系。常使用类的属性表达。

单向关联

B 类作为 A 类的属性,表示 A 类与 B 类有关联。 PlantUML 用 --> 表示单向关联。实线线和箭头的抽象表示,指向谁,即关联谁。

@startuml

    class A{
        - B b
    }
    class B

    ' A 关联 B
    A --> B

@enduml

5

双向关联

B 类作为 A 类的属性同时,A 类也是 B 类的属性,表示双向关联。 PlantUML 用 -- 表示双向关联。或者用<-->

@startuml

    class A{
        - B b
    }
    class B{
        - A a
    }

    ' A 关联 B
    A -- B

@enduml

6

自关联

A 类关联 A 类自身。常见于单例模式。

7

@startuml

    class A{
        - A a
    }


    ' A 关联 A
    A --> A

@enduml

聚合

在关联关系的基础上,延伸出聚合关系,强的关联关系,表示has-a关系。整体与部分的关系,部分不依赖于整体,可独立存在。常用于成员变量。

如;汽车和轮胎的关系,轮胎可作为独立的商品出售。

PlantUML 用 o-- 表示聚合关系。实线和空心菱形的抽象表示,指向谁,表示谁是整体。

@startuml

    class Car{
        - List<Wheel> wheels
    }
    class Wheel

    ' Car 关联 Wheel
    Car "1" o-- "4" Wheel

@enduml

8

图中数字14也表示一对多关联。NN同理。

组合

在关联关系的基础上,延伸出另外一种关联关系,组合关系,表示contains-a关系。整体与部分的关系,部分依赖于整体,不可独立存在。常用于成员变量。

如:身体和动作的关系。

PlantUML 用 *-- 表示聚合关系。实线和实心菱形的抽象表示,指向谁,表示谁是整体。

@startuml

    class Body{
        - List<Action> actions
    }
    class Action

    ' Body 关联 Action
    Body "1" *-- "N" Action

@enduml

9

PlantUML 排版

相比较其他的 UML 软件或插件。PlantUML 的优势在于,存储的是文本文件,可以方便的进行团队协作以及高度可定制化的依赖关系。但是,最大的缺点在于,排版是通过插件自动生成的,排版效果不尽人意。因此,PlantUML 提供四个关键字 up down left right。指定类与类之间的相对关系。

default

@startuml

class A1
class B1

A1 --> B1

class A2
class B2
A2 <-- B2

@enduml

10

箭头向左时,被指向对象在上; 箭头向右时,被指向对象在下。

up

@startuml

class A1
class B1

A1 -up-> B1

class A2
class B2
A2 <-up- B2

@enduml

11

使用 up 时,被指向对象在上。

down

@startuml

class A1
class B1

A1 -down-> B1

class A2
class B2
A2 <-down- B2

@enduml

12

使用 down 时,被指向对象在下。

left

@startuml

class A1
class B1

A1 -left-> B1

class A2
class B2
A2 <-left- B2

@enduml

使用 left 时,被指向对象在左。

13

@startuml

class A1
class B1

A1 -right-> B1

class A2
class B2
A2 <-right- B2

@enduml

14

使用 right 时,被指向对象在右。

问题汇总

找不到dot.exe路径

下载Graphviz,配置环境变量

参考这里,配置vscode参数。

1
2
3
"plantuml.commandArgs": [
    "-DGRAPHVIZ_DOT=C:\\Program Files (x86)\\Graphviz\\bin\\dot.exe",
]

总结

画类图,只是 PlantUML 的功能之一,还可以使用它画时序图用例图活动图等。更多用法,请关注后续博客或访问官网

参考

本文由作者按照 CC BY 4.0 进行授权

© Kai. 保留部分权利。

浙ICP备20006745号-2,本站由 Jekyll 生成,采用 Chirpy 主题。