plantUML简介


使用了太久的visio画图,想体验下更有针对性的UML画图工具

Android studio安装插件

File->Settings->Plugins->Marketplace,搜索UML就能看到PlantUML integration插件:
在这里插入图片描述
点击Install plugin安装,然后重启Android studio

图形化显示需要Graphviz下载地址点击这里

下载安装完成后,在File->Settings->Other Settings ->PlantUML中填入刚刚安装的Graphviz目录下bin目录中的dot.exe文件:
在这里插入图片描述

VSCode安装插件

  1. 安装VS CODE
  2. 安装plantuml插件
  3. 安装graphviz

在windows下是alt+d 生成预览图

之后右键->New->PlantUML File就可以新建一个UML文件了:
在这里插入图片描述

语法参考

快速入门快速入门PDF版
在线编辑

简单的示例

1 时序图

1.1 简单示例

-> 来绘制参与者之间传递的消息,用 –> 绘制一个虚线箭头。
<-<– 反向指定

注意:仅适用于时序图,对于其它示意图,规则是不同的。

@startuml
A->B : comment1
B-->A : comment2
A-->B : comment3
B<-A : comment4
@enduml

在这里插入图片描述

1.2 声明参与者(participant,actor…)

前面那个四方形的参与者是participant (中文翻译就是参与者)。
还有其他参与者的关键字如下:
• actor
• boundary
• control
• entity
• database

@startuml
actor actor_obj
boundary boundary1_obj
control control_obj
entity entity_obj
database database_obj
collections collections_obj
@enduml

不同的参与者使用不同的头像:
在这里插入图片描述

加上传递的消息:

@startuml
actor actor_obj
boundary boundary1_obj
control control_obj
entity entity_obj
database database_obj
collections collections_obj

actor_obj->boundary1_obj: log1
actor_obj->control_obj: log2
actor_obj->entity_obj: log3
actor_obj->database_obj: log4
actor_obj->collections_obj:log5
@enduml

在这里插入图片描述

1.2.1 重命名(as),注释,参与者顺序(order)

关键字 as 用于重命名参与者
可以使用 RGB 值或者颜色名修改参与者的背景颜色。
所有以 单引号 '开头的语句,被认为是一个注释, 多行注释,以 /''/ 作为注释的开始和结束。

@startuml
actor actor_obj #red
participant participant_obj
/'这是一段
可换行的注释'/
participant "我的名字太长了" as L #99ff99

' 单行注释
participant_obj->actor_obj: log1
actor_obj->participant_obj: log2
actor_obj->L: log3
@enduml

在这里插入图片描述
关键字 order 自定义参与者顺序

@startuml
participant 第三位 order 30
participant 第二位 order 20
participant 第一位 order 10
@enduml

在这里插入图片描述

1.3 在参与者中使用非字母符号
@startuml
A->"B()" : 因为括号非字母,所以需要双引号
"B()" -> "这是一个长名字" as Long 
Long-> "B()" : OK
@enduml

在这里插入图片描述

1.4 给自己发消息

参与者可以给自己发信息,消息文字可以用 \n 来换行。

@startuml
A->A: 自己发给自己\n,再换个行
@enduml

在这里插入图片描述

1.5 修改箭头样式

修改箭头样式的方式有以下几种:
• 表示一条丢失的消息:末尾加 x
• 让箭头只有上半部分或者下半部分:将 < 和 > 替换成 \ 或者 /
• 细箭头:将箭头标记写两次 (如 >> 或 //)
• 虚线箭头:用 – 替代 -
• 箭头末尾加圈:->o
• 双向箭头:<->

@startuml
A->x B_obj
A-\  B_obj
A-/  B_obj
A->> B_obj
A--> B_obj
A-->O B_obj
A<-> B_obj
@enduml

在这里插入图片描述

1.6 修改箭头颜色

你可以用以下记号修改箭头的颜色:

@startuml
A-[#red]> B_obj : log1
A<[#0000FF]-B_obj : log2
@enduml

在这里插入图片描述

1.7 对消息序列编号(autonumber自动生成消息序号)

关键字 autonumber 用于自动对消息编号。

@startuml
autonumber
A-> B_obj : log1
A<-B_obj : log2
@enduml

在这里插入图片描述
语句 autonumber start 用于指定编号的初始值,而 autonumber start increment 可以同时指定编号的初始值和每次增加的值。

@startuml
autonumber
A-> B_obj : log1
A<-B_obj : log2

autonumber 15
A-> B_obj : log3
A<-B_obj : log4

autonumber 40 10
A-> B_obj : log5
A<-B_obj : log6
@enduml

在这里插入图片描述
还可以在双引号内指定编号的格式,格式是由 Java 的 DecimalFormat 类实现的:(0 表示数字;# 也表示数字,但默认为 0), 也可以用 HTML 标签来制定格式。

@startuml
autonumber "<b>[000]"
A-> B_obj : log1
A<-B_obj : log2

autonumber 15 "<b>(<u>##</u>)"
A-> B_obj : log3
A<-B_obj : log4

autonumber 40 10 "<font color=red><b>Message 0 "
A-> B_obj : log5
A<-B_obj : log6
@enduml

在这里插入图片描述
还可以用语句 autonumber stopautonumber resume increment format 来表示暂停或继续使用自动编号。

@startuml
autonumber "<b>[000]"
A-> B_obj : log1
A<-B_obj : log2

autonumber stop
A-> B_obj : log3
A<-B_obj : log4

autonumber resume 10 "<font color=red><b>Message 0 "
A-> B_obj : log5
A<-B_obj : log6
@enduml

在这里插入图片描述

1.8 标题,头和尾(title,header,footer)
@startuml
header 这是一个header
footer 当前是%page% of %lastpage%
title  这是一个标题

A-> B_obj : log1
A<-B_obj : log2
@enduml

在这里插入图片描述

1.9 分割示意图(分页显示)

关键字 newpage 用于把一张图分割成多张, 在 newpage 之后添加文字,作为新的示意图的标题。这样就能很方便地在 Word 中将长图分几页打印。

@startuml
A-> B_obj : log1
A<-B_obj : log2

newpage 新的一页

A-> B_obj : log3
A<-B_obj : log4
@enduml

在这里插入图片描述

1.10 组合消息

我们可以通过以下关键词组合消息:
• alt/else
• opt
• loop
• par
• break
• critical
• group

关键词 end 用来结束分组。

@startuml
A_obj-> B_obj : log1
alt 遇到end结束
A_obj<-B_obj : log2
end
@enduml

在这里插入图片描述
可以看到alt会显示在组内的左上角,但group除外,它只显示消息

@startuml
A_obj-> B_obj : log1
group 遇到end结束
A_obj<-B_obj : log2
end
@enduml

在这里插入图片描述
分组可以嵌套使用

@startuml
A_obj-> B_obj : log1
alt alt-log
A_obj<-B_obj : log2
else else-log
    group group-子分组
    A_obj<-B_obj : log4
    end
A_obj->B_obj : log3
end
@enduml

在这里插入图片描述

1.11 给消息添加注释(note left, note right,end note)

通过在消息后面添加 note left 或者 note right 关键词来给消息添加注释。也可以通过使用 end note 来添加多行注释。

@startuml
A_obj-> B_obj : log1
note left: 这是左注释
note right: 这是右注释
A_obj<- B_obj : log2
note left
左注释
多行
end note
@enduml

在这里插入图片描述

1.12 其他的注释(note left of,note right of,note over高亮等)

可以使用 note left ofnote right ofnote over 在节点 (participant) 的相对位置放置注释。还可以通过修改背景色来高亮显示注释。以及使用关键字 end note 来添加多行注释。

@startuml
participant A_obj

note left of A_obj #red
这是A_obj的
多行note
end note

note over A_obj : 这是A_obj的的中间note
@enduml

在这里插入图片描述

1.13 改变备注框的形状(hnote 和 rnote)

可以使用 hnoternote 这两个关键字来修改备注框的形状,就是把前面的note关键字前面加上rh

@startuml
participant A_obj

hnote left of A_obj #red
这是A_obj的
多行note
end note

rnote over A_obj :  这是A_obj的的中间note
@enduml

在这里插入图片描述

1.15 分隔符(==)

通过使用 == 关键词来将图表分割多个步骤

@startuml
== 分隔线1 ==
A_Obj->B_Obj: log1
== 分隔线2 ==
A_Obj->B_Obj: log2
@enduml

在这里插入图片描述

1.16 引用

通过使用 ref over 关键词来实现引用

@startuml
participant A_Obj
participant B_Obj

ref over A_Obj,B_Obj: 引用A和B
A_Obj->B_Obj: log1
ref over B_Obj:只引用B

@enduml

在这里插入图片描述

1.17 延迟(…)

使用... 来表示延迟,并且还可以给延迟添加注释。

@startuml
A_Obj->B_Obj: log1
...
B_Obj->A_Obj: log2
...延迟的注释...
@enduml

在这里插入图片描述

1.18 空间(|||)

可以使用 ||| 来增加空间。还可以使用数字(||50||)指定增加的像素的数量。

@startuml
A_Obj->B_Obj: log1
|||
B_Obj->A_Obj: log2
||50||
B_Obj->A_Obj: log3
@enduml

在这里插入图片描述

1.19 生命线的激活与撤销(activate, deactivate)

关键字 activatedeactivate 用来表示参与者的生命活动。
一旦参与者被激活,它的生命线就会显示出来(一个长方框)。
destroy 表示一个参与者的生命线的终结(一把叉)。

@startuml
User->A: 初始化
activate A
A -> B: 发送请求
activate B
B -> C: 处理请求
activate C
C ->B: 请求处理完成(结束)
destroy C
B -> A: 返回结果
deactivate B
A -> User: 反初始化
deactivate A
@enduml

在这里插入图片描述

还可以使用嵌套的生命线,并且运行给生命线添加颜色。

@startuml
User->A: 初始化
activate A #red
A->A: A自己\n调自己
activate A #yellow
A -> B: 发送请求
activate B
B -> A: 返回结果
deactivate B
A->A: A自己\n调自己2
deactivate A 
A -> User: 反初始化
deactivate A
@enduml

在这里插入图片描述

1.20 返回Return

生成带有可选文本标签的返回消息,返回的点是那个最近激活当前生命线的点,看两个例子的返回处就明白了

@startuml
User->A:在User之后就初始化了C
activate A
activate B
activate C
A -> B
B -> C
C ->B
return return到User
@enduml

在这里插入图片描述

@startuml
User->A
activate A
activate B
A -> B
B -> C:在B之后才初始化了C
activate C
C ->B
return return到B
@enduml

在这里插入图片描述

1.21 创建参与者(create)

把关键字 create 放在第一次接收到消息之前,以强调本次消息实际上是在创建新的对象。

@startuml
create B
A -> B
B -> C
@enduml

可以看到B被提到最前面显示
在这里插入图片描述

1.22 进入和发出消息([ ])

如果只想关注部分图示,你可以使用进入和发出箭头。使用方括号 [] 表示图示的左、右两侧, 简单的把方括号 []认为是一个隐形的参与者就好了。

@startuml
[->A: A进入\n消息
A->B: log1
B<-]: B进入消息
B->]: B发出消息
[<-A: A发出\n消息
@enduml

在这里插入图片描述
还可以使用下面的语法:

@startuml
[-> A
[o-> A
[o->o A
[x-> A
A ->]
A ->o]
A o->o]
A ->x]
A <-]
A x<-]
@enduml

在这里插入图片描述

1.23 构造类型和圈点

可以使用 <<>> 给参与者添加构造类型。在构造类型中,你可以使用 (X,color) 格式的语法添加一个圆圈圈起来的字符。

@startuml
participant "比较长的A" as A << 构造 >>
participant "比较长的B" as B << (C,#ff0000) 构造 >>
A -> B
@enduml

在这里插入图片描述

1.24 更多标题信息

可以在标题中使用 creole 格式。在标题描述中使用 \n 表示换行。

@startuml
title __应该__ 怎么 \n写标题呢
A -> B
@enduml

在这里插入图片描述
还可以使用关键字 titleend title 定义多行标题。

@startuml
title
<u>下划线</u> 标题 
第<font color=red>二行</font>
end title
A->B
@enduml

在这里插入图片描述

1.25 包裹参与者

可以使用 boxend box 画一个盒子将参与者包裹起来。
还可以在 box 关键字之后添加标题或者背景颜色。

@startuml
box  "title" #yellow
participant A_Obj
participant B_Obj
end box

participant C_Obj
A_Obj -> B_Obj
@enduml

在这里插入图片描述

1.26 移除脚注(hide footbox)

使用 hide footbox 关键字移除脚注。

@startuml
hide footbox
A_Obj -> B_Obj
@enduml

在这里插入图片描述

1.27 外观参数 (skinparam)

skinparam 改变字体和颜色。

@startuml
skinparam backgroundColor #EEEBDC
skinparam handwritten true
skinparam sequence {
ArrowColor DeepSkyBlue
ActorBorderColor DeepSkyBlue
LifeLineBorderColor blue
LifeLineBackgroundColor #A9DCDF
ParticipantBorderColor DeepSkyBlue
ParticipantBackgroundColor DodgerBlue
ParticipantFontName Impact
ParticipantFontSize 17
ParticipantFontColor #A9DCDF
ActorBackgroundColor aqua
ActorFontColor DeepSkyBlue
ActorFontSize 17
ActorFontName Aapex
}
actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as C
User -> A: DoWork
activate A
A -> B: Create Request
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: Request Created
deactivate B
A --> User: Done
deactivate A
@enduml

在这里插入图片描述

1.28 填充区设置

可以设定填充区的参数配置。

@startuml
skinparam ParticipantPadding 20
skinparam BoxPadding 10

box "box1" #yellow
participant A1
participant B1
end box
A1-> B1: log1
A1<- B1: log2
@enduml

在这里插入图片描述

3 类图

3.1 类之间的关系

类之间的关系通过下面的符号定义:
在这里插入图片描述
使用… 来代替 – 可以得到点线.
在这些规则下,也可以绘制下列图形

@startuml
Class1 <|-- Class2
Class3 *-- Class4
Class5 O-- Class6
Class7 .. Class8
Class9 -- Class10
@enduml

在这里插入图片描述

@startuml
Class11 <|.. Class12
Class13 --> Class14
Class15 ..> Class16
Class17 ..|> Class18
Class19 <--* Class20
@enduml

在这里插入图片描述

@startuml
Class21 #-- Class22
Class23 x-- Class24
Class25 }-- Class26
Class27 +-- Class28
Class29 ^-- Class30
@enduml

在这里插入图片描述

3.2 关系上的标识

在关系之间使用标签来说明时, 使用 : 后接标签文字。对元素的说明,你可以在每一边使用 "" 来说明.

@startuml
Class1 "上方" *-- "下方" Class2: 中间\n日志
@enduml

在这里插入图片描述
在标签的开始或结束位置添加 <> 以表明是哪个对象作用到哪个对象上,注意<> 后需要带上空格。

@startuml
class Car
Driver - Car : drivers >
Car *- Wheel : < have 4
Car -- Person : < owns
@enduml

在这里插入图片描述

3.3 添加方法

为了声明字段 (对象属性)或者方法,你可以使用后接字段名或方法名。系统检查是否有括号来判断是方法还是字段。

@startuml
Object <|-- ArrayList
Object : equals()
ArrayList : Object[] elementData
ArrayList : size()
@enduml

在这里插入图片描述
也可以使用 {} 把字段或者方法括起来,注意,这种语法对于类型/名字的顺序是非常灵活的。

@startuml
class Dummy {
    String data
    void methods()
}
class Flight {
    flightNumber : Integer
    depart : Data
}
@enduml

在这里插入图片描述
可以(显式地)使用 {field}{method} 修饰符来覆盖解析器的对于字段和方法的默认行为。

@startuml
class A {
    {field} field1
    {field} field2
    {method} method1
    {method} method2
}
@enduml

在这里插入图片描述

3.4 定义可访问性

在这里插入图片描述

@startuml
class Dummy {
-field1
#field2
~method1()
+method2()
}
@enduml

在这里插入图片描述
可以采用以下命令停用这些特性 skinparam classAttributeIconSize 0

@startuml
skinparam classAttributeIconSize 0
class Dummy {
-field1
#field2
~method1()
+method2()
}
@enduml

在这里插入图片描述

3.5 抽象与静态

通过修饰符 {static} 或者 {abstract},可以定义静态或者抽象的方法或者属性。

@startuml
class Dummy {
    {static} String id
    {abstract} Void method()
}
@enduml

在这里插入图片描述

3.6 高级类体

PlantUML 默认自动将方法和属性重新分组,你可以自己定义分隔符来重排方法和属性,下面的分隔符都是可用的:-- .. == __.

@startuml
class Dummy {
    第一行
    ..
    第二行
    ==
    第三行
    --
}
@enduml

在这里插入图片描述

3.7 备注和模板

模板通过类关键字 ("<<" 和">>") 来定义
可以使用 note left of , note right of , note top of , note bottom of 这些关键字来添加备注。
你还可以在类的声明末尾使用 note left, note right,note top, note bottom 来添加备注。
此外,单独用 note 这个关键字也是可以的,使用 .. 符号可以作出一条连接它与其它对象的虚线。

@startuml
class Object<<general>>
Object <|--ArrayList
note top of Object: 模板的\n顶部注释
note "这是个浮动的注释" as N1
note "这个注释居中" as N2
Object..N2
N2..ArrayList

class Foo
note left: 左注释
@enduml

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值