序列图主要包含有参与者及参与者之间的消息通信. 参与者不需要显式声明.
消息流向使用 ->
表示, 此时绘制出实线箭头; -->
则绘制点线箭头.
若要绘制反向消息流向, 可以使用 <-
或 <--
.
消息文本跟在第二参与者之后, 用 :
隔开.
图 1-1 代码 (摘自官方文档)
@startuml
Alice -> Bob : Authentication Request
Bob --> Alice : Authentication Response
Alice -> Bob : Another authentication Request
Alice <-- Bob : another authentication Response
@enduml
上述代码生成的 UML 图如图 1-1 所示.
若不显式声明参与者, 那么在生成的 UML
图中的参与者前后关系按其在代码中的出现先后决定.
若要按照自己的意愿决定参与者出现的顺序, 可以使用关键字 participant
声明一个参与者. 由 participant
声明的参与者的图形是一个矩形,
还可以由其它关键字声明一个参与者,
不同的关键字声明的参与绘制时使用的图形是不一样的.
可用的关键字包括:
participant
actor
boundary
control
entity
database
collections
参与者别名. 若参与者名称过长, 特别是参与者名字由多个单词组成的情况下,
可以使用关键字 as
给参与者取一个别名, 之后就可以使用别名指代该参与者.
参与者背景色. 在参与者名称之后以 #COLOR
的形式可以设定参与者图标的背景色.
图 1-2 显示的由各个关键字定义的参与者使用的图形. 图 1-3 显示 “as”
关键字的用法及设置图标背景色及设置箭头颜色.
图 1-2 代码
actor "actor"
participant "participant"
boundary "boundary"
control "control"
entity "entity"
database "database"
collections "collections"
图 1-3 代码
@startuml
actor Bob
' 若要换行, 字符串可以插入 "\n"
' "\n" 后的字符串也将自动居中
participant "Long long long name!\nTim" as Tim #Red
' as 也可以用在前面位置
participant Alice as "My name!\nAlice" #Green
/'
甚至可以在不显式定义参与者的情况下指定别名
'/
ding -> "yingzi[]" : Hello
ding -> "Long long name" as L : HI
ding -> LL as "Another long long name" : Greet
L --> LL : What???
@enduml
在箭头语法中间以 [#COLOR]
的形式可以设置箭头颜色. 如图 1-4 所示.
图 1-4 代码
@startuml
' 设置箭头颜色
Bob -[#Red]-> Tim : send a message [虚线箭头]
Tim -[#Green]> Alice: send XXXX [实线箭头]
@enduml
x
. 将其放到箭头符号前或后, UML 中表示丢失消息./
代替 >
或 使用 \
代替 <
, 图标箭头只有半个.//
, >>
, <<
, \\
将产生细箭头.--
代替 -
将产生虚线.o
, 相应位置会绘制 ‘o’.图 1-5 展示了各种箭头风格.
图 1-5 代码
@startuml
' "x"
Bob ->x Alice
Bob x<- Alice
' "o"
Bob ->o Alice
Bob o-> Alice
Bob o->o Alice
' 都可以加 "x", "o"
Bob -\ Alice
Bob -> Alice
Bob /- Alice
Bob -\\ Alice
Bob //- Alice
Bob ->> Alice
/'
双向. 都可以加 "x", "o".
用 "\" 和 "/" 代替 ">" 和 "<" 时无法产生正确的双向箭头.
'/
Bob <-> Alice
Bob <<->> Alice
@enduml
参与者可以给自己发消息. 如图 1-6 所示.
图 1-6 代码 (摘自官方文档)
@startuml
' 若消息很长, 可以使用 "\n" 换行.
' 消息默认是或对齐.
' 参与者名称则是默认中间对齐.
Alice->Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml
autonumber
. 从 1 开始对消息自动编号.autonumber START
. 从 START 开始对消息自动编号.autonumber START INCREMENT
. 从 START 开始, 按 增量 INCREMENT 对消息自动编号.图 1-7 展示了上述编号方法.
图 1-7 代码
@startuml
autonumber
Bob -> Alice : Message 1
Bob <- Alice : Message 2
autonumber 15
Bob -> Alice : Message 15
Bob <- Alice : Message 16
autonumber 40 10
Bob -> Alice : Message 40
Bob <- Alice : Message 50
@enduml