介绍
时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或状态机中引起转换的触发事件。
组成元素
角色(Actor)
系统角色,可以是人或者其他系统,子系统。
对象(Object)
对象代表时序图中的对象在交互中所扮演的角色,位于时序图顶部和对象代表类角色
生命线(Lifeline)
生命线代表时序图中的对象在一段时期内的存在。时序图中每个对象和底部中心都有一条垂直的虚线,这就是对象的生命线,对象间 的消息存在于两条虚线间
控制焦点(Activation)
控制焦点代表时序图中的对象执行一项操作的时期,在时序图中每条生命线上的窄的矩形代表活动期。
消息(Message)
消息是定义交互和协作中交换信息的类,用于对实体间的通信内容建模,信息用于在实体间传递信息。允许实体请求其他的服务,类角色通过发送和接受信息进行通信。与编程环境相似,消息有许多不同的类型
同步消息(Synchronous Message)
消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。以一条实线+实心箭头表示。
异步消息(Asynchronous Message)
消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。以一条实线+大于号表示。
返回消息(Return Message)
返回消息表示从过程调用返回。以小于号+虚线表示。
自关联消息
表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。以一个半闭合的长方形+下方实心剪头表示。
示例
上图以一个用户登录某网站的场景来说明了时序图中的各个元素在图中的作用。
组合片段
片段类型 | 名称 | 说明 |
---|---|---|
Loop | 循环 | 在满足循环的前提下,不断的重复做某些事 |
Alt | Alternatice的缩写 | 条件分支,根据不同的条件选择不同的执行分支(类似编程中的 if else) |
Opt | Optional的缩写 | 可选分支,满足一定条件执行分支,否则跳过(类似编程中的if) |
Loop(循环)
比如某部门每个周五都会固定开周会。我们可以这样表达
Alt(选择)
比如某个部门每周一至周五需要提交日报,周五下班前需要提交当周的周报我们可以这么表达
Opt(判断)
比如某个部门的研发同学周五需要开会,其他角色不需要,我们可以这么表达
PlantUML
我们再画UML的时候可以借助一些工具,比如startUML拖拽的,还有PlantUML可以使用代码生成的。这里介绍我自己比较喜欢的PlantUML工具
网站
PlantUML在线网站
基本语法
使用起来也比较简单。这里介绍一些基本的语法,一般情况下也足够满足我们的日常使用了。一般我们会以 @startuml 开始,以@enduml结束。
标题
表改图的主要内容,一般放在第一行,使用方式如下:
title your title
autonumber
申明之后会在时序图中自动显示操作序号,使用方式如下:
autonumer
申明参与者
使用 participant 关键字来声明一个参与者可以使我们对参与者做出更多控制。
关键字 participant 用于改变参与者的先后顺序,关键字 as 用于重命名参与者
可以使用下面这些关键字来声明参与者,这会改变参与者的外观:
• actor(角色)
• boundary(边界)
• control(控制)
• entity(实体)
• database(数据库)
• collections(集合)
• queue(队列)
我们可以在上述工具网站上看各种关键字的效果
@startuml
participant participant as Foo
actor actor as Foo1
boundary boundary as Foo2
control control as Foo3
entity entity as Foo4
database database as Foo5
collections collections as Foo6
queue queue as Foo7
Foo -> Foo1 : To actor
Foo -> Foo2 : To boundary
Foo -> Foo3 : To control
Foo -> Foo4 : To entity
Foo -> Foo5 : To database
Foo -> Foo6 : To collections
Foo -> Foo7 : To queue
@enduml
消息
箭头 | 说明 |
---|---|
-> | 实线同步消息 |
–>> | 虚线返回消息 |
->> | 实线异步消息 |
注释
一般使用note left/right来注释
LOOP
@startuml
title 每周五周会通知
participant 周会提醒服务 as service
actor 部门员工 as user
loop 今天是周五
service -> user: 发送周会邀请通知
end
@enduml
ALT
使用方式如下:
ALT 今天是否是周五
service -> user: 一周周报提醒 & 周会通知
ELSE 今天不是周五
service -> user: 当日日报提醒
END
OPT
Loop 今天是否是周五
Opt 是否是研发同学
service -> user: 周会通知
ELSE
service -> user: 其他同学正常工作
end
end
分隔符
可以通过使用 == 关键词来将你的图表分割成多个逻辑步骤。
@startuml
== 初始化 ==
Alice -> Bob: 认证请求
Bob --> Alice: 认证响应
== 重复 ==
Alice -> Bob: 认证请求
Alice <-- Bob: 认证响应
@enduml
本文图例PlantUML
DEMO1
@startuml
title 用户登录某网站
autonumber
actor 用户 as user
participant 某网站 as web
user -> web: 登录操作
note left: 这是同步消息
activate user
activate web
web -> web: 验证账号密码
note right: 这是自关联消息
web -->> user: 验证成功,登录成功
note right: 这是返回消息
deactivate web
deactivate user
user ->>web: 查看网页内容1
activate user
user ->>web: 查看网页内容2
deactivate user
note left: 这是异步消息
@enduml
DEMO2
@startuml
title demo 汇总
participant 周会提醒服务 as service
actor 部门员工 as user
== LOOP demo ==
loop 今天是周五
service -> user: 发送周会邀请通知
end
== ALT demo ==
ALT 今天是否是周五
service -> user: 一周周报提醒 & 周会通知
ELSE 今天不是周五
service -> user: 当日日报提醒
END
== OPT demo ==
Loop 今天是否是周五
Opt 是否是研发同学
service -> user: 周会通知
ELSE
service -> user: 其他同学正常工作
end
end
@enduml
效果如下所示:
参考文件
百度百科
书籍-UML需求分析