【PlantUML系列】序列图(二)
目录
一、参与者
二、消息交互顺序
三、其他技巧
3.1 改变参与者的顺序
3.2 使用 as 重命名参与者
3.3 注释
3.4 页眉和页脚
一、参与者
使用 participant
、actor
、boundary
、control
、entity
和 database
等关键字来定义不同类型的参与者。例如:
-
Actor(参与者):代表与系统交互的外部用户或外部系统。在用例图中,参与者通常用来表示系统的用户或利益相关者。在序列图中,参与者可以表示系统的外部用户或系统。
-
Boundary(边界):代表系统的边界,通常用来表示系统的控制范围。在用例图中,边界用来定义系统的责任和范围。在序列图中,边界可以用来表示系统的控制层,例如用户界面或系统的外部接口。
-
Control(控制):代表系统的控制结构,通常用来表示系统的内部控制机制或流程。在序列图中,控制可以用来表示系统的内部组件,如控制器或处理器。
-
Entity(实体):代表系统中的存储机制或持久化数据。在序列图中,实体通常用来表示存储数据的组件,如数据库或数据存储系统。
-
Database(数据库):代表系统中的数据库或数据存储。在序列图中,数据库用来表示系统中的持久化存储,如关系型数据库或非关系型数据库。
-
Participant(参与者):这个术语在UML中并不常用,但在PlantUML中,它通常用来表示序列图中的一个角色或对象,可以是人、系统、设备或其他任何可以发送或接收消息的实体。
@startuml
actor User
participant "浏览器" as Browser
participant "服务端" as Server #orange
@enduml
二、消息交互顺序
- 同步消息(Synchronous Message):使用实线箭头(
->
)表示同步消息,发送者在发送消息后会等待接收者的响应。 - 异步消息(Asynchronous Message):使用虚线箭头(
->>
)表示异步消息,发送者在发送消息后不会等待接收者的响应。 - 返回消息(Return Message):使用带有实心圆点的箭头(
--
)表示返回消息,通常用于表示方法调用的返回。 - 活条(Activation Bar):当对象执行操作时,会在其生命线上显示激活条,表示对象在这段时间内是活跃的。
- 自关联消息(Self-Message):当对象需要调用自身的另一个方法时,可以使用自关联消息。
- 创建和销毁消息:使用
new
关键字表示创建新对象,使用destroy
关键字表示销毁对象。 - 组合片段(Combined Fragments):使用
alt
、opt
、loop
、par
等关键字来表示条件、选项、循环和并行操作。- alt(alternative,选择):表示一个选择点,有两个或多个选项,但只有一个会发生。这类似于流程图中的“决策”或“分支”。在序列图中,
alt
用来表示不同的条件路径,只有其中一个分支会被执行。 - opt(optional,可选):表示一个可选的行为,即这个行为可能发生,也可能不发生。这可以用来表示某个操作是可选的,不一定在每次交互中都会出现。
- loop(loop,循环):表示一个行为会重复执行,直到某个条件被满足。这可以用来表示循环操作,如在一定条件下重复发送消息。
- par(parallel,并行):表示两个或多个操作是并行发生的,即它们会同时开始,并且可能同时结束。这可以用来表示并行处理的情况。
- alt(alternative,选择):表示一个选择点,有两个或多个选项,但只有一个会发生。这类似于流程图中的“决策”或“分支”。在序列图中,
@startuml
' 定义参与者
actor User as 用户
participant A as "组件A"
participant B as "组件B"
participant C as "组件C"' 同步消息
用户 -> A: 请求登录 (同步消息)' 异步消息
A ->> B: 发送验证请求 (异步消息)' 激活条表示A开始处理请求
activate A
A -> A: 内部处理
deactivate A' 返回消息
B --> A: 验证结果' 自关联消息
activate B
B -> B: 检查权限
deactivate B' 创建消息
A -> C: <<create>> 创建会话
activate C
C -> A: 会话创建成功' alt 表示选择,只有其中一个分支会被执行
alt 用户权限足够A -> B: 请求资源
else 用户权限不足A -> User: 显示错误
end' opt 表示可选行为,可能发生也可能不发生
opt 用户选择记住密码A -> B: 保存登录状态
end' loop 表示循环,直到满足条件
loop 每次请求A -> B: 请求数据B -> A: 返回数据
end' par 表示并行操作,两个操作会同时开始
par 数据处理A -> B: 处理数据1A -> C: 处理数据2
end' 销毁消息
A -> C: <<destroy>> 销毁会话
deactivate C' 交互结束
User <-- A: 登录完成@enduml
三、其他技巧
3.1 改变参与者的顺序
使用 order
关键字可以改变参与者的顺序,order
的顺序越小越靠前。例如:
@startuml sequence_order
' 通过order定义参与者顺序
participant Last order 30
participant Middle order 20
participant First order 10' 交互消息
First -> Middle: 第一个参与者发送消息
Middle -> Last: 中间参与者发送消息
Last -> First: 最后一个参与者发送消息
@enduml
3.2 使用 as
重命名参与者
使用 as
关键字可以为参与者指定一个别名,使得时序图更加清晰。例如:
@startuml sequence_as
actor Bob #red
participant Alice
participant "I have a really\nlong name" as L #99FF99
Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction
@enduml
3.3 注释
使用 note
关键字:可以用来添加注释,它可以指定注释的放置位置,如左侧(left)、右侧(right)、上方(over)或下方(note)。
使用 !
符号:!
符号用于添加注释,这些注释不会在生成的图表中显示。
使用 *
符号:*
符号也可以用来添加注释,这些注释同样不会在生成的图表中显示。
使用 $$
符号:$$
符号用于添加多行注释,这些注释不会在生成的图表中显示。
使用 left to right direction
或 right to left direction
:
这些关键字可以用来设置序列图的布局方向,虽然它们不是注释,但可以用来组织图表的显示方式。
@startuml' 使用note关键字添加注释
note right of User: 用户通过Web浏览器进行操作
note left of AppServer: 应用服务器处理业务逻辑
note over Server, Database: 服务器和数据库之间的交互' 使用!符号添加不会显示在图表中的注释
! 这是一段开发注释,用于说明服务器和应用服务器之间的通信协议' 使用*符号添加不会显示在图表中的注释
* 这是一段星号注释,用于提醒开发者注意某些事项' 使用$$符号添加多行注释
$$
这是一段多行注释,
可以跨越多行,
用于详细说明复杂的交互过程。
$$@enduml
3.4 页眉和页脚
使用 header
和 footer
添加页眉和页脚。例如:
@startuml
skinparam header {HeaderFontSize 18HeaderFontStyle BoldHeaderFontColor #663300HeaderBackgroundColor #FFFFCC
}
skinparam footer {FooterFontSize 12FooterFontStyle ItalicFooterFontColor #330066FooterBackgroundColor #CCFFFF
}header<b>Page Header</b>
end headerfooter<i>Page Footer</i>
end footertitle Simple Sequence Diagram
actor User as U
participant "Web Server" as WS
participant "Database" as DBU -> WS: Request
WS -> DB: Query
DB --> WS: Results
WS --> U: Response
@enduml
四、示例
相关文章:

【PlantUML系列】序列图(二)
目录 一、参与者 二、消息交互顺序 三、其他技巧 3.1 改变参与者的顺序 3.2 使用 as 重命名参与者 3.3 注释 3.4 页眉和页脚 一、参与者 使用 participant、actor、boundary、control、entity 和 database 等关键字来定义不同类型的参与者。例如: Actor&…...

WPF+MVVM案例实战与特效(三十四)- 日志管理:使用 log4net 实现高效日志记录
文章目录 1、概述2、日志案例实现1、LogHelper 类详解2、代码解释3、配置文件4、实际应用案例场景 1:记录系统运行日志场景 2:记录数据库操作日志场景 3:记录 HTTP 请求日志5、总结1、概述 在WPF软件开发中,良好的日志记录机制对于系统的调试、维护和性能优化至关重要。lo…...

前端测试框架 jasmine 的使用
最近的项目在使用AngulaJs,对JS代码的测试问题就摆在了面前。通过对比我们选择了 Karma jasmine ,使用 Jasmine做单元测试 ,Karma 自动化完成,当然了如果使用 Karma jasmine 前提是必须安装 Nodejs。 安装好 Nodejs ,使用 npm 安装好必要…...

Qwen2-VL视觉大模型微调实战:LaTex公式OCR识别任务(完整代码)
《SwanLab机器学习实战教程》是一个主打「开箱即用」的AI训练系列教程,我们致力于提供完善的数据集、源代码、实验记录以及环境安装方式,手把手帮助你跑起训练,解决问题。 Qwen2-VL是通义千问团队最近开源的大语言模型,由阿里云通…...

「Mac玩转仓颉内测版42」小学奥数篇5 - 圆和矩形的面积计算
本篇将通过 Python 和 Cangjie 双语解决简单的几何问题:计算圆的面积和矩形的面积。通过这道题,学生将掌握如何使用公式解决几何问题,并学会用编程实现数学公式。 关键词 小学奥数Python Cangjie几何计算 一、题目描述 编写一个程序&#…...

Groom Blender to UE5
Groom Blender to UE5 - Character & Animation - Epic Developer Community Forums Hello, 你好, While exporting my “groom” from blender to UE5, I notice that the curves have a minimal resolution in Unreal. However I would like to get the same …...

开发一套ERP 第十弹 图片作为配置文件,本地读取图片,定时更新图片类型
echo Hello World在同一数据库中在建一个图床数据表,产品一,一对应,图片命名 最优的方案,使用 rust 在构建一个 http server 用于管理非数据库资源,也可以将来对接不同的图床,部署方便 考虑到数据库资源和图片资源,都可以被远程访问这种方法最佳...

第七十六条:努力保持故障的原子性
当对象抛出异常之后,通常我们期望这个对象仍然保持在一种定义良好的可用状态之中,即使失败是发生在执行某个操作的过程中间。对于受检的异常而言,这尤为重要,因为调用者期望能从这种异常中进行恢复。一般而言,失败的方…...

Word分栏后出现空白页解决方法
Word分栏后出现空白页解决方法 只需要在后面的空白页设置相同的页面布局(分栏格式),然后按Ctrl backspace即可删除该空白页。 参考文章:Word分栏出现空白怎么解决。...

基于HTML和CSS的校园网页设计与实现
摘要 随着计算机、互联网与通信技术的进步,Internet在人们的学习、工作和生活中的地位也变得越来越高,校园网站已经成为学校与学生,学生与学生之间交流沟通的重要平台,对同学了解学校内发生的各种事情起到了重要的作用。学校网站…...

【算法day7】字符串:反转与替换
题目引用 反转字符串反转字符串II替换数字 1.反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&am…...

分布式存储厂商
分布式存储 以下是对分布式存储厂商XSKY星辰天合、IOMesh(SmartX)、SmartX的深度对比: 1. XSKY星辰天合 产品与服务:XSKY星辰天合提供统一存储平台,支持块、文件和对象存储服务。已为近2400家大型政企机构实施部署&…...

合合信息扫描全能王线下体验活动:科技与人文的完美交融
文章目录 前言签到欢迎仪式产品体验智能高清滤镜去除透字效果照片高清修复 破冰行动会议感受 前言 作为合合信息旗下扫描全能王的忠实粉丝,上周,我很荣幸参与了扫描全能王“扫出你的能量buff”快闪活动及技术交流会。这次活动的不仅让我对这款强大的文档…...

单链表在Go语言中的实现与操作
简介 单链表是一种基本的线性数据结构,由节点组成,每个节点存储数据和指向下一个节点的指针。今天,我们将深入探讨如何在Go语言中实现和操作单链表。 单链表的优缺点 优点: 动态内存分配,灵活性高。插入和删除节点操…...

网关整合sentinel无法读取nacos配置问题分析
sentinel无法读取nacos配置问题分析 1.spring-cloud-gateway整合sentinel2.问题现象3.原因猜测4.源码分析4. 结语 最近公司需要上线一个集约项目,虽然为内网项目,但曾经有过内网被攻破,导致内部系统被攻击的案例,且集约系统同时在…...

简化XPath表达式的方法与实践
XPath表达式用于在XML或HTML文档中定位元素。有时候,XPath表达式可能会变得非常冗长和复杂,这不仅难以阅读和维护,而且也可能影响性能。因此,学会如何简化XPath表达式是非常重要的。本文将介绍几种简化XPath表达式的方法ÿ…...

【文件下载】接口传递文件成功和失败时,前端的处理方式
问题 使用bold类型从后端接口获取文件流,获取成功的时候通过a标签下载;失败的时候,后端返回的是json,这个时候就无法向用户展示后端返回的错误提示信息。 思路 根据返回类型是否为 application/json 区分是否返回成功ÿ…...

html+css网页设计马林旅行社移动端4个页面
htmlcss网页设计马林旅行社移动端4个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…...

视频 的 音频通道提取 以及 视频转URL 的在线工具!
视频 的 音频通道提取 以及 视频转URL 的在线工具! 工具地址: https://www.lingyuzhao.top/toolsPage/VideoTo.html 它提供了便捷的方法来处理视频文件,具体来说是帮助用户从视频中提取音频轨道,并将视频转换为可以通过网络访问的URL链接。无…...

容易被遗忘的测试用例
网络服务器启动了吗?应用程序服务器启动了吗?数据库上线了吗?测试数据是否预先加载到数据库中?每当我们准备开始测试应用程序时,一切都应该已经准备妥当。 然而,当测试开始后,我们可能会漏掉一些…...

uni-app写的微信小程序如何实现账号密码登录后获取token,并且每天的第一次登录后都会直接获取参数而不是耀重新登录(2)
接uni-app写的微信小程序如何实现账号密码登录后获取token,并且每天的第一次登录后都会直接获取参数而不是耀重新登录(1), 在main.js中 import App from ./App// #ifndef VUE3 import Vue from vue import ./uni.promisify.adap…...

统计中间件稳定性指标
目前订单业务域涉及中间件:MySQL、Redis、TiDB、MQ、ES。(遗漏项请补充) 一、RDS 资源使用率 实例ID实例名称规格maxCPUavgCPUmaxDISKmaxIOPSavgIOPS活跃会话maxTPSavgTPSmaxQPSavgQPS实例风险 慢查询 慢查询会消耗大量的系统资源&#x…...

移动端使用REM插件postcss之postcss-px2rem
目录 一、概念 二、核心特性 三、功能 四、插件模块 注意事项: 五、使用 安装: 配置 一、概念 工具类型:PostCSS是一个基于JavaScript的工具,用于转换CSS的工作流。核心理念:PostCSS的核心理念是“转换而非替…...

FPGA Xilinx维特比译码器实现卷积码译码
FPGA Xilinx维特比译码器实现卷积码译码 文章目录 FPGA Xilinx维特比译码器实现卷积码译码1 Xilinx维特比译码器实现2 完整代码3 仿真结果 MATLAB (n,k,m)卷积码原理及仿真代码(你值得拥有)_matlab仿真后代码-CSDN博客 MATLAB 仿真…...

hive 行转列
行转列的常规做法是,group bysum(if())【或count(if())】 建表: CREATE TABLE table2 (year INT,month INT,amount DOUBLE );INSERT INTO table2 (year, month, amount) VALUES(1991, 2, 1.2),(1991, 3, 1.3),(1991, 4, 1.4),(1992, 1, 2.1),(1992, 2, 2.2),(1992…...

Vue中使用ECharts图表中的阈值标记(附源码)
在数据处理和可视化领域,我们经常需要对一系列数据点进行分析。本文将介绍如何在给定的数据点中找到对应于特定Y值的X值,并设置标线起始点标记在ECharts图表中,效果图如下: 实现步骤 1、数据准备 let seriesData [// 提供日期…...

【特征融合】融合空间域和频率域提升边缘检测能力
基于深度学习的边缘检测方法已显示出巨大的优势,并获得了可喜的性能。然而,目前大多数方法只能从空间(RGB)域提取特征进行边缘检测,可挖掘的信息有限。因此,这些方法无法很好地应用于物体与背景颜色相似的场景。为了应对这一挑战,提出了一种融合空间域和频率域特征的新型…...

深入理解AVL树:结构、旋转及C++实现
1. AVL树的概念 什么是AVL树? AVL树是一种自平衡的二叉搜索树,其发明者是Adelson-Velsky和Landis,因此得名“AVL”。AVL树是首个自平衡二叉搜索树,通过对树的平衡因子进行控制,确保任何节点的左右子树高度差最多为1&…...

AUTOSAR AP 汽车API知识点总结(Automotive API )R24-11
汽车API知识点总结 一、背景与目标 背景:智能互联汽车正逐步依赖远程诊断、软件更新等功能以确保行驶安全,并且用户已习惯于通过智能设备中的应用程序控制连接设备。虽然AUTOSAR标准支持车辆软件的可更新性,但尚未提供将AUTOSAR应用产生的数据和功能安全可靠地暴露给非AUTO…...

【HarmonyOS开发】超详细的ArkTS入门
安装DevEco Studio和新建项目就不多说了,可以移步官网 就可以把他们拆成这几个部分了,如果看不懂可以暂时忽略下面冒号后面的内容 装饰器:用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中Entry、Component和St…...