UML-时序图以及PlantUML绘制

news2024/9/23 3:28:49

介绍

时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或状态机中引起转换的触发事件。

组成元素

角色(Actor)

系统角色,可以是人或者其他系统,子系统。

对象(Object)

对象代表时序图中的对象在交互中所扮演的角色,位于时序图顶部和对象代表类角色

生命线(Lifeline)

生命线代表时序图中的对象在一段时期内的存在。时序图中每个对象和底部中心都有一条垂直的虚线,这就是对象的生命线,对象间 的消息存在于两条虚线间

控制焦点(Activation)

控制焦点代表时序图中的对象执行一项操作的时期,在时序图中每条生命线上的窄的矩形代表活动期。

消息(Message)

消息是定义交互和协作中交换信息的类,用于对实体间的通信内容建模,信息用于在实体间传递信息。允许实体请求其他的服务,类角色通过发送和接受信息进行通信。与编程环境相似,消息有许多不同的类型

同步消息(Synchronous Message)

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

异步消息(Asynchronous Message)

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

返回消息(Return Message)

返回消息表示从过程调用返回。以小于号+虚线表示。

自关联消息

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

示例

在这里插入图片描述

上图以一个用户登录某网站的场景来说明了时序图中的各个元素在图中的作用。

组合片段

片段类型名称说明
Loop循环在满足循环的前提下,不断的重复做某些事
AltAlternatice的缩写条件分支,根据不同的条件选择不同的执行分支(类似编程中的 if else)
OptOptional的缩写可选分支,满足一定条件执行分支,否则跳过(类似编程中的if)

Loop(循环)

比如某部门每个周五都会固定开周会。我们可以这样表达
在这里插入图片描述

Alt(选择)

比如某个部门每周一至周五需要提交日报,周五下班前需要提交当周的周报我们可以这么表达
在这里插入图片描述

Opt(判断)

比如某个部门的研发同学周五需要开会,其他角色不需要,我们可以这么表达

在这里插入图片描述

PlantUML

我们再画UML的时候可以借助一些工具,比如startUML拖拽的,还有PlantUML可以使用代码生成的。这里介绍我自己比较喜欢的PlantUML工具

网站

PlantUML在线网站

基本语法

使用起来也比较简单。这里介绍一些基本的语法,一般情况下也足够满足我们的日常使用了。一般我们会以 @startuml 开始,以@enduml结束。

标题

表改图的主要内容,一般放在第一行,使用方式如下:

title your title

autonumber

申明之后会在时序图中自动显示操作序号,使用方式如下:

autonumer

申明参与者

使用 participant 关键字来声明一个参与者可以使我们对参与者做出更多控制。
关键字 participant 用于改变参与者的先后顺序,关键字 as 用于重命名参与者
可以使用下面这些关键字来声明参与者,这会改变参与者的外观:
• actor(角色)
• boundary(边界)
• control(控制)
• entity(实体)
• database(数据库)
• collections(集合)
• queue(队列)
我们可以在上述工具网站上看各种关键字的效果

@startuml
participant participant as Foo
actor actor as Foo1
boundary boundary as Foo2
control control as Foo3
entity entity as Foo4
database database as Foo5
collections collections as Foo6
queue queue as Foo7
Foo -> Foo1 : To actor
Foo -> Foo2 : To boundary
Foo -> Foo3 : To control
Foo -> Foo4 : To entity
Foo -> Foo5 : To database
Foo -> Foo6 : To collections
Foo -> Foo7 : To queue
@enduml

在这里插入图片描述

消息

箭头说明
->实线同步消息
–>>虚线返回消息
->>实线异步消息

注释

一般使用note left/right来注释

LOOP

@startuml

title 每周五周会通知
participant 周会提醒服务 as service
actor 部门员工 as user

loop 今天是周五
  service -> user: 发送周会邀请通知
end 
@enduml

ALT

使用方式如下:

ALT 今天是否是周五
  service -> user: 一周周报提醒 & 周会通知
ELSE 今天不是周五
  service -> user: 当日日报提醒
END

OPT

Loop 今天是否是周五
  Opt 是否是研发同学
    service -> user: 周会通知
  ELSE
    service -> user: 其他同学正常工作
  end 
end

分隔符

可以通过使用 == 关键词来将你的图表分割成多个逻辑步骤。

@startuml
== 初始化 ==
Alice -> Bob: 认证请求
Bob --> Alice: 认证响应
== 重复 ==
Alice -> Bob: 认证请求
Alice <-- Bob: 认证响应
@enduml

本文图例PlantUML

DEMO1

@startuml

title 用户登录某网站
autonumber
actor 用户 as user
participant 某网站 as web


user -> web: 登录操作
note left: 这是同步消息
activate user
activate web
web -> web: 验证账号密码
note right: 这是自关联消息

web -->> user: 验证成功,登录成功
note right: 这是返回消息

deactivate web
deactivate user



user ->>web: 查看网页内容1
activate user
user ->>web: 查看网页内容2
deactivate user

note left: 这是异步消息


@enduml

在这里插入图片描述

DEMO2

@startuml

title demo 汇总
participant 周会提醒服务 as service
actor 部门员工 as user


== LOOP demo ==

loop 今天是周五
  service -> user: 发送周会邀请通知
end 

== ALT demo ==
ALT 今天是否是周五
  service -> user: 一周周报提醒 & 周会通知
ELSE 今天不是周五
  service -> user: 当日日报提醒
END

== OPT demo ==

Loop 今天是否是周五
  Opt 是否是研发同学
    service -> user: 周会通知
  ELSE
    service -> user: 其他同学正常工作
  end 
end

@enduml

效果如下所示:
在这里插入图片描述

参考文件

百度百科
书籍-UML需求分析

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

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

相关文章

Python基础4——面向对象

目录 1. 认识对象 2. 成员方法 2.1 成员方法的定义语法 3. 构造方法 4. 其他的一些内置方法 4.1 __str__字符串方法 4.2 __lt__小于符号比较方法 4.3 __le__小于等于符号比较方法 4.4 __eq__等号比较方法 5. 封装特性 6. 继承特性 6.1 单继承 6.2 多继承 6.3 pas…

MySQL数据库调优————ORDER BY语句

ORDER BY调优的核心原理&#xff0c;原则是利用索引的有序性跳过排序环节 关于ORDER BY语句的一些尝试 我们使用employees表进行尝试&#xff0c;索引情况如下 在执行计划的结果中&#xff0c;Extra里如果存在&#xff0c;Using filesort则表示&#xff0c;排序没有使用到索…

JavaScript 代码规范

文章目录JavaScript 代码规范JavaScript 代码规范变量名空格与运算符代码缩进语句规则对象规则每行代码字符小于 80命名规则HTML 载入外部 JavaScript 文件使用 JavaScript 访问 HTML 元素文件扩展名使用小写文件名JavaScript 代码规范 所有的 JavaScript 项目适用同一种规范。…

PADS设计基础

目录 1 PADS设计流程简介 2 快捷键 2.1鼠标指令 2.2快捷键 3元件库概述 3.1元件库分类 3.2创建元件库 3.3新的元件类型的创建 3.3.1 插座的创建 1 PADS设计流程简介 常规PADS设计流程:设计启动→建库→原理图设计→网表调入→布局→布线→验证优化→设计资料输出→加…

VUE3源码分析————rollup打包遇见问题

文章目录一、require无法使用二、The requested module xxx does not provide an export named default三、__filename无法使用四、path.resolve() arguments must be a string一、require无法使用 在使用rullup打包的过程中&#xff0c;我们需要在最外层的package.json文件中…

时间序列分解法

影响时间序列变化的因素通常由长期趋势&#xff0c;季节变动&#xff0c;周期变动&#xff0c;不规则变动几部分组成 长期趋势指现象在较长时期内持续发展变化的一种趋向或状态。季节变动是由于季节的变化引起的现象发展水平的规则变动&#xff08;波动长度固定&#xff09;周…

n阶数字回转方阵 ← 模拟法

【问题描述】 请编程输出如下数字回旋方阵。 【算法代码】 #include <bits/stdc.h> using namespace std;const int maxn100; int z[maxn][maxn];void matrix(int n) {int num2;z[0][0]1;int i0,j1;while(i<n && j<n) {while(i<j) z[i][j]num;while(j&…

Redis底层原理(持久化+分布式锁)

Redis底层原理 持久化 Redis虽然是个内存数据库&#xff0c;但是Redis支持RDB和AOF &#xff08;Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xff0c;也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中 &#xff1b;Appen…

基于粒子群优化算法的电动汽车充放电V2G研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

CMMI-质量保证

质量保证&#xff08;Quality Assurance, QA&#xff09;的目的是提供一种有效的人员组织形式和管理方法&#xff0c;通过客观地检查和监控“过程质量”与“产品质量”&#xff0c;从而实现持续地改进质量。质量保证是一种有计划的、贯穿于整个产品生命周期的质量管理方法。质量…

Java ~ Collection/Executor ~ LinkedBlockingDeque【总结】

一 概述 简介 LinkedBlockingDeque&#xff08;链接阻塞双端队列&#xff09;类&#xff08;下文简称链接阻塞双端队列&#xff09;是BlockingDeqeue&#xff08;阻塞双端队列&#xff09;接口的唯一实现类&#xff0c;采用链表的方式实现。链接阻塞双端队列与LinkedBlockingQu…

【Java|golang】1792. 最大平均通过率---封装最小堆

一所学校里有一些班级&#xff0c;每个班级里有一些学生&#xff0c;现在每个班都会进行一场期末考试。给你一个二维数组 classes &#xff0c;其中 classes[i] [passi, totali] &#xff0c;表示你提前知道了第 i 个班级总共有 totali 个学生&#xff0c;其中只有 passi 个学…

Windows使用ssh协议远程连接ubuntu linux系统

Windows使用ssh协议远程连接ubuntu linux系统一、Windows远程连接ubuntu linux系统二、开启ubuntu ssh服务三、获取ubuntu子系统的ip地址四、从windows上通过ssh连接到ubuntu子系统五、设置ubuntu系统ssh自启动&#xff08;18.04&#xff09;一、Windows远程连接ubuntu linux系…

【JavaScript】JavaScript基本使用方法

如何回复程序员发来的短信&#xff1a;Hello world —hello nerd. 前言&#xff1a; 大家好&#xff0c;我是程序猿爱打拳。今天我给大家讲解的是初识JavaScript中基本组成成分、引入方法、输入输出语句&#xff0c;并用源码与效果图的方式展示给大家。 目录 1.JavaScript组成…

手机文字转语音软件哪个好用?超火的两款好用的文字转语音软件

有很多小伙伴对短视频配音比较感兴趣&#xff0c;但方方面面了解得不多&#xff0c;比如&#xff1a;配音有哪几种方法&#xff1f;需要注意些什么&#xff1f;用手机就可以操作么&#xff1f;好用的文字转语音软件有哪些&#xff1f;这篇文&#xff0c;小编就带大家简单了解一…

(C语言篇)扫雷的实现

文章目录 一、开始时的基本思维&#xff1a;二、进入游戏的逻辑(test.c文件中实现)三、游戏的编写 1. 初始化棋盘 I. test.cII. game.hIII. game.c 2.打印棋盘 I. test.cII. game.hIII. game.c 3.布置雷 I. test.cII. game.hIII. game.c 4.排查雷 I. test.cII. game.hIII. gam…

Java集合学习之Map

1.什么是Map Java里的Map接口是一个集合根接口&#xff0c;表示一个 键值对&#xff08;Key-Value&#xff09; 的映射。 简单来说就是键和值是一对的&#xff0c;每一个 Key都有唯一确定的 Value对应。 其中要求 键&#xff08;Key&#xff09; 唯一&#xff0c;因为是按照…

宏观经济研究:全国各省、地级市-社会融资规模增量数据(包含总额及8类明细)2013-2021年

数据来源&#xff1a;中国人民银行 时间跨度&#xff1a;2013-2021年&#xff0c;季度数据&#xff08;累计数&#xff09; 区域范围&#xff1a;全国31省份 数据字段&#xff1a; 31个省市社会融资规模增量数据&#xff0c;包含社会融资总额以及8类明细&#xff08;人民币…

12-Composer的配置与使用详解

1、自定义类与非类的自动加载与测试 # composer> php 包管理工具 &#xff0c;类似npm1.自己写的类&#xff0c;函数&#xff0c;接口&#xff0c;常量等全局成员&#xff0c;通过自动加载来实现按需加载 2.自己写的代码&#xff0c;有哪些依赖&#xff0c;用到了哪些外部成…

MySQL数据库调优————GROUP BY及DISTINCT优化

GROUP BY 三种处理GROUP BY的方式 松散索引扫描&#xff08;Loose Index Scan&#xff09;紧凑索引扫描&#xff08;Tight Index Scan&#xff09;临时表&#xff08;Temporary table&#xff09; 三种方式的性能一次递减 松散索引扫描 无需扫描满足条件的所有索引键即可返…