PlantUML
PlantUML
PlantUML 是一个快速创建 UML 图形的组件,官网上之所以称它是一个组件,我 想主要是因为多数情况下我们都是在 Eclipse、NetBenas、Intellijidea、Emacs、Word 等软件里来使用 PlantUML。
PlantUML 支持的图形有:Sequence Diagram, Use case Diagram, Class Diagram, Activity Diagram (here is the new syntax), Component Diagram, State Diagram, Object Diagram, Wireframe Graphical Interface。PlantUML 通过简单和直观的语言来定义图形,它可以生成 PNG、SVG 和二进制图片。
Alice -> Bob: synchronous call
Alice ->> Bob: asynchronous call
常用模板
顺序图(Sequence Diagram)
顺序图用 ->, –>, <-, <– 来绘制参与者(Participants)之 间的消息(Message)。
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another atuhentication Request
Alice <-- Bob: Another authentication Response
注释语句以单引号开始头行,即是一个单行注释。多行注释可以使用"’“表示注释内容的开始,然后使用”’“来表示注释内容的结束。
参与者
可以使用 participant 关键词来申明参与者,也可以使用下面的参与者分类关键词来申明参与者:actor、boundary、control、entity、database:
actor Foo1
boundary Foo2
control Foo3
entity Foo4
database Foo5
Foo1 -> Foo2 : To boundary
Foo1 -> Foo3 : To control
Foo1 -> Foo4 : To entity
Foo1 -> Foo5 : To database
使用 as 关键词可以为参与者起一个别名,这样在对引用长名的参与者时会方便很多。在参与者申明语句后行尾可以追加背景色的设置,只要把标准的 HTML 颜色值写在后面就行了。
actor Bob #red
' The only defference between actor
' and participant is the drawing
participant Alice
participant "I have a really\nlong name" as L #99ff99
/' You can also declare:
participant L as "I have a really\nlong name" #99ff99
'/
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
Bob -> L: Log transaction
一个参与者可以给自己发送消息,消息名如果需要有多行文本,可以用 \n 来表示换行。
Alice -> Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
消息与箭头
我们也改变箭头的样式(Change arrow style) 在用例图里可以通过以下方式来改变箭头的样式:
- 使用 \或/ 来替换 <或> 可以让箭头只显示上半部分或下半部分。
- 重复输入箭头或斜杠(» //),用来绘制空心箭头。
- 使用双横线 – 替代 - 可以用来绘制点线。
- 在箭头后面加个 o 可以在箭头前绘制一个圆圈。
- 使用 <-> 可用来绘制双向箭头。
Bob -> Alice
Bob ->> Alice
Bob -\ Alice
Bob \\- Alice
Bob //-- Alice
Bob ->o Alice
Bob o\\-- Alice
Bob <-> Alice
Bob <<-\\o Alice
我们要改变箭头的颜色,可以使用 HTML 颜色符号,参看下面的例子:
Bob -[#red]> Alice : hello
Alice -[#0000FF]->Bob : ok
消息序号(Message sequence numbering),关键词 autonumber 用来给自动的给消息添加上序号。
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
如果需要指定一个起始号码,可以直接在 autonumber 后面加个数字就行 了,如果要设置自增量,再在后面加一个数字就行了(autonumber start increment)。
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber 15
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response
autonumber 40 10
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
我们可能经常会在消息的左边或右边使用注解,要添加注解,只要使用 note left 或 note right 关键词就可以了。
Alice -> Bob : hello
note left: this is a first note
Bob -> Alice : ok
note right: this is anther note
Bob -> Bob : I am thinking
note left
a note
can also be defined
on several lines
end note
通过使用关键词 note left of,note right of 或 note over,我们还可以把注解放置在与之相关的参与者的左边或右边,或下方。通过改变注解的背景色,我们还可以高亮一个注解文本块。如果要使用多行注解,可以使用关键词 end note 来表示注解的结束。
participant Alice
participant Bob
note left of Alice #aqua
This is displayed
left of Alice.
end note
note right of Alice: This is displayed right of Alice.
note over Alice: This displayed over Alice.
note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice.
note over Bob, Alice
This is yet another
example of
a long note.
end note
其他修饰
标题(Title)要给图形加一个标题可以用 title 关键词来设置。
title Simple Comunication example
Alice -> Bob : Authentication Request
Bob --> Alice : Authentication Response
使用 legend 和 end legend 关键词可以设置图形的图例。图例可以设 为左对齐、右对齐和居中对齐。
Alice -> Bob : Hello
legend right
Short
legend
endlegend
图形分割与分组
关键词 newpage 是用来把图形分割成几个图片的。每一个被分割出来的 图片可以看作是一个新的页面(new page),如果要给新的页面添加一个标题,可以紧跟在关键词 newpage 之后来设置。使用这个方法可以方便的在 Word 里把比较长的图形分别打印到几个不同的页面上(有点分页符的概念)。
Bliss -> Tia : I love you
Bliss -> Tia : I miss you
newpage
Bliss -> Tia : Let's go home
Bliss -> Tia : Quick
newpage A title for the\nlast page
Tia -> Bliss : Give me money
Tia -> Bliss : No money No love
有时候可能需要对消息进行分组,那么可以使用下面的关键词来实现:alt/else、opt、loop、par、break、critical、group, 这个关键词后面的文字会作为组名显示在图形上。上面的关键词后可以添加一些文本用来显示在头部(注:group 除外,因 为它后面的文本用来显示在组名称的位置)。在组嵌套组的结构里可以用关 键词 end 来关闭组或者说是表示一个组符号的结束符(类似 if/endif)。
Alice -> Bob: Authentication Request
alt successful case
Bob -> Alice: Authentication Accepted
else some kind of failure
Bob -> Alice: Atuhentication Failue
group My own label
Alice -> Log : Log attack start
loop 1000 times
Alice -> Bob: DNS Attack
end
Alice -> Log : Loag alice end
end
else Another type of failue
Bob -> Alice: Please repeat
end
用例图
用例可以用一对小括号括起来表示,也可以使用 usecase 关键词来定义;用例也可以通过使用 as 关键词来设置别名,在建立关系的时候可以使用别名。
@startuml
(Usecase One)
(Usecase Two) as (UC2)
usecase UC3
usecase (Last\nusecase) as UC4
@enduml
定义参与者时,可以把参与者的名称放在两个冒号的中间,也可以用 actor 关键词来定义参与者。同样参与着也可以使用别名。
:Actor 1:
:Another\nactor: as Men2
actor Men3
actor :Last actor: as Men4
left to right direction
skinparam packageStyle rect
actor customer
actor clerk
rectangle checkout {
customer -- (checkout)
(checkout) .> (payment) : include
(help) .> (checkout) : extends
(checkout) -- clerk
}
活动图(Activity Diagram)
在活动图中,你可以使用 (*)
来表示活动开始点和结束点。使用 –> 来表示箭头。
(*) --> "First Activity"
"First Activity" --> (*)
箭头与分支
缺省情况下,活动图的箭头是没有标注的。但我们可以通过方括号 [labels] 来设置标注,只要把它放在箭头定义的后面就可以了。
(*) --> "First Activity"
-->[You can put also labels] "Second Activity"
-->(*)
我们可以使用 -> 创建一个水平箭头,也可以通过下面的方式来改变箭头 的方向:
- -down-> 向下(这个是默认的,等同于 =–>=)
- -right-> 向右
- -left-> 向左
- -up-> 向上
(*) --> "1"
-right-> "2"
-down-> "3"
-left-> "4"
-le-> "5"
-up-> "6"
-l-> "7"
-do-> "8"
-d-> "9"
-> "10"
--> (*)
在描述箭头时,up|down|left|right 这几个单词的写法可以简化,用单词开头的一个或两个字母来替换就行了,比如 -down-> 也可以写成 -d-> 或者 -do->。在 PlantUML 里,我们可以使用 if/then/else 关键词来定义分支。
(*) --> "Initialisation"
if " Some Test" then
-->[ture] "Some Activity"
--> "Another Activity"
-right-> (*)
else
->[false] "Something else"
-->[Ending process] (*)
endif
对于多分支:
(*) --> if "Some Test" then
-->[true] "1"
if "" then
-> "3" as a3
else
if "Other test" then
-left-> "5"
--> (*)
else
--> "6"
--> (*)
endif
endif
else
->[false] "2"
--> (*)
endif
a3 --> if "last test" then
--> "7"
--> (*)
else
-> "8"
--> (*)
endif
活动描述
在定义活动的时候,有时候需要用多行文字来描述这个活动,这时我们可以 在描述里添加换行符 \n,也可以使用少量的 HTML 标签。以下是可以使用的 HTML 标签:
<b>
<i>
<font size="nn"> or <size:nn> to change font size
<font color="#AAAAAA"> or <font color="colorName">
<color:#AAAAAA> or <color:colorName>
<img:file.png> to include an image
针对较长文本描述活动,可以起一个较短别名(如:“long text” as A1),在图形定义脚本中可以直接使用别名。PlantUML 可以通过在脚本里使用 note 来添加注释文本块。PlantUML 用上面列表里的命令来标注一个注释块的开始,然后用 end note 来标注注释块的结束。同时 note 命令也允许使用单行定义一个文本块,详见下面的例子。
(*) --> "Some Activity" as s
note right: This activity has to be defined
s --> (*)
note left
This note is on
serveral lines
end note
分区(Partition)
通过分区关键词 partition 可以定义一个分区,并且可以使用 HTML 的 颜色码或颜色名来设置分区的背景色。在你申明一个活动时,PlantUML 会自动 的把这个活动对象放置到最后使用的分区中。当然,也可以使用 end partitio 关闭分区定义。
partition Conductor
(*) --> "Climbs on Platform"
--> === S1 ===
--> Bows
end partition
partition Aduience #LightSkyBlue
=== S1 === --> Applauds
partition Conductor
Bows --> === S2 ===
--> WavesArmes
Applauds --> === S2 ===
end partition
partition Orchestra #CCCCEE
WavesArmes --> Introduction
--> "Play music"
end partition