plantUML使用指南之序列图

news2024/12/23 1:49:32

文章目录

  • 前言
  • 一、序列图
    • 1.1 语法规则
      • 1.1.1 参与者
      • 1.1.2 生命线
      • 1.1.3 消息
      • 1.1.4 自动编号
      • 1.1.5 注释
      • 1.1.6 其它
      • 1.1.7 例子
    • 1.2 如何画好
  • 参考

前言

在软件开发、系统设计和架构文档编写过程中,图形化建模工具扮演着重要的角色。而 PlantUML 作为一种强大且简洁的开源工具,深受开发者和架构师们的喜爱。通过使用简单的文本语法,PlantUML 能够将复杂的概念转化为直观而易于理解的图形表示,使得软件设计和沟通变得更加高效和便捷。

本文旨在介绍和探索 PlantUML 的应用领域、语法规则和关键功能。我们将研究 PlantUML 的序列图,并通过实际案例和应用场景来展示其实际价值。

  • github地址:https://github.com/plantuml/plantuml

  • 中文文档:https://plantuml.com/zh/

一、序列图

序列图(Sequence diagram),也叫时序图、顺序图,是一种常用的UML图形建模工具 ,用于描述多个对象参与实现业务目标时,彼此之间按时间顺序进行交互的过程.

1.1 语法规则

1.1.1 参与者

  • participant(参与者)

  • actor(角色)

  • boundary(边界)

  • control(控制)

  • entity(实体)

  • database(数据库)

  • collections(集合)

  • queue(队列)

    @startuml
    'https://plantuml.com/sequence-diagram
    
    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
    
    @enduml
    

    actor.png

1.1.2 生命线

关键字activatedeactivate用来表示参与者的生命活动激活和退出,destroy表示一个参与者的生命线的终结

@startuml
participant User

User -> A: DoWork
activate A

A -> B: << createRequest >>
activate B

B -> C: DoWork
activate C
C --> B: WorkDone
destroy C

B --> A: RequestCreated
deactivate B

A -> User: Done
deactivate A

@enduml

lifeline.png

自动激活生命线,需要和 return 配合使用

@startuml
autoactivate on
alice -> bob : hello
bob -> bob : self call
bill -> bob #005500 : hello from thread 2
bob -> george ** : create
return done in thread 2
return rc
bob -> george !! : delete
return success

@enduml

autolifeline.png

1.1.3 消息

消息箭头

消息种类箭头
同步消息->
异步消息->>
返回消息–>
  • 并行 par

    par.png

    @startuml
    participant ClassA as a
    participant ClassB as b
    par
        a -> b: 1:Message1
        activate b
        deactivate b
    else
    
        a -> b:2:Message2
        activate b
        deactivate b
    else
        a -> b:3:Message3
        activate b
        deactivate b
    end
    @enduml
    
  • 选择 alt/else

    alt.png

    @startuml
    participant ClassA as a
    participant ClassB as b
    alt 成功
        a -> b: 1:Message1
        activate b
        deactivate b
    else 失败
        a -> b:2:Message2
        activate b
        deactivate b
    end
    @enduml
    
  • 循环 loop

    loop.png

    @startuml
    participant ClassA as a
    participant ClassB as b
    loop 1000次
        a -> b: 1:Message1
        activate b
        deactivate b
    end
    @enduml
    
  • 分组 group

    group.png

    @startuml
    participant ClassA as a
    participant ClassB as b
    group 自定义标签 [自定义]
        a -> b: 1:Message1
        activate b
        deactivate b
    end
    @enduml
    

1.1.4 自动编号

autonumber.png

@startuml
autonumber
participant ClassA as a
participant ClassB as b

a -> b: Message1
activate b
deactivate b

a -> b:Message2
activate b
deactivate b

a -> b:Message3
activate b
deactivate b

@enduml

1.1.5 注释

note.png

@startuml
autonumber
participant ClassA as a
participant ClassB as b

a -> b: Message1
note left: 左注释
activate b
deactivate b

a -> b:Message2
activate b
deactivate b
note right: 右注释

a -> b:Message3
note left
注释
多行
end note
activate b
deactivate b

@enduml

1.1.6 其它

  • 增加空间

  • 分割

  • 页面标题、页眉和页脚

    page.png

    @startuml
    header Page Header
    footer Page %page% of %lastpage%
    
    title Example Title
    autonumber
    participant ClassA as a
    participant ClassB as b
    
    a -> b: Message1
    activate b
    deactivate b
    ' 增加空间
    |||
    a -> b:Message2
    activate b
    deactivate b
    ' 分割
    == 分割 ==
    a -> b:Message3
    activate b
    deactivate b
    @enduml
    

1.1.7 例子

charge.png

@startuml
actor       用户 as user
participant 充值APP as APP
participant 管理后台 as admin
participant 手机运营商 as mobile

autonumber
user -> APP:输入手机号码
activate user
activate APP
activate admin
APP -> admin:校验通过,发送手机号码
admin -> admin:校验通过,判断归属地
admin --> APP:返回归属地、话费套餐信息
deactivate admin
APP -> APP:展示归属地话费套餐信息
deactivate  APP
user -> APP:选择话费套餐
activate APP
activate admin
APP -> admin:生成提交订单(订单号、手机号..)
admin -> admin: 校验订单信息,生成充值订单
admin --> APP: 返回订单创建成功
deactivate  admin
APP -> APP: 展示支付方式选项(支付宝、微信等)
deactivate  APP
user -> APP: 选择支付方式
activate APP
APP -> APP: 发送支付请求调起支付平台
user -> APP: 支付套餐费用
activate admin
APP -> admin: 查询支付结果
admin -> admin: 查询支付结果,更新订单信息
group 并行
    admin --> APP:返回支付结果
    APP -> APP: 展示支付结果,更新订单信息
    activate mobile
    admin -> mobile:发送充值请求
    mobile -> mobile: 接收订单,处理充值
    mobile -> admin: 通知充值结果
    deactivate mobile
end
admin -> admin: 接收充值结果,更新订单信息
admin --> APP: 返回充值结果
deactivate admin
APP -> APP: 更新订单信息
APP --> user: 展示充值结果
@enduml

1.2 如何画好

  1. 定义参与者和对象: 首先,确定在时序图中涉及的各个参与者和对象。参与者可以是系统组件、用户或其他实体,对象可以是消息发送者、接收者或系统部件。
    • participant关键字定义参与者,用于表示系统中的各个对象或角色,它们可以是实际的物理对象、软件组件或外部系统
    • actor关键字表示与系统进行交互的外部用户、角色或其他系统
    • boundary关键字用于表示系统与外部实体之间的边界,通常用来表示用户界面或系统与外界的交互接口。
    • control关键字用于表示系统中的控制器、逻辑组件或业务流程。
    • entity关键字用于表示系统中的数据实体或领域对象,通常用于表示数据存储、业务实体或数据库表等
    • database关键字用于表示数据库或持久化存储系统。
    • collections关键字用于表示集合、列表或数组等数据结构
    • queue关键字用于表示队列或消息传递机制
  2. 描述消息交互顺序: 确定消息传递的顺序和相关时间线。使用 PlantUML 中的箭头表示消息的发送和接收。同时,通过使用数字标记,表示消息的顺序和时间跨度。
  3. 细化交互细节: 如果需要详细描述消息的内容、参数或其他信息,可以在消息箭头上方添加文本标签,描述消息的具体内容。
  4. 绘制生命线和激活期: 在时序图中,生命线表示对象的存在期,激活期表示对象的活动时间段。您可以使用 PlantUML 中的生命线和激活期来清晰地展示对象的生存和活动状态。

参考

  1. 10年产品经理教你3步画好UML时序图,轻松掌握流程分析利器

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

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

相关文章

springboot265基于Spring Boot的库存管理系统

基于Spring Boot库存管理系统 Inventory Meanagement System based on Spring Boot 摘 要 当下&#xff0c;如果还依然使用纸质文档来记录并且管理相关信息&#xff0c;可能会出现很多问题&#xff0c;比如原始文件的丢失&#xff0c;因为采用纸质文档&#xff0c;很容易受潮…

《vtk9 book》 官方web版 第3章 - 计算机图形基础 (3 / 5)

3.8 演员几何 我们已经看到了光照属性如何控制演员的外观&#xff0c;以及相机如何结合变换矩阵将演员投影到图像平面上。剩下的是定义演员的几何形状&#xff0c;以及如何将其定位在世界坐标系中。 建模 计算机图形学研究中的一个重要主题是建模或表示物体的几何形状。…

二分查找【详解】

本期介绍&#x1f356; 主要介绍&#xff1a;二分查找的简单思路&#xff0c;为什么必须在有序的前提下才能使用二分查找&#xff0c;该怎么用C程序来实现二分查找&#xff0c;二分查找的局限性&#x1f440;。 文章目录 1. 题目2. 思路3. 前提条件4. 编写程序 1. 题目 在一个有…

Android Studio开发项目——记账簿应用

项目资源&#xff1a; 百度网盘链接&#xff1a;https://pan.baidu.com/s/1zN9lrIypi1t_QpuoBcdBNQ?pwdxj5h 提取码&#xff1a;xj5h 项目设计内容 1.基本功能描述 电子记账本是一种在线财务管理工具&#xff0c;用于帮助用户记录和管理他们的收入与支出。以下是电…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的水果新鲜程度检测系统(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;开发水果新鲜程度检测系统对于提高农业产量和食品加工效率具有重大意义。本篇博客详细介绍了如何利用深度学习构建一个水果新鲜程度检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并结合了YOLOv7、YOLOv6、YOLOv5的对比…

ChatGPT 结合实际地图实现问答式地图检索功能基于Function calling

ChatGPT 结合实际地图实现问答式地图检索功能基于Function calling ChatGPT结合实际业务&#xff0c;主要是研发多函数调用&#xff08;Function Calling&#xff09;功能模块&#xff0c;将自定义函数通过ChatGPT 问答结果&#xff0c;实现对应函数执行&#xff0c;再次将结果…

打卡学习kubernetes——了解kubernetes组成及架构

目录 1 什么是kubernetes 2 kubernetes组件 3 kubernetes架构 1 什么是kubernetes kubernetes是一个旨在自动部署、扩展和运行应用容器的开源平台。目标是构建一个生态系统&#xff0c;提供组件和工具以减轻在公共和私有云中运行应用程序的负担。 kubernetes是&#xff1a…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的跌倒检测系统详解(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;本研究介绍了一个基于深度学习和YOLOv8算法的跌倒检测系统&#xff0c;并对比分析了包括YOLOv7、YOLOv6、YOLOv5在内的早期版本性能。该系统可在多种媒介如图像、视频文件、实时视频流中准确识别跌倒事件。文内详解了YOLOv8的工作机制&#xff0c;并提供了相应…

一套plm系统大约多少钱?彩虹PLM系统

一套PLM&#xff08;产品生命周期管理&#xff09;系统的价格因多个因素而异&#xff0c;包括企业规模、需求复杂性、系统功能、技术支持和厂商选择等。一般来说&#xff0c;面向小型和微型企业的PLM产品&#xff0c;其价位在5万元~15万元左右&#xff1b;面向中型企业的中端PL…

STM32---通用定时器(二)相关实验

写在前面&#xff1a;前面我们学习了基本定时器、通用定时器的相关理论部分&#xff0c;了解到通用定时器的结构框图&#xff0c;总共包含六大模块&#xff1a;时钟源、控制器、时基单元、输入捕获、公共部分以及输出捕获。对相关模块的使用也做详细的讲解。本节我们主要是对上…

力扣刷题日记——L724. 寻找数组的中心下标

1. 前言 今天是力扣刷题日记的第二天&#xff0c;今天依旧是一道简单题啊&#xff0c;慢慢来&#xff0c;先看看题目是什么吧。 2. 题目描述 给你一个整数数组 nums &#xff0c;请计算数组的 中心下标。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和…

数据结构入门(3)顺序表和链表

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直…

汤唯短发造型:保留经典和适合自己的风格,也许才是最重要的

汤唯短发造型&#xff1a;保留经典和适合自己的风格&#xff0c;也许才是最重要的 汤唯短发造型登上Vogue四月刊封面&#xff0c;引发网友热议。#李秘书讲写作#说说是怎么回事&#xff1f; 这次Vogue四月刊的封面大片&#xff0c;汤唯以一头短发亮相&#xff0c;身穿五颜六色的…

Python笔记:函数

Python函数定义规则&#xff1a; 函数代码块以def关键词开头&#xff0c;后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆括号中间&#xff0c;圆括号之间可以用于定义参数。return [表达式] 结束函数&#xff0c;选择性地返回一个值给调用方&#xff0c;不带表…

力扣(LeetCode)142.环形链表 II

本博客讲解一道以前大厂面试常考的链表oj题 ——————————————————————— 题目介绍&#xff1a; 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通…

【C语言】操作符相关知识点

移位操作符 << 左移操作符 >>右移操作符 左移操作符 移位规则&#xff1a; 左边抛弃、右边补0 右移操作符 移位规则&#xff1a; 首先右移运算分两种&#xff1a; 1.逻辑移位 左边用0填充&#xff0c;右边丢弃 2.算术移位 左边用原该值的符号位填充&#xff0c;…

桥接模式以及在JDBC源码剖析

介绍&#xff1a; 1、桥接模式是指&#xff1a;将实现和抽象放在两个不同类层次中&#xff0c;使两个层次可以独立改变 2、是一种结构型设计模式 3、Bridge模式基于类的最小设计原则&#xff0c;通过使用封装、聚合以及继承等行为让不同的类承担不同的职责。 4、特点&#xff1…

【智能算法】樽海鞘群算法(SSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2017年&#xff0c;Mirjalili受到樽海鞘集群行为启发&#xff0c;提出了樽海鞘群算法(Salp Swarm Algorithm, SSA)。 2.算法原理 2.1算法思想 樽海鞘集群是领导者-追随者类型算法&#xff0c;整体…

基于SpringBoot的“医院信管系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“医院信管系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 功能结构图 系统首页界面图 用户注册界面图 医生…

CANopen转Profinet网关连接西门子PLC与变流器通讯

CANopen转Profinet网关&#xff08;XD-COPNm20&#xff09;在智能领域&#xff0c;变流器的应用非常广泛&#xff0c;变流器一般会采用CANopen协议。现场采用台达的变流器&#xff08;支持CANopen协议&#xff09;作为CANopen从站&#xff0c;S7-1500系列PLC做主站&#xff0c;…