UML作业第六次:分析系统,绘制顺序图

 

 

PlantUML顺序图 语法学习小结

1.简单示例

我们使用->绘制参与者之间传递的消息, 而不必显式地声明参与者;同样的,也可以使用 --> 绘制一个虚线箭头。

另外,我们还可以用 <- 和 <--,这不影响绘图,但可以提高可读性(仅适用于时序图,对于其它示意图规则是不同的)。

(箭头样式:

表示一条丢失的消息:末尾加 x

让箭头只有上半部分或者下半部分:将<>替换成\或者 /

细箭头:将箭头标记写两次 (如 >> 或 //)

虚线箭头:用 -- 替代 -

箭头末尾加圈:->o

双向箭头:<->)

@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml

UML作业第六次:分析系统,绘制顺序图

 

2.声明参与者

我们使用关键字 participant 改变参与者的先后顺序,同样的,我们也可以使用其它关键字来声明参与者:actor、boundary、control、entity、database。

关键字 as 用于重命名参与者(使用引号定义参与者),我们也可以使用关键字 order自定义顺序来打印参与者。

@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
participant Last order 30
participant Middle order 20
participant First order 10
@enduml

UML作业第六次:分析系统,绘制顺序图

 

3.给自己发消息

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

@startuml
Alice->Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml

UML作业第六次:分析系统,绘制顺序图

 

4.对消息序列编号

关键字 autonumber 用于自动对消息编号,语句 autonumber start 用于指定编号的初始值,而 autonumber startincrement 可以同时指定编号的初始值和每次增加的值。

@startuml
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
@enduml

UML作业第六次:分析系统,绘制顺序图

 

 5.分割示意图

关键字 newpage 用于把一张图分割成多张,在 newpage 之后添加文字,可以作为新的示意图的标题。

@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

 UML作业第六次:分析系统,绘制顺序图

 

 6.组合消息

我们可以通过以下关键词将组合消息: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

UML作业第六次:分析系统,绘制顺序图

 

7.分割符

我们可以通过使用 == 关键词来将图表分割多个步骤。

@startuml
== Initialization ==
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

== Repetition ==
Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml

UML作业第六次:分析系统,绘制顺序图

 

8.引用

你可以在图中通过使用ref over关键词来实现引用。

@startuml
participant Alice
actor Bob
ref over Alice, Bob : init
Alice -> Bob : hello
ref over Bob
  This can be on
  several lines
end ref
@enduml

UML作业第六次:分析系统,绘制顺序图

 

 9.延迟

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

@startuml

Alice -> Bob: Authentication Request
...
Bob --> Alice: Authentication Response
...5 minutes latter...
Bob --> Alice: Bye !

@enduml

UML作业第六次:分析系统,绘制顺序图

 

10.空间

我们使用|||来增加空间,还可以使用数字指定增加的像素的数量。

@startuml

Alice -> Bob: message 1
Bob --> Alice: ok
|||
Alice -> Bob: message 2
Bob --> Alice: ok
||45||
Alice -> Bob: message 3
Bob --> Alice: ok

@enduml

UML作业第六次:分析系统,绘制顺序图

 

11.生命线的激活与撤销

关键字activatedeactivate用来表示参与者的生命活动,一旦参与者被激活,它的生命线就会显示出来,activatedeactivate适用于以上情形。destroy表示一个参与者的生命线的终结。

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

@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

UML作业第六次:分析系统,绘制顺序图

 

12.创建参与者

我们把关键字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

UML作业第六次:分析系统,绘制顺序图

 

13.包裹参与者

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

@startuml

box "Internal Service" #LightBlue
    participant Bob
    participant Alice
end box
participant Other
Bob -> Alice : hello
Alice -> Other : hello

@enduml

UML作业第六次:分析系统,绘制顺序图

 

工厂采购

  1. 采购员选择所需采购货品;
  2. 到达订货界面,接收客户信息,接收货品信息,显示货品信息;
  3. 到达订货管理器,创建客户取货品信息,创建订单;
  4. 创建客户到达客户区,客户取货品信息到达货品区;
  5. 创建订单到订单区。

脚本程序

@startuml
skinparam backgroundColor #F5F5F5
skinparam handwritten true

skinparam sequence {
    ArrowColor black
    ActorBorderColor #8B8B7A
    LifeLineBorderColor black
    LifeLineBackgroundColor #BEBEBE
    
    ParticipantBorderColor #BEBEBE
    ParticipantBackgroundColor #DCDCDC
    ParticipantFontColor #8B8B7A
    ParticipantFontName 黑体
    ParticipantFontSize 17

    ActorBackgroundColor #DCDCDC
    ActorFontColor #8B8B7A
}

actor 采购员
  participant "订货界面" as 1
  participant "订货管理器" as 2
  participant "客户" as 3
  participant "货品" as 4
  participant "订单" as 5
 
 采购员 --> 1: 客户信息()
 activate 1
 采购员 --> 1: 选择采购货品()
 activate 1
 
 1 --> 2:接收客户信息()
 activate 2
 1 --> 2:接收货品信息()
 activate 2
 2 --> 1: 显示货品信息()
 deactivate 2
 
 2 --> 3: 创建客户()
 activate 3
 2 --> 4: 客户取货品信息()
 activate 4
 4 --> 2: 货品信息()
 activate 4
 2 --> 5: 创建订单()
 activate 5
@enduml

顺序图

 UML作业第六次:分析系统,绘制顺序图

上一篇:不就写个 Hello World 嘛,至于做这么炫吗?


下一篇:Python创建虚拟环境