常用UML图及PlantUML代码画图:时序图

2023-05-0112:17:18软件工程与架构Comments2,931 views字数 4058阅读模式

目的   文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作关系;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

将交互行为建模为消息传递,通过描述消息是如何在对象间发送和接收的来动态展示对象之间的交互,包括发送消息、接受消息、处理消息、返回消息;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

直观地描述并发进程。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

概念   文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

时序图(Sequence Diagram),又名序列图、循序图,是一种二维图,横轴表示对象,纵轴表示时间,消息在各个对象之间横向传递,按照时间顺序纵向排列。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

角色(Actor)

系统角色,可以是人、机器、其他系统、子系统。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

对象(Object)

对象包括三种命名方式:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

第一种方式包括对象名和类名;例如:直播课时:课时,在时序图中,用“对象:类”表示;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

第二种方式只显示类名不显示对象名,即表示他是一个匿名对象;例如: :课程;在时序图中,用“:类”表示;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

第三种方式只显示对象名不显示类明;例如:讲师;在时序图中,用“对象”表示。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

对象的左右顺序并不重要,但是为了作图清晰整洁,通常应该遵循以下二个原则:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

  • 把交互频繁的对象尽可能的靠拢
  • 把初始化整个交互活动的对象放置在最左端

生命线(Lifeline)

在时序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

激活期(Activation)

又名控制焦点(Focus of Control),它代表时序图在对象时间线上某段时期执行的操作,以一个很窄的矩形表示。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

消息(Message)

消息类型表示
同步消息实心箭头 + 实线
异步消息空心箭头 + 实线
回调消息空心箭头 + 虚线
返回消息实心箭头 + 虚线
自关联消息实心箭头 + 实线

1)同步消息(Synchronous Message)

发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义,以一条实线和实心箭头表示。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

图例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

```plantuml@startumlUser -> Server: 1: Login (同步消息)activate Server    Server ->> Database: 2: saveInfo (异步消息)    activate Database    Server -->> User: 3: result (回调消息)deactivate Server@enduml```

 2)异步消息(Asynchronous Message)

发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的,以一条实线和空心箭头表示。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

图例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

1:同步消息,2:异步消息,3: 回调消息文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

这个图的意思就是 User 发出 Login 的消息给 Server,Server 发送保存用户消息给到数据库,注意这里的消息是异步消息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

3)回调消息(Reply Message)

在事件发生之前或之后,向其他接收者发送请求,接收者可以据此进行必要的数据同步(发送后回调),或者根据业务需求干预事件的后续处理流程(发送前回调)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

图例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

1:同步消息,2:异步消息,3: 回调消息文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

上图的意思就是 User 发出 Login 的消息给 Server 后,Server 同时发出异步消息给数据库和登录结果给到用户。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

4)返回消息(Return Message)

表示从过程调用返回。回调发送的是一个异步消息,收发双方并行进行各自的活动,并且并非任何异步消息都要有相对应的回调消息,而返回消息则是与同步消息匹配的,同步消息的发送方必须等待接收方响应后才能继续后续的动作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

图例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

```plantuml@startumlUser -> Server: 查询数据 (同步消息)Server --> User: 数据结果 (返回消息)@enduml```

5)自关联消息(Self Message)

表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

图例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

```plantuml@startumlUser -> User: 自关联消息\nselfMessage@enduml```

组合片段   文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

组合片段用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。组合片段常用的有这么几种:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

类型名称说明
alt(alternatives)选择包含一个片段列表,这个片段列表有备选的消息序列,每次只能走一个消息序列
opt(option)选项包含一个可能会发生的消息序列
loop(iteration)重复包含一个可以重复的消息序列
par(parallel)并行包含一个可以并行的消息序列
break(break)中断如果执行了此部分则放弃了序列的其他部分的执行,可用于中断 loop 片段
不常用组合片段
critical关键用在Par或seq片段中。指示此片段中的消息不得与其他消息交错。
seq弱顺序有两个或更多操作数片段。涉及同一生命线的消息必须以片段的顺序发生。如果消息涉及的生命线不同,来自不同片段的消息可能会井行交错。
strict强顺序有两个或更多操作数片段。这些片段必须按给定顺序发生。
consider考虑指定此片段描述的消息列表。其他消息可发生在运行的系统中,但对此描述来说意义不大。在"Messages"属性中键入该列表。
ignore忽略此片段未描述的消息列表。这些消息可发生在运行的系统中,但对此描述来说意义不大。在"Messages"属性中键入该列表。
assert断言操作数片段指定唯一有效的序列。通常用在Consider或Ignore片段中。
neg否定此片段中显示的序列不得发生。通常用在Consider或Ignore片段中。

1)选择(alt, alternatives)

图例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

```plantuml@startumlparticipant ClassA as aparticipant ClassB as balt a > 1    a -> b: 1:Message1    activate b    deactivate belse else    a -> b: 2:Message2    activate b    deactivate bend@enduml```

2)选项(opt, option)

图例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

```plantuml@startumlparticipant ClassA as aparticipant ClassB as bopt a > 1    a -> b: 1:Message1    activate b    deactivate bend@enduml```

3)重复(loop, iteration)

图例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

```plantuml@startumlparticipant ClassA as aparticipant ClassB as bloop    a -> b: 1:Message1    activate b    deactivate bendloop 10次    a -> b: 1:Message1    activate b    deactivate bend@enduml```

4)并行(par, parallel)

图例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

```plantuml@startumlparticipant ClassA as aparticipant ClassB as bpar    a -> b: 1:Message1    activate b    deactivate belse    a -> b: 2:Message2    activate b    deactivate belse    a -> b: 3:Message3    activate b    deactivate bend@enduml```

5)中断(break)

图例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

```plantuml@startumlparticipant ClassA as aparticipant ClassB as bparticipant ClassC as cloop 10次    a -> b: 1:Message1    activate b    deactivate b    break a > 0        a -> c: 2:Message2        activate c        deactivate c    endend@enduml```

绘制注意事项   文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

时序图的绘制步骤可简单总结如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

划清边界,识别交互的语境;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

将所要绘制的交互场景中的角色以及对象梳理出来;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

从触发整个交互的某个消息开始,在生命线之间从上到下依次画出所有消息,并注明每个消息的特性(如参数等)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

以学生在教务系统中查询其课程的成绩为例,来解释时序图的绘制方法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

划清边界,识别交互的语境文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

所谓划清边界,就是要界定好自己所要画的时序图的范围,“学生在教务系统中查询其课程的成绩”就是所要绘制的时序图的交互内容,不用往上延伸到用户登录,也不要往下延伸到下载成绩单。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

识别交互的语境,即是读懂所要画的时序图的前提和背景。比如本例中,既然学生可以查询成绩,那么该学生肯定已经注册并认证过其身份,并可选择其所考试的课程查询相应成绩。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

梳理角色和对象文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

对象的梳理是一个相对主观的过程,比如本例中,课程以及成绩分别作为了对象存在,也可以合并为数据库这一个对象。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

在本例中,角色有学生,对象有教务系统、课程、成绩。注意:角色以及对象,都为名词,动词不可作为角色和对象,如“成绩查询”不可作为对象。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

添加消息文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

学生的登录验证作为本时序图的前置行为,可直接引用到本时序图中,也可忽略不画;学生进入成绩查询页面后,页面会加载本学生的成绩查询课程列表,并显示出课程对应的成绩;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

常用UML图及PlantUML代码画图:时序图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html

```plantuml@startumlActor ":用户" as userparticipant ":教务系统" as sysparticipant ":课程" as courseparticipant ":成绩" as scoreref over user, sys  用户登录验证end refuser -> sys: 请求成绩查询课程列表activate user    activate sys        sys -> course: 获取成绩查询课程列表        activate course            course --> sys: 返回成绩查询课程列表        deactivate course        sys -> score: 获取成绩信息        activate score            score --> sys: 返回成绩信息        deactivate score        sys --> user: 显示成绩    deactivate sysdeactivate user@enduml```
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/arc/38073.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/arc/38073.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定