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

news2024/11/18 1:24:49

文章目录

  • 1.概述
  • 2.时序图的组成元素
    • 2.1.角色(Actor)
    • 2.2.实体和对象
    • 2.3.生命周期线(Lifeline)
      • 2.3.1.激活(Activation)
      • 2.3.2.消息(Messages)
      • 2.3.3.组合片段(Fragments)
  • 3.总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

learn C++ NO.1——命名空间域、输入输出、函数重载

前言 什么是C C(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生,最早于1979年由本贾尼斯特劳斯特卢普在AT&T贝尔工作室研发。C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的…

Cache存储系统详解(全相联映射、直接映射、组相联映射、替换策略和性能计算)

1. 存储系统的层次结构 为了解决容量、速度和价格之间的矛盾,把各种不同存储容量,不同存取速度,不同价格的存储器,按照一定的体系结构组织起来,使所存放的程序和数据按层次分布在各存储器中,形成---多层次的…

读书笔记//《数据科学工程实践》

出版时间:2021年11月 副标题:用户行为分析、A/B实验、SQLFlow 作者们是一线互联网企业的数据科学家、数据分析师和算法工程师,主要就职于滴滴、部分就职于腾讯、快手等。 点评:神仙下凡布道。感谢大佬们的分享。本书让我领略了大厂…

小白也能看懂,解读数据中台

不同的企业对数据有不同的需求。企业数据应用不断更新迭代,企业的中台系统也需要不断变化。从数据处理与数据治理两个维度出发,可以设计一个解耦的数据中台体系架构。该数据中台体系架构具有一定的柔性,可按照企业应用需求进行组合&#xff0…

多语言(CurlPHPPHPsdkJAVAC#Python)调用阿里巴巴商品API接口

2月2日消息,《晚点LatePost》独家报道,阿里集团国内批发业务1688近期完成了一系列组织和业务调整。其中,原1688商贸发展中心和产地发展中心合并为1688商家发展中心,由原商贸发展中心总经理王强负责;1688新成立分销供应…

苹果天气应用专利获批,苹果Find My技术改变防丢技术走向

根据美国商标和专利局(USPTO)公示的清单,苹果近日获得了名为“用于管理天气信息的用户界面”专利,编号为 US 11630559 B2。 苹果在专利描述中表示,部分管理天气信息的技术复杂且效率低下,用户需要多次点击…

spring redis Sentinel 哨兵 原理

客户端选择 redis 常用的连接客户端 有三个 Jedis:是老牌的Redis的Java实现客户端,提供了比较全面的Redis命令的支持,Redisson:实现了分布式和可扩展的Java数据结构。Lettuce:高级Redis客户端,用于线程安…

el-table合计功能滚动条层级问题

问题描述 版本:2.15.13 el-table在使用合计功能及固定列功能的同时,由于固定列的结构是固定区域增加了div加上定位,用来盖住下面的内容。当使用了合计功能的时候滚动条的区域在el-table__body-wrapper会导致固定列区域下的滚动条被挡住&…

计算机网络三:运输层

一、运输层 1. 概述 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能,使得不同主机好像直接连在一起一样 运输层协议是在端系统中而不是在路由器中实现的。网络路由器仅作用于网络层分组(即数据报)的网络层字段,而不检查封装在该数据报…

微搭低代码学习之数据展示

低代码平台是一个快速发展的领域,未来有着广阔的发展前景。以下是一些低代码平台未来的发展方向: 1.人工智能和机器学习 随着人工智能和机器学习技术的不断发展,低代码平台将能够更好地利用这些技术来提高应用程序的智能化和自动化水平。例如…

APP渗透—绕过反代理、反证书检测

APP渗透—绕过反代理、反证书检测 1. 前言1.1. 无法获取数据包情况 2. 反代理2.1. 反代理情况2.1.1. 某牛牛反代理2.1.2. 某探反代理 2.2. 绕过反代理2.2.1. Proxifier设置2.2.1.1. 设置代理服务器2.2.1.2. 配置代理规则2.2.1.3. 检测状态 2.2.2. 抓包测试 2.3. 总结 3. 反证书…

用HTML+CSS简单的画一个支付宝页面(超详细)

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计…

Pyqt实现合并PDF遇到的问题集合

1.exit code -1073740791报错 pycharm遇到如下报错: “Process finished with exit code -1073740791 (0xC0000409)” 就是遇到这种问题就不知道问题在哪里,有点摸不着头脑 解决措施: 1.点击导航栏“Run”后选择“Edit Configurations” …

Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用

Python是功能强大、免费、开源,实现面向对象的编程语言,在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能,这些优势使得Python在气象、海洋、地理、气候、水文和生态等地学领域的科研和工程项目中得到广泛应用。可以…

Keil使用 fromelf 生成bin文件

一、语法格式如下: fromelf [options] input_file [options] 选项如下,可以组合使用,两者之间用空格隔开: 二、在Keil中的使用过程 1、配置Output,生成可执行文件 aa即为可执行文件名,后缀为axf。…

十三、51单片机之EEPROM(I2C)

1、EEPROM简介 (1)存储设备类型:ROM、RAM、PROM(可编程ROM)、EPROM(可擦除ROM)、EEPROM(电可擦除ROM)。 (2)为什么需要EEPROM? 某些数据内容我们需要掉电不丢失且在程序运行中可以修改这些数据内容,这就需要用到EEPROM。 (3)EEPROM和flas…

家庭智能开关通断—Homekit智能

智能通断器,也叫开关模块,可以非常方便地接入家中原有开关、插座、灯具、电器的线路中,通过手机App或者语音即可控制电路通断,轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及,越来越多的人想将自己的家改…

Rust之泛型、特性和生命期(一):基本概念

开发环境 Windows 10Rust 1.69.0 VS Code 1.77.3 项目工程 这里继续沿用上次工程rust-demo 泛型、特性和生命期 每种编程语言都有有效处理概念重复的工具。在Rust中,一个这样的工具就是泛型:具体类型或其他属性的抽象替身。我们可以表达泛型的行为或…

IMX6ULL_Pro网卡配置

(15条消息) 【IMX6ULL_Pro板卡学习】配置 VMware 使用双网卡_vmware配置双网卡_爱学习的小莲的博客-CSDN博客https://blog.csdn.net/qq_52201194/article/details/127474352?ops_request_misc%257B%2522request%255Fid%2522%253A%2522168223524716800182730924%2522%252C%2522…

Windows逆向安全(一)之基础知识(十一)

二维数组 二维数组初始化 int arr[3][4]{{1,2,3,4},{5,6,7,8},{9,10,11,12} };查看反汇编 7: int arr[3][4]{ 8: {1,2,3,4}, 0040D498 mov dword ptr [ebp-30h],1 0040D49F mov dword ptr [ebp-2Ch],2 0040D4A6 mov dword …