UML作业第六次:分析系统,绘制顺序图
一、学习小结
1.示例:用->
来绘制参与者之间传递的消息, 而不必显式地声明参与者。可以使用 -->
绘制一个虚线箭头。还能用 <-
和 <--
,这不影响绘图,但可以提高可读性。 注意:仅适用于时序图,对于其它示意图,规则是不同的。
@startuml Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response Alice -> Bob: Another authentication Request Alice <-- Bob: another authentication Response @enduml
2.声明参与者:关键字 participant
用于改变参与者的先后顺序,也可以使用其它关键字来声明参与者:
actor
boundary
control
entity
database
@startuml actor Foo1 boundary Foo2 control Foo3 entity Foo4 database Foo5 collections Foo6 Foo1 -> Foo2 : To boundary Foo1 -> Foo3 : To control Foo1 -> Foo4 : To entity Foo1 -> Foo5 : To database Foo1 -> Foo6 : To collections @enduml
关键字 as
用于重命名参与者,使用RGB值或者颜色名修改 actor 或参与者的背景颜色。
@startuml actor Bob #red ' The only difference 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 @enduml
order
自定义顺序来打印参与者。@startuml participant Last order 30 participant Middle order 20 participant First order 10 @enduml
as
给参与者定义别名。@startuml Alice -> "Bob()" : Hello "Bob()" -> "This is very\nlong" as Long ' You can also declare: ' "Bob()" -> Long as "This is very\nlong" Long --> "Bob()" : ok @enduml
4.给自己发消息:参与者可以给自己发信息,消息文字可以用\n来换行。
@startuml
Alice->Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml
5.修改箭头的样式:
修改箭头样式的方式有以下几种:
- 表示一条丢失的消息:末尾加
x
- 让箭头只有上半部分或者下半部分:将
<
和>
替换成\
或者/
- 细箭头:将箭头标记写两次 (如
>>
或//
) - 虚线箭头:用
--
替代-
- 箭头末尾加圈:
->o
- 双向箭头:
<->
@startuml Bob ->x Alice Bob -> Alice Bob ->> Alice Bob -\ Alice Bob \\- Alice Bob //-- Alice Bob ->o Alice Bob o\\-- Alice Bob <-> Alice Bob <->o Alice @enduml
箭头的颜色:
@startuml Bob -[#red]> Alice : hello Alice -[#0000FF]->Bob : ok @enduml
@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
@enduml
语句 autonumber start
用于指定编号的初始值,而 autonumber startincrement
可以同时指定编号的初始值和每次增加的值,
可以在双引号内指定编号的格式,格式是由 Java 的DecimalFormat
类实现的: (0
表示数字;#
也表示数字,但默认为0)。可以用 HTML 标签来制定格式。还可以用语句 autonumber stop
和 autonumber resume incrementformat
来表示暂停或继续使用自动编号。
7.分割示意图:关键字 newpage
用于把一张图分割成多张,在 newpage
之后添加文字,作为新的示意图的标题。
这样就能很方便地在 Word 中将长图分几页打印。
@startuml Alice -> Bob : message 1 Alice -> Bob : message 2 newpage Alice -> Bob : message 3 Alice -> Bob : message 4 newpage A title for the\nlast page Alice -> Bob : message 5 Alice -> Bob : message 6 @enduml
8.组合消息:可以通过以下关键词将组合消息:
alt/else
opt
loop
par
break
critical
group
, 后面紧跟着消息内容
可以在标头(header)添加需要显示的文字(group
除外),关键词 end
用来结束分组,注意,分组可以嵌套使用。
@startuml Alice -> Bob: Authentication Request alt successful case Bob -> Alice: Authentication Accepted else some kind of failure Bob -> Alice: Authentication Failure group My own label Alice -> Log : Log attack start loop 1000 times Alice -> Bob: DNS Attack end Alice -> Log : Log attack end end else Another type of failure Bob -> Alice: Please repeat end @enduml
9.分隔符:可以通过使用 ==
关键词来将你的图表分割多个步骤,
引用:可以在图中通过使用ref over
关键词来实现引用,
延迟:使用...
来表示延迟,并且还可以给延迟添加注释,
空间:可以使用|||
来增加空间,还可以使用数字指定增加的像素的数量。
10.生命线的激活与撤销:关键字activate
和deactivate
用来表示参与者的生命活动。
一旦参与者被激活,它的生命线就会显示出来。
activate
和deactivate
适用于以上情形。
destroy
表示一个参与者的生命线的终结。
@startuml participant User User -> A: DoWork activate A A -> B: << createRequest >> activate B B -> C: DoWork activate C C --> B: WorkDone destroy C B --> A: RequestCreated deactivate B A -> User: Done deactivate A @enduml
还可以使用嵌套的生命线,并且运行给生命线添加颜色。
@startuml participant User User -> A: DoWork activate A #FFBBBB A -> A: Internal call activate A #DarkSalmon A -> B: << createRequest >> activate B B --> A: RequestCreated deactivate B deactivate A A -> User: Done deactivate A @enduml
11.创建参与者:可以把关键字create
放在第一次接收到消息之前,以强调本次消息实际上是在创建新的对象。
@startuml Bob -> Alice : hello create Other Alice -> Other : new create control String Alice -> String note right : You can also put notes! Alice --> Bob : ok @enduml
12.外观参数:
用skinparam
改变字体和颜色。
可以在如下场景中使用:
你也可以修改其他渲染元素,如以下示例:
@startuml skinparam sequenceArrowThickness 2 skinparam roundcorner 20 skinparam maxmessagesize 60 skinparam sequenceParticipant underline 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.以《工厂采购》系统为例,分析系统中的对象、消息及对象的交互。
对象:采购员、订货界面、订货管理器、客户、货品、订单
消息:指是实体间的连线。
对象的交互:采购员选择所需采购货品;到达订货界面,接收客户信息,接收货品信息,显示货品信息;到达订货管理器,建客户取货品信息,创建订单;创建客户到达客户区,客户取货品信息到达货品区;创建订单到订单区。
2.脚本和顺序图:
@startuml
skinparam sequenceArrowThickness 2
skinparam roundcorner 20
skinparam maxmessagesize 60
actor 采购员
participant "订货界面" as A
participant "订货管理器" as B
participant "客户" as C
participant "货品" as D
participant "订单" as E
采购员 --> A: 客户信息()
activate A #FFBBBB
采购员 --> A: 选择订货货品()
activate A
A -> B:接收客户信息()
activate B #FFBBBB
A -> B:接收货品信息()
activate B
B --> A: 显示货品信息()
deactivate B
B -> C: 创建客户()<<create>>
activate C #FFBBBB
B -> D: 取货品信息()
activate D
D --> B: 货品信息()
deactivate B
B -> E: 创建订单()<<create>>
activate E
@enduml