plantUML使用指南之序列图

文章目录

  • 前言
  • 一、序列图
    • 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-diagramparticipant 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 UserUser -> A: DoWork
activate AA -> B: << createRequest >>
activate BB -> C: DoWork
activate C
C --> B: WorkDone
destroy CB --> A: RequestCreated
deactivate BA -> 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
    para -> b: 1:Message1activate bdeactivate b
    elsea -> b:2:Message2activate bdeactivate b
    elsea -> b:3:Message3activate bdeactivate b
    end
    @enduml
    
  • 选择 alt/else

    alt.png

    @startuml
    participant ClassA as a
    participant ClassB as b
    alt 成功a -> b: 1:Message1activate bdeactivate b
    else 失败a -> b:2:Message2activate bdeactivate b
    end
    @enduml
    
  • 循环 loop

    loop.png

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

    group.png

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

1.1.4 自动编号

autonumber.png

@startuml
autonumber
participant ClassA as a
participant ClassB as ba -> b: Message1
activate b
deactivate ba -> b:Message2
activate b
deactivate ba -> b:Message3
activate b
deactivate b@enduml

1.1.5 注释

note.png

@startuml
autonumber
participant ClassA as a
participant ClassB as ba -> b: Message1
note left: 左注释
activate b
deactivate ba -> 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 ba -> 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 mobileautonumber
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 mobileadmin -> 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.mzph.cn/news/733523.shtml

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

相关文章

【stm32 外部中断】

中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行 中断优先级&#xff1a;当有多个中…

LoadBalancer (本地负载均衡)

1.loadbalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别 Nginx是服务器负载均衡&#xff0c;客户端所有请求都会交给nginx&#xff0c;然后由nginx实现转发请求&#xff0c;即负载均衡是由服务端实现的。 loadbalancer本地负载均衡&#xff0c;在调用微服务接口时候&a…

考研复习C语言初阶(4)+标记和BFS展开的扫雷游戏

目录 1. 一维数组的创建和初始化。 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 3. 数组越界 4. 冒泡…

【Java JVM】Class 文件的加载

Java 虚拟机把描述类的数据从 Class 文件加载到内存, 并对数据进行校验, 转换解析和初始化, 最终形成可以被虚拟机直接使用的 Java 类型, 这个过程被称作虚拟机的类加载机制。 与那些在编译时需要进行连接的语言不同, 在 Java 语言里面, 类的加载, 连接和初始化过程都是在程序…

解决阿里云服务器开启frp服务端,内网服务器开启frp客户端却连接不上的问题

解决方法&#xff1a; 把阿里云自带的Alibabxxxxxxxlinux系统 换成centos 7系统&#xff01;&#xff01;&#xff01;&#xff01; 说一下我的过程和问题&#xff1a;由于我们内网的服务器在校外是不能连接的&#xff0c;因此我弄了个阿里云服务器做内网穿透&#xff0c;所谓…

大模型学习过程记录

一、基础知识 自然语言处理&#xff1a;能够让计算理解人类的语言。 检测计算机是否智能化的方法&#xff1a;图灵测试 自然语言处理相关基础点&#xff1a; 基础点1——词表示问题&#xff1a; 1、词表示&#xff1a;把自然语言中最基本的语言单位——词&#xff0c;将它转…

你应该打好你的日志,起码避免被甩锅

大家好&#xff0c;我是蓝胖子,相信大家或多或少都有这样的经历&#xff0c;当你负责的功能出现线上问题时&#xff0c;领导第一时间便是找到你询问原因&#xff0c;然而有时问题的根因或许不在你这儿&#xff0c;只是这个功能或许依赖了第三方或者内部其他部门&#xff0c;这个…

【Unity InputSystem】实用指南:在PC端(鼠标与键盘)、手机端(触摸屏)、主机手柄上同步实现角色移动与跳跃功能

前引 随着Unity的不断发展&#xff0c;开发者对于项目的输入系统要求也日益提高。在进行多平台适配和跨平台移植时&#xff0c;常常需要改变输入系统&#xff0c;这给开发者带来了不少困扰。而Unity官方推出的InputSystem插件&#xff0c;则是为了解决这一问题而推出的全新输入…

Linux内存管理--系列文章壹

一、引子 作者、我在上班闲着没事的时候&#xff0c;看了一些关于Linux内存管理和程序装载、链接的文章&#xff0c;然后自己就总结出了一些东西。 本系列文章一方面将资料中的长篇大论总结到最少、以方便可以直接找到答案&#xff0c;一方面也是方便面试的时候可以吹牛逼。 L…

【Docker】golang使用DockerFile正确食用指南

【Docker】golang使用DockerFile正确食用指南 大家好 我是寸铁&#x1f44a; 总结了一篇golang使用DockerFile正确食用指南✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 问题背景 今天寸铁想让编写好的go程序在docker上面跑&#xff0c;要想实现这样的效果&#xff0c;就需要用…

小程序 van-field label和输入框改成上下布局

在组件上面加个样式就行&#xff1a;custom-style"display:block;" <van-field label"备注说明" type"textarea" clearable title-width"100px" custom-style"display:block;" placeholder"请输入" /> …

大载重无人机基础技术,研发一款50KG负重六旋翼无人机技术及成本分析

六旋翼无人机是一种多旋翼无人机&#xff0c;具有六个旋翼&#xff0c;通常呈“X”形布局。它采用电动串列式结构&#xff0c;具有垂直起降、悬停、前飞、后飞、侧飞、俯仰、翻滚等多种飞行动作的能力。六旋翼无人机通常被用于航拍、农业植保、环境监测、地形测绘等领域。 六旋…

Day34-Linux网络管理4

Day34-Linux网络管理4 1. IP地址分类与子网划分基础1.1 什么是IP地址1.2 十进制与二进制的转换1.3 IP地址的分类1.4 私网地址和局域网地址 2. 通信类型3. 子网划分讲解3.1 为什么要划分子网&#xff1f;3.2 什么是子网划分&#xff1f;3.3 子网划分的作用&#xff1f;3.4 子网划…

云计算项目十一:构建完整的日志分析平台

检查k8s集群环境&#xff0c;master主机操作&#xff0c;确定是ready 启动harbor [rootharbor ~]# cd /usr/local/harbor [rootharbor harbor]# /usr/local/bin/docker-compose up -d 检查head插件是否启动&#xff0c;如果没有&#xff0c;需要启动 [rootes-0001 ~]# system…

如何使用Hexo搭建个人博客

文章目录 如何使用Hexo搭建个人博客环境搭建连接 Github创建 Github Pages 仓库本地安装 Hexo 博客程序安装 HexoHexo 初始化和本地预览 部署 Hexo 到 GitHub Pages开始使用发布文章网站设置更换主题常用命令 插件安装解决成功上传github但是web不更新不想上传文章处理方式链接…

Yolov8模型用torch_pruning剪枝

目录 &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680;&#x1f680; 原理 遍历所有分组 高级剪枝器 &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680…

JVM基本概念、命令、参数、GC日志总结

原文: 赵侠客 一、前言 NPE&#xff08;NullPointerException&#xff09;和OOM&#xff08;OutofMemoryError&#xff09;在JAVA程序员中扮演着重要的角色&#xff0c;它也是很多人始终摆脱不掉的梦魇&#xff0c;与NPE不同的是OOM一旦在生产环境中出现就意味着只靠代码已经无…

java集合题库详解

1. Arraylist与LinkedList区别 可以从它们的底层数据结构、效率、开销进行阐述哈 ArrayList是数组的数据结构&#xff0c;LinkedList是链表的数据结构。 随机访问的时候&#xff0c;ArrayList的效率比较高&#xff0c;因为LinkedList要移动指针&#xff0c;而ArrayList是基于索…

Java 客户端向服务端上传文件(TCP通信)

一、实验内容 编写一个客户端向服务端上传文件的程序&#xff0c;要求使用TCP通信的的知识&#xff0c;完成将本地机器输入的路径下的文件上传到D盘中名称为upload的文件夹中。并把客户端的IP地址加上count标识作为上传后文件的文件名&#xff0c;即IP&#xff08;count&#…

OpenSearch 与 Elasticsearch:哪个开源搜索引擎适合您?

当谈论到搜索引擎产品时&#xff0c;Elasticsearch 和 OpenSearch 是两个备受关注的选择。它们都以其出色的功能和灵活性而闻名&#xff0c;但在一些方面存在一些差异。在本文中&#xff0c;我们将从功能和延展性、工具与资源、价格和许可这三个角度对这两个产品进行论述。通过…