【PlantUML系列】序列图(二)

目录

一、参与者

二、消息交互顺序

三、其他技巧

3.1 改变参与者的顺序

3.2 使用 as 重命名参与者

3.3 注释

3.4 页眉和页脚


一、参与者

使用 participantactorboundarycontrolentity 和 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):使用 altoptlooppar 等关键字来表示条件、选项、循环和并行操作。
    • alt(alternative,选择):表示一个选择点,有两个或多个选项,但只有一个会发生。这类似于流程图中的“决策”或“分支”。在序列图中,alt 用来表示不同的条件路径,只有其中一个分支会被执行。
    • opt(optional,可选):表示一个可选的行为,即这个行为可能发生,也可能不发生。这可以用来表示某个操作是可选的,不一定在每次交互中都会出现。
    • loop(loop,循环):表示一个行为会重复执行,直到某个条件被满足。这可以用来表示循环操作,如在一定条件下重复发送消息。
    • par(parallel,并行):表示两个或多个操作是并行发生的,即它们会同时开始,并且可能同时结束。这可以用来表示并行处理的情况。
@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: 处理数据1
  A -> 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 directionright 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 18
  HeaderFontStyle Bold
  HeaderFontColor #663300
  HeaderBackgroundColor #FFFFCC
}
skinparam footer {
  FooterFontSize 12
  FooterFontStyle Italic
  FooterFontColor #330066
  FooterBackgroundColor #CCFFFF
}

header
  <b>Page Header</b>
end header

footer
  <i>Page Footer</i>
end footer

title Simple Sequence Diagram
actor User as U
participant "Web Server" as WS
participant "Database" as DB

U -> WS: Request
WS -> DB: Query
DB --> WS: Results
WS --> U: Response
@enduml

四、示例

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从excel数据导入到sqlsever遇到的问题

1、格式问题时间格式&#xff0c;excel中将日期列改为日期未生效&#xff0c;改完后&#xff0c;必须手动单击这个单元格才能生效&#xff0c;那不可能一个一个去双击。解决方案如下 2、导入之后表字段格式问题&#xff0c;数据类型的用navicat导入之后默认是nvarchar类型的&a…

On-Chip-Network之router微架构的物理实现

Low-Power Microarchitecture 自20世纪90年代以来&#xff0c;功耗一直是嵌入式芯片和高性能芯片面临的一个挑战。自2000年代中期以来&#xff0c;它已经成为大多数设计的主要约束。多核解决了功耗问题&#xff0c;由此产生的communication substrate&#xff0c;namely the on…

路径规划之启发式算法之四:蚁群算法(Ant Colony Optimization,ACO)

蚁群算法&#xff08;Ant Colony Optimization&#xff0c;ACO&#xff09;是一种模拟蚂蚁觅食行为的启发式搜索算法&#xff0c;由Marco Dorigo于1992年在他的博士论文中提出。该算法适用于解决组合优化问题&#xff0c;如旅行商问题&#xff08;TSP&#xff09;、车辆路径问题…

LabVIEW密码保护与反编译的安全性分析

在LabVIEW中&#xff0c;密码保护是一种常见的源代码保护手段&#xff0c;但其安全性并不高&#xff0c;尤其是在面对专业反编译工具时。理论上&#xff0c;所有软件的反编译都是可能的&#xff0c;尽管反编译不一定恢复完全的源代码&#xff0c;但足以提取程序的核心功能和算法…

RabbitMQ消息可靠性保证机制6--可靠性分析

在使用消息中间件的过程中&#xff0c;难免会出现消息错误或者消息丢失等异常情况。这个时候就需要有一个良好的机制来跟踪记录消息的过程&#xff08;轨迹溯源&#xff09;&#xff0c;帮助我们排查问题。 在RabbitMQ中可以使用Firehose实现消息的跟踪&#xff0c;Firehose可…

工业—使用Flink处理Kafka中的数据_ProduceRecord1

1 、 使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中,各设备每 5 分钟 生产产品总数,将结果存入Redis 中, key 值为

前端上传后端接收参数为null

记录一下工作中的问题 前端明明把文件传到后台了&#xff0c;但是后台接收参数为null 原因&#xff1a; 前端上传文件的name和后端接收参数名称不匹配 前端 后端 把前端上传的name由upfile改为file即可 本来是很基本的小问题&#xff0c;但因为自己钻了牛角尖一直没搞定&…

CSS3 布局样式及其应用

深入探讨 CSS3 布局样式及其应用 引言 在现代网页设计中&#xff0c;CSS&#xff08;层叠样式表&#xff09;不仅是设计视觉样式的工具&#xff0c;也是布局的核心技术。CSS3引入了新的布局模型&#xff0c;其中Flexbox与Grid布局在满足复杂布局需求方面表现尤为出色。本文将…

spark sql 环境安装,java 默认路径和 安装配置!

yum安装java 查看默认路径 update-alternatives --config java # Java 环境变量 export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jreexport PATH$JAVA_HOME/bin:$PATH# Spark 环境变量 export SPARK_HOME/home/vagrant/soft/sparkexport PATH…

第32天:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

时间轴&#xff1a; 32天主要学习内容&#xff1a; 1、JavaEE-HTTP-Servlet技术 2、JavaEE-数据库-JDBC&Mybatis java技术使用历史&#xff08;2023 &#xff09;&#xff1a; JavaEE-HTTP-Servlet&路由&周期: java学习范围&#xff1a; 3、Java: 功能:数据…

Android渗透环境配置教程

工具 模拟器 ADB brew install android-platform-tools set import cert # cer 证书转为 pem 证书 openssl x509 -inform DER -in cacert.der -out cacert.pem# 获取证书的 hash 值 hash$(openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -n 1)# 将 pem…

基于遗传优化SVM的电机参数预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 数据收集与预处理 4.2模型构建与训练 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 输入&#xff1a;电机结构参数x1 x2 x3 x4 x5(分别是铁心高度 铁心厚度 绕组…

【开源代码】图像水印移除-依赖python-tensorflow

下载源码 git clone https://github.com/zuruoke/watermark-removal创建conda环境 conda create -n tensorflow_gpu python=3.7 conda activate tensorflow_gpu conda install tensorflow-gpu==1.15

汇编语言学习-二

好吧&#xff0c;已经隔了两天&#xff0c;下完班看了两天&#xff0c;在电脑上装了虚拟机版的MS_DOS,主要是怕折腾坏我的电脑系统&#xff1b; 这个第二天应该是称为第二章更为合适&#xff0c;目前第二章已经看完&#xff0c;基本的命令也是敲了敲&#xff1b; 下面就进行一…

开源即时通讯与闭源即时通讯该怎么选择,其优势是什么?

在选择即时通讯软件时&#xff0c;应根据企业的经营领域来选择适合自身需求的开源或闭源方案。不同领域对开源和闭源即时通讯的理念存在差异&#xff0c;因此总结两个点简要分析这两种选择&#xff0c;有助于做出更明智的决策。 一、开源与闭源的根本区别在于软件的源代码是否…

【算法】图论——树的重心

目录 题目解析 算法原理 图的存储 算法实现 题目解析 题目解析 给定一颗树&#xff0c;树中包含n个结点&#xff08;编号&#xff09;和n-1条无向边。请找到树的重心&#xff0c;并输出将重心删除后&#xff0c;剩余各个连通块中点数的最大值。 什么是重心&#xff1f; 重…

【Vue3 ElementUI开发环境搭建】

VUE搭建关系系统 1. 安装vue脚手架工具2. 使用脚手架创建项目2.1 选择VUE版本2.2 启动demo2.3 vue工程搭建完的目录 3. 安装Element UI3.1 测试ElementUI3.1.1 更换Demo页面的内容3.1.2 引入ElementUI的样式表 1. 安装vue脚手架工具 npm install -g vue/cli执行命令后等他跑一…

Redis常见问题总结

Redis常见问题总结 1.Redis分布式存储方案 分布式存储核心特点主从&#xff08;Master/Slave&#xff09;模式一主多从&#xff0c;故障时手动切换。哨兵&#xff08;Sentinel&#xff09;模式有哨兵的一主多从&#xff0c;主节点故障自动选择新的主节点。集群&#xff08;Cl…

Yeeco成长型一体化数智赋能平台:科技矩阵重塑企业数字生态

随着科技的飞速发展&#xff0c;我们正在步入一个被称为“数智化时代”的新时代。在这个时代中&#xff0c;数据处理和分析的能力被提升到一个前所未有的高度&#xff0c;而这种变化背后的重要推动力量就是各种新兴的技术趋势。 为了在激烈的市场竞争中脱颖而出&#xff0c;Yee…

STM32 DMA直接存储器存取原理及DMA转运模板代码

DMA简介&#xff1a; 存储器映像&#xff1a; 注意&#xff1a;FLASH是只读的&#xff0c;DMA不能写入&#xff0c;但是可以读取写到其他存储器里 变量是存在运行内存SRAM里的&#xff0c;常量&#xff08;const&#xff09;是放在程序存储器FLASH里的 DMA框图&#xff1a; …