【UML建模】时序图(Sequence Diagram)

1.概述

时序图,也称为顺序图,是用来展示对象之间交互关系的一种UML图表,它通过描述在不同时间上发生的对象的动作来帮助开发人员更清楚地理解系统的结构和功能,从而达到优化代码、简化设计、提高软件的质量和效率、帮助团队成员沟通协作等目的。

时序图与活动图的区别在于:

  • 活动图用于描述系统或软件中的业务流程,强调的是流程步骤。
  • 时序图用于描绘多个对象之间的交互行为,强调的是时间顺序。

时序图更加贴近于代码的实现逻辑,如果想描述的是多个对象之间的调用、响应、回调等发生的顺序,就可以使用时序图

2.时序图的组成元素

我们可以直接通过一个现成的时序图来进行学习,下面是我从微信官方文档上截的一张APP支付的时序图。
在这里插入图片描述
上图中有很多各式各样的图形,如果没有接触过时序图的话,这张图乍一看会感觉有点复杂,但是没有关系,接下来我们就将这张图分解开来,一个一个的解释各个图形的含义。

另外,也会对上图中没有使用到又相对比较重要的图形做一定的补充。

2.1.角色(Actor)

角色整个流程的外部参与者,可以是某个人,也可以是某个项目或者服务,与用例图中的执行者(参与者)是一个意思,例如上面的支付时序图中的角色就是实际要执行支付动作的用户。角色通常会使用一个小人来表示:
在这里插入图片描述

2.2.实体和对象

实体与角色的意思相近,指的是流程内部的组成部分,可以表示一个服务、一个系统或者一个抽象的业务流程等,实体在时序图中一般使用矩形框带下划线的圆形来表示。
在这里插入图片描述
个人更喜欢使用矩形框来表示,在同一个实体下的对象比较多的情况下,矩形框更方便把宽度拉长。


对象的含义较多,与开发人员关联度最高的一种含义就是指的某个类的对象实例,可以填写在生命周期线上的矩形框内,一般是通过对象名:类名来表示,这里引入了一个生命周期线的概念,我们继续往下看。

2.3.生命周期线(Lifeline)

生命周期线是时序图中的最核心的内容,它通过一个横向的矩形框和一条纵向的虚线组成,接着上面所说的对象的概念,在上图中的商户后台系统中有两个不同的对象共同完成支付流程,则可以表示成下图的格式:
在这里插入图片描述

2.3.1.激活(Activation)

激活表示的是在对象的生命周期中在执行操作的时间段,它是在生命周期线上通过一个纵向的矩形框表示的。
在这里插入图片描述

2.3.2.消息(Messages)

消息用来表达对象之间的交互关系(即:请求响应的关系),并不是指的消息中间件中的消息,常见的交互关系有以下几种:

  • 调用消息(call/invocation message):在不同类的对象间发起的调用,即request,用实线+实心三角箭头表示。
  • 响应消息(return message):对调用消息的响应,即response,用虚线+箭头表示。
  • 自调用消息(self message):通常表示同一个对象中的不同方法间的调用。
  • 递归消息(recursive message):通常表示同一个对象中的方法自己调用自己。

按照这个规则,修改一下上面的时序图,在下图中使用了上述的前面三种消息,使用红色字体标注。
在这里插入图片描述

可以看到的是在消息的线上面,通过数字描述了调用和响应的时间顺序,通过文字来描述当前流程步骤的含义,同时,还可以加上调用的方法名,以明确与代码的对应关系。

在微信官方的时序图上,使用了递归消息来表达了自调用的含义,这里可能是因为只有实体没有对象信息,想表达的是不同对象中的方法调用(即商户系统后台中有不同的对象),但是在对象比较明确的情况下,虽然递归消息也不是不能用,但不推荐,因为递归消息更常用的含义是用来表示一个方法自己调用自己,用它来表达自调用容器引起歧义。
在这里插入图片描述


调用消息出了同步调用以外,还可以异步调用,异步调用的表示方式众说纷纭,有实线+箭头,实线+空心三角形,实线+闪烁箭头等等,当不能明确的表示异步调用时,在调用的实线上明确的标注出是异步调用也不失为一种方式,谁都能看得懂。
在这里插入图片描述

2.3.3.组合片段(Fragments)

组合片段表示的是多个操作形成的组合操作,用于表达更加丰富的操作,常见的是循环、判断。片段的图形是一个包裹了多个生命线、消息的大矩形框,再大矩形框左上角还有一个小框,里面填写片段的操作类型,大概是这么一个样子:
在这里插入图片描述
上图中的Loop表示的是循环,而OptAlt两个都表示条件分支(判断),但两者有一定的区别:
Opt:只在特性条件下执行,如果不满足则跳过,相当于if代码块。
Alt:表示不同的路径会执行不同的操作,相当于if...else代码块。

现在有一个查询支付订单状态的流程,就可以通过组合片段来表示更为丰富的交互信息,为了方便区分,我给不同块上了不同的颜色。

在这里插入图片描述

在原有的微信时序图中统一通过Alt来表示了一组操作以及if判断,虽然能大概理解其含义,但实际上没有那么准确,不推荐这么画:
在这里插入图片描述
当然,还有更多的组合片段的用法,例如:

  • par:支持交互片段的并行运行
  • region:临界区,例如synchronized
  • ref:用于引入其他的时序图片段
  • ……

因为用的频率不高,这里就不详细说明了。

3.总结

总的来说,时序图可以看做是对活动图中交互明细的补充,细节更加丰富,能够指导开发同学进行开放工作。
一个完整流程的时序图中的交互关系可能是非常复杂的,在实际的工作中如果只需要对某一些复杂的逻辑进行建模,像上面的示例那样,只使用其中的一部分也未尝不可。

最后再总结一下本篇的主要内容,即时序图的用法:

  • 角色:用来表示实际触发到当前流程的人(系统、服务)是谁。
  • 实体和对象:与角色类似,也是表示系统、服务等,区别在于实体与对象在流程内部
  • 生命周期线:时序图中最核心的内容,用于表示对象间的交互操作,包含一个矩形框和一条纵向的虚线
    • 激活:某个对象在整个流程中发生交互操作的时间段,表示为纵向的长矩形框
    • 消息:对象间实际发生的交互,例如同步调用、异步调用、响应、自调用、递归等,使用不同的箭线表示。
      • 同步调用:实线 + 实心三角箭头。
      • 异步调用:实线 + 空心三角箭头。(最好在实线上标注异步调用)
      • 响应:虚线 + 箭头
      • 自调用:与同步调用类似,只是同步调用指向其他对象的激活框,自调用指向自己。
      • 递归:与自调用类似,只是在指向自己的激活框上,会多出一小块矩形框。
  • 组合片段:用来表达多个消息的组合操作,如循环、判断等,通过一个大矩形框将消息包裹起来,左上角还有一个小框填写当前的组合操作类型。
    • loop:循环操作
    • Alt:判断操作,类似于if..else
    • Opt:也是判断操作,与Alt的区别在于,只有if没有else
  • 26
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
基于UML 的资料室管理系统 用例 时序图 状态图 测试分析 毕业设计论文 摘要 I Abstract II 目录 III 第1章 引言 1 第2章 系统需求分析 2 1.1项目描述 2 1.1.1 开发背景 2 1.1.2 开发目的 2 1.1.3 业务范围 2 1.1.4 参考文档 3 1.1.5 术语说明 3 1.2约束及假定 3 1.2.1软件运行环境及技术约束 3 1.2.2 交付及部署约束 3 1.3功能性需求 4 1.3.1系统角色 4 1.3.2需求描述 6 1.4.非功能性需求 12 1.4.1性能需求 12 1.4.2可扩展性 12 1.4.3可用性 12 1.4.4安全性 12 1.4.5易用性 13 1.4.6可维护性 13 1.5.用例规约描述 13 1.5.1 目的 13 1.5.2 定义 13 1.5.3 用例描述 14 第3章 系统设计实现 51 3.1 系统分析设计 51 3.1.1架构设计 51 3.1.2领域模型 52 3.1.3时序图 55 3.1.4状态图 71 3.1.4设计类 72 3.2 数据库设计 76 3.2.1书籍类型表 77 3.2.2书籍基本表 77 3.2.3书籍明细表 78 3.2.4管理员信息表 78 3.2.5读者信息表 78 3.2.6预借信息表 79 3.2.7借阅信息 79 3.2.8罚款信息表 80 3.3 用户界面设计 80 3.3.1系统主界面 80 3.3.2查询统计界面 81 3.3.3库存统计界面 82 3.3.4类型统计界面 82 3.3.5借阅统计界面 83 3.3.6推荐购书统计界面 83 3.3.7季度报表统计界面 84 3.4 系统功能实现 84 3.4.1开发环境配置 84 3.4.2系统功能实现 84 3.4.3系统测试 99 第4章 系统运行测试 102 4.1系统运行环境 102 4.1.1 系统硬件运行环境 102 4.1.2 系统软件运行环境 102 4.2 系统运行调试 102 4.3 系统操作步骤 103 第5章 结 论 104 参考文献 105 致 谢 106 附 录 107 附录A: 主要源程序 107 附录B: 软件使用说明书 108

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挥之以墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值