PlantUML 快速入门(一) UML 类图 您所在的位置:网站首页 plantuml画流程图 PlantUML 快速入门(一) UML 类图

PlantUML 快速入门(一) UML 类图

2024-07-17 13:55| 来源: 网络整理| 查看: 265

大家平日在写技术文档时,往往都有画 UML 图的需要,很多人使用 PrecessOn 或者 darw.io 等来绘制 UML ,勉强可用但是不够专业。这里为大家推荐一个专门画UML的工具: PlantUML

1. PlantUML

PlantUML 诞生于 2009 年,知道的人多但是使用的人少。因为它使用特殊的 DSL 进行画图,相较与其他工具,PlantUML 的图不是“画”出来的而是“写”出来的。

虽然有一定学习成本,但是却可以画出更专业的UML图,而且文本格式也便于保存。本文总结 PlantUML 的基本用法,帮助大家快速入门。

安装环境

PlantUML 是一个 java 程序,所以有 JDK 就能跑。可以从官网直接下载 jar 文件执行,当然它也提供了 IDEA 和 VSCode 的插件。

需要注意的是,PlantUML 的本地渲染依赖 Graphviz ,需要提前安装并配置环境变量。如果你使用 VSCode 插件,也可以借助云端渲染,只需要作如下配置:

之后就可以在 VSCode 中一边“写” UML 一边预览了。

接下来我们学习如何写出漂亮的 UML ,像学习其他语言一样 从 Hello World 开始。

2. Hello World //hello.pu @startuml Hello Wife Husband2 -- Wife2 @enduml

因为比依赖关系更强, 所以是实线+箭头。 双向关联可以省略箭头。

后面两种关系 “聚合” 和 “组合”,都属于关联关系, 用来表示关联关系中整体与部分的关系。java 中 一个 Class 与其成员变量 Class 类型之间就是这种整体与部分的关联关系。

聚合

聚合关系相对于组合弱一些,整体与部分是可分离的。 比如部门与员工,部门有许多员工,员工离职了部门仍然存在,不受影响。反之部门解散了,员工可以去其他部门(整体与部分可分离)

@startuml Department o-- Employee @enduml

o 表示空心菱形

组合

组合关系中,整体与部分是不可分离的,整体与部分的生命周期保持一致,少了对方自己的存在无意义。例如人体是有四肢组成的,四肢不能脱离人体存在,人体少了四肢也难言完整

@startuml Body "1" *-- "2" Arm Body "1" *-- "2" Leg @enduml

* 表示实心菱形

同时也看到了一对多时的数字表示方法,双引号" 包裹,放在线段与Class之间。 多对多也同样。

最后再总结一下六大关系

继承实现依赖关联聚合组合关系含义功能扩展功能实现使用拥有整体-部分(has-a)整体-部分(contains-a)关系特性--临时性,单向性长期性,可双向(平等性)整体与部分可分离整体与部分不可分离,生命周期一致java语法extendsimplements方法参数,局部变量,静态方法调用成员变量成员变量成员变量关系强弱强强弱较强较强非常强现实事例父子飞机/鸟可以飞厨师使用菜谱夫妻,师生部门-员工人体-四肢图形指向箭头指向父类箭头指向接口箭头指向被使用者指向被拥有者,可双向箭头指向部分, 菱形指向整体箭头指向部分,菱形指向整体 综合运用 @startuml interface One interface Two interface Three extends Two interface Four class Five implements One, Three class Six extends Five implements Four { field: String method(): void } @enduml

成员变量、成员方法 @startuml class Hello { one: String three(param1: String, param2: int): boolean String two int four(List param) } @enduml

class定义后跟大括号,声明成员,然后按照 变量名:类型 的顺序声明,类型后置。方法和成员的顺序上可以混在一起,最终成图是,会自动分为两组

成员可见性

UML 使用以下符号表示可见性

CharacterVisibility-private#protected~package private+public

但是 PlantUML 将这种文字符合进一步图形化:

@startuml class Hello { - privateField: int # protectedField: int ~ packagePrivateField: int + publicField: int - privateMethod(): void # protectedMethod(): void ~ packagePrivateMethod(): void + publicMethod(): void } @enduml

当然,也可以关闭这种图形化符合,继续使用文字符号

@startuml skinparam classAttributeIconSize 0 class Hello { - privateField: int # protectedField: int ~ packagePrivateField: int + publicField: int - privateMethod(): void # protectedMethod(): void ~ packagePrivateMethod(): void + publicMethod(): void } @enduml

通过 skinparam classAttributeIconSize 0 关闭图形化符号

抽象方法 @startuml class Hello { {abstract} one: int {abstract} two(): int } @enduml

成员前面加 {abstract} 标记位抽象成员

静态方法 @startuml class Hello { {static} ONE: int {static} two(): int } @enduml

添加 {static} 表示静态方法

泛型 @startuml class Hello class World @enduml

类名后跟

包图 @startuml package one.two { class Hello } package three.four { World -- Hello } @enduml

package {...} 中可以写类 UML 图

包图中的声明顺序 @startuml package three.four { World -- Hello } package one.two { class Hello } @enduml

包图的顺序很重要,如上图 one.two 中的类被 three.four 依赖,所以应该写到先面, 以为 Hello 会声明在第一个出现的包中。

备注(note) @startuml class Fizz note left: fizz class Buzz note right: buzz class Foo note top: foo class Bar note bottom: bar @enduml

使用 note : 为 UML 图添加备注, 备注内容可以是 Creole 语法

指定目标类 @startuml Fizz -- Buzz note left of Fizz: fizz note right of Buzz: buzz @enduml

note of : 用来为指定目标 Class 生成备注

为类关系进行备注 @startuml Fizz -- Buzz note on link: fizz-buzz note left: buzz @enduml

note on link: 可以在类图的关系中添加备注

给备注加名字 @startuml note "Hello World" as n1 Hello -- n1 World .. n1 note "Fizz Buzz" as n2 @enduml

note "" as 用来给备注设置名字,有了名字后,可以通过名字将一个备注关联到多个Class

多行备注 @startuml class Hello note left Hello World end note Fizz -- Buzz note on link Fizz Buzz end note note left of Fizz fizz buzz end note note as n1 Foo Bar end note @enduml

end note 用来结束多行的备注



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有