UML时序图详解
上篇文章,介绍了UML状态图,并通过visio绘制一个全自动洗衣机的UML状态图实例进行讲解。
本篇,来继续介绍UML中的另一种图——时序图。
1 时序图简介
时序图(Sequence Diagram),也叫顺序图,或序列图,是一种UML动态图。
UML具有许多不同类型的图表,包括:
- 静态图:用例图、类图、包图
- 动态图:活动图、状态图、时序图、协作图
时序图通过描述对象之间发送消息的时间顺序显示多个对象之间的交互模式。

时序图将交互关系表示为一个二维图
- 纵向是时间轴,时间沿竖线向下延伸;横向轴代表了在协作中各独立对象的类元角色。
- 类元角色用生命线表示。当对象存在时,角色用一条虚线表示;当对象的过程处于激活状态时,生命线是一个垂直矩形。
- 消息用从一个对象的生命线到另一个对象生命线的箭头表示。
- 箭头以时间顺序在图中从上到下排列。
2 时序图元素介绍
2.1 参与者

参与者,或称为系统角色,以一个小人图标表示。
2.2 对象

对象,以一个矩形表示,在一个系统中可以有多个对象。
2.3 生命线

生命线就是一条垂直的虚线。
2.4 激活

激活,也叫会话,或控制焦点,代表时序图中对象执行一项操作的时期, 表示该对象被占用以完成某个任务,以一个垂直的窄的矩形表示。
2.5 消息
2.5.1 (同步)消息

以一条实线和实心箭头表示。
消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。
2.5.2 返回消息

以小于号和虚线表示。
返回消息表示从过程调用返回。
2.5.3 异步消息

以一条实线和大于号表示。
消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。
2.5.4 自关联消息

以一个半闭合的长方形+下方实心剪头表示。
表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。
2.6 片段

2.6.1 选择片段
选择片段,或称条件分支,可根据不同的条件,执行不同的交互,类似于if-else语句

2.6.2 循环片段
表明该片段会被重复执行,类似于while或for语句

2.6.3 并向片段

2.6.4 片段总结
片段的功能,除了上面介绍的选择、循环和并向、还有许多其它类型,这里详细列举一下,作为参考:
| 片段类型 | 名称 | 说明 |
|---|---|---|
| Alt | 选择 | 在一组行为中根据特定的条件选择某个交互 |
| Loop | 循环 | 交互片段会被重复执行 |
| Par | 并行 | 支持交互片段的并发执行 |
| Opt | 选项 | 表示一个可选的行为 |
| Break | 中断 | 提供了和编程语言中的break类拟的机制 |
| Seq | 弱顺序 | 有两个或更多操作数片段,如果消息涉及的生命线不同,会并行交错 |
| Strict | 强顺序 | 有两个或更多操作数片段,这些片段必须按给定顺序发生 |
默认情况下,序列图表明可能发生的一系列消息。在运行的系统中,可能会出现您未选择显示在关系图上的其他消息。
以下片段类型可用于更改此释义:
| 片段类型 | 名称 | 说明 |
|---|---|---|
| Consider | 考虑 | 明确标志了应该被处理的消息 |
| Assert | 断言 | 标志了在交互片段中作为事件唯一的合法继续者的操作数 |
| Neg | 否定 | 用来标志不应该发生的交互 |
| Ignore | 忽略 | 明确定义了交互片段不应该响应的消息 |
3 visio绘制UML时序图
3.1 visio创建时序图
新建一个visio文件,打开后会自动提示选择创建某种类型的图,这里选择"软件和数据库 ->UML序列"

点击确定之后,会进入UML时序图的编辑界面,左侧可以看到用于UML时序图编辑的基本元素,将这些元素拖拽到右侧的编解面板中,可以看到这些元素的基本结构形式:

注意visio中的生命线绘图元素,实际上包含了参加者元素或对象元素,所以命名为了参与者生命线和对象生命线
3.2 时序图实例
下面通过一个实例来介绍一下UML时序图的画法。
这是一个嵌入式开发中,常见的对物联网设备进行配网的操作流程,配网的方式有很多,具体可看之前的文章:【图解】物联网设备的N种Wi-Fi配网方式,这个时序图是其中的一种配网方式——设备热点配网。
解读一下此时序图:
- 参与者(主角)是用户,因为是用户触发了整个流程的执行
- 对象有3个:手机上的APP程序、待连网的物联网设备、WiFi路由器
- 配网的时序逻辑为:
- 用户按下设备的配网按钮,设备开启一个热点,并广播自己的热点信息(热点名称和密码)
- 用户在APP上输入WiFi路由器的名称和密码(用于后续发给设备)
- 用户操作APP,连接上设备的热点,然后把WiFi路由器的名称和密码发给设备
- 设备收到WiFi路由器的名称和密码后,尝试连接路由器,配网成功

本时序图中,暂未体现出片段的用法,以后有能用到片段用法的例子再举例分析。
3.4 visio中框图不能调节宽度解决
在用Visio绘制UML时序图,使用“交互操作数”时,可能遇到宽度被锁定不能调节的问题,解决方法如下:
步骤一:文件----选项----高级----常规-----勾选“以开发人员模式运行”

步骤二:菜单栏出现“开发工具”选项,点击受保护框图,取消宽度的保护

4 总结
本篇介绍了UML时序图的基础知识,并通过visio绘制一个物联网设备WIFI配网的UML时序图实例,来介绍UML时序图的画法与所表达的含义。
相关文章:
UML时序图详解
上篇文章,介绍了UML状态图,并通过visio绘制一个全自动洗衣机的UML状态图实例进行讲解。 本篇,来继续介绍UML中的另一种图——时序图。 1 时序图简介 时序图(Sequence Diagram),也叫顺序图,或序列图,是一…...
Centos7.6部署postgresql15主从
目录 安装pg15(master和standby)主数据库配置(master)初始化数据库创建归档日志目录设置数据库访问权限修改数据库配置文件开启数据库 从数据库配置(standby)同步主库的数据文件创建文件standby.signal启动从数据库 主从状态验证master上验证standby上验…...
【ThinkPHP6系列学习-2】多应用模式配置
这里写一写TP6下配置多应用。因为TP6和TP5有所差异,TP6默认是单应用模式(单模块),而我们实际项目中往往是多应用的(多个模块),所以在利用TP6是就需要进行配置,开启多应用模式。 目录…...
Linux内核oops panic简析
源码基于:Linux 5.4 0. 前言 内核异常的级别大致分为三个:BUG、oops、panic。 BUG 是指那些不符合内核的正常设计,但内核能够检测出来并且对系统运行不会产生影响的问题,比如在原子上下文中休眠,在内核中用 BUG 标识。…...
Spark大数据处理讲课笔记4.8 Spark SQL典型案例
文章目录 零、本讲学习目标一、使用Spark SQL实现词频统计(一)数据源 - words.txt(二)创建Maven项目(三)添加依赖和构建插件(四)修改源目录名称(五)创建日志属…...
WhatsApp Business 多人使用终极指南
今时今日,几乎每个人的手机上都安装了 WhatsApp,不少电商更会依赖 WhatsApp作为和客户沟通的主要渠道。但对有一定规模的店铺来说,WhatsApp绑定一个号码和设备的设定实在很不方便。如何才能用WhatsApp Business批量处理客户查询呢?…...
布局和视图的常用属性
0、用户界面由布局和GUI组件组成 之前的项目中都是使用线性布局LinearLayout,LinearLayout将视图显示在一行或一列中。其使用方法如下所示: <LinearLayoutxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width…...
解说天下之操作系统
解说天下之操作系统 本文由桌案drawon (https://www.drawon.cn),云晶(https://www.yunjingxz.com)创始人根据多年从业经验, 从操作系统的起源,应用分类, 设计分类,以及资源使用角度对操作系统进…...
Pruning 系列 (八)layer常用简枝(torch)方法
环境 python 3.9numpy 1.24.1pytorch 2.0.0+cu117一、prune.random_unstructured pytorch:文档地址 用法: torch.nn.utils.prune.random_unstructured(module, name, amount) 参数: module(torch.nn.Module) -包含要修剪的张量的模块 name(str) -module 中的参数名称,将…...
Gigabyte Z490 Vision D i9-10900k电脑 Hackintosh 黑苹果efi引导文件
原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件型号驱动情况 主板Gigabyte Z490 Vision D 处理器Intel i9-10900k已驱动 内存64GB G.Skill Trident Z 3600Mhz CL18已驱动 硬盘西数 WDS250G3X0C-00SJG0 ( SN750) …...
UWB智慧工厂人员定位系统源码,人员在岗监控、车辆实时轨迹监控源码
近年来人员定位系统在工业领域的发展势头迅猛,工业识别与定位成为促进制造业数字化的关键技术。通过实时定位可以判断所有的人、物、车的位置。实时定位系统要适用于复杂工业环境,单一技术是很难实现的,需要融合多种不同的定位技术࿰…...
从认识元注解到使用元注解
前言:注解是Java语言中的一种特殊语法,它可以为代码提供更加灵活的元数据信息,方便代码的处理和使用。而元注解则是用于定义注解的注解,它可以为注解提供更多的元数据信息和特性。本文将介绍如何自定义元注解,包括认识…...
【C++从0到王者】第六站:类和对象(下)
文章目录 一、再谈构造函数1.构造函数体赋值2.初始化列表1>初始化列表的使用2>初始化列表的注意事项 3.explicit关键词 二、static成员1.如何统计当前程序中变量的个数2.static的特性3.从1加到n4.设计一个类,只能在栈或者堆上开辟空间 三、友元1.友元函数2.友…...
AJax和Axios的讲解
目录 Ajax Ajax基本介绍 同步异步 原生Ajax 原生的Ajax使用方式 Axios 基本介绍 Axios的基本使用 发送 get 请求 发送 post 请求 Axios快速入门 请求方法的别名 练习 Ajax Ajax基本介绍 Ajax: 全称Asynchronous JavaScript And XML,异步的JavaScript和XML…...
企业落地数字化转型,如何部署战略规划
当前环境下,各领域企业通过数字化相关的一切技术,以数据为基础、以用户为核心,创建一种新的,或对现有商业模式进行重塑就是数字化转型。这种数字化转型给企业带来的效果就像是一次重构,会对企业的业务流程、思维文化、…...
新的网络钓鱼即服务平台让网络犯罪分子生成令人信服的网络钓鱼页面
至少从2022年中期开始,网络犯罪分子就利用一个名为“伟大”的新型网络钓鱼即服务(PhaaS或PaaS)平台来攻击微软365云服务的企业用户,有效地降低了网络钓鱼攻击的门槛。 思科Talos研究员蒂亚戈佩雷拉表示:“目前,Greatness只专注于微软365钓鱼…...
MySQL的隐式转换
隐式转换 若字符串是以数字开头,并且全部都是数字,则转换的数字结果是整个字符串;部分是数字,则转换的数字结果是截止到第一个不是数字的字符为止 若字符串不是以数字开头,则转换的数字结果是 0 varchar str "…...
LeetCode:23. 合并 K 个升序链表
23. 合并 K 个升序链表 1)题目2)过程3)代码1. 最开始2.初步优化 4)结果1. 最开始2. 初步优化 1)题目 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合…...
js:正则表达式常用方法总结test、exec、match、matchAll、replace、replaceAll、search
文章目录 正则使用testmatch/matchAll不加g加ggroup 的使用 matchAll不加g加g exec不加g加g searchreplace 正则使用 常用的几种方法有:test、exec、match、matchAll、replace、replaceAll、search test // 匹配返回true,不匹配false /e/.test("…...
分析车载蓝牙通话只有前喇叭声音,后面喇叭无声背后原因
车载蓝牙通话只有前喇叭声音,后面喇叭无声背后原因 大家有没有注意到车载蓝牙连接后通话的时候只有前喇叭的有声音,后面喇叭没声音呢?特别是后装的车载多媒体上基本都是这样,细思下为什么这样的原因, 采访后装车载技术…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
