【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链接。无…...

容易被遗忘的测试用例
网络服务器启动了吗?应用程序服务器启动了吗?数据库上线了吗?测试数据是否预先加载到数据库中?每当我们准备开始测试应用程序时,一切都应该已经准备妥当。 然而,当测试开始后,我们可能会漏掉一些…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...
Qt学习及使用_第1部分_认识Qt---Qt开发基本流程
前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...

React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)
React React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么,Fiber架构,面试向面试官介绍,详细解释 用户: React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么,Fiber架构,面试向面试官介绍&#x…...

Xcode 16.2 版本 pod init 报错
Xcode 版本升级到 16.2 后,项目执行 pod init 报错; ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchron…...
【免杀】C2免杀技术(十五)shellcode混淆uuid/ipv6/mac
针对 shellcode 混淆(Shellcode Obfuscation) 的实战手段还有很多,如下表所示: 类型举例目的编码 / 加密XOR、AES、RC4、Base64、Poly1305、UUID、IP/MAC改变字节特征,避开静态签名或 YARA结构伪装PE Stub、GIF/PNG 嵌入、RTF OLE、UUID、IP/MAC看起来像合法文件/数据,弱…...