PlanUML画图札记之一 ------ 时序图

2024-03-15 23:58

本文主要是介绍PlanUML画图札记之一 ------ 时序图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PlanUML可以画出漂亮的流程图,时序图之类的,IDEA和CLION之类的IDE都能安装插件

时序图

简单示例

 

你可以用->来绘制参与者之间传递的消息, 而不必显式地声明参与者。

你也可以使用 --> 绘制一个虚线箭头。

另外,你还能用 <- 和 <--,这不影响绘图,但可以提高可读性。 注意:仅适用于时序图,对于其它示意图,规则是不同的。

@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication ResponseAlice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml

声明参与者

关键字 participant 用于改变参与者的先后顺序。

 

你也可以使用其它关键字来声明参与者:

  • actor
  • boundary
  • control
  • entity
  • database

 

@startuml
actor Foo1
boundary Foo2
control Foo3
entity Foo4
database Foo5
collections Foo6
Foo1 -> Foo2 : To boundary
Foo1 -> Foo3 : To control
Foo1 -> Foo4 : To entity
Foo1 -> Foo5 : To database
Foo1 -> Foo6 : To collections@enduml

 

关键字 as 用于重命名参与者

你可以使用RGB值或者颜色名修改 actor 或参与者的背景颜色。

 

@startuml
actor Bob #red
' The only difference between actor
'and participant is the drawing
participant Alice
participant "I have a really\nlong name" as L #99FF99
/' You can also declare:participant L as "I have a really\nlong name"  #99FF99'/Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction
@enduml

您可以使用关键字 order自定义顺序来打印参与者。

 

@startuml
participant Last order 30
participant Middle order 20
participant First order 10
@enduml

在参与者中使用非字母符号

 

你可以使用引号定义参与者,还可以用关键字 as 给参与者定义别名。

@startuml
Alice -> "Bob()" : Hello
"Bob()" -> "This is very\nlong" as Long
' You can also declare:
' "Bob()" -> Long as "This is very\nlong"
Long --> "Bob()" : ok
@enduml

 

 

给自己发消息

参与者可以给自己发信息,

消息文字可以用\n来换行。

 

@startuml
Alice->Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml

 

 

修改箭头样式

修改箭头样式的方式有以下几种:

  • 表示一条丢失的消息:末尾加 x
  • 让箭头只有上半部分或者下半部分:将<>替换成\或者 /
  • 细箭头:将箭头标记写两次 (如 >> 或 //)
  • 虚线箭头:用 -- 替代 -
  • 箭头末尾加圈:->o
  • 双向箭头:<->

 

@startuml
Bob ->x Alice
Bob -> Alice
Bob ->> Alice
Bob -\ Alice
Bob \\- Alice
Bob //-- AliceBob ->o Alice
Bob o\\-- AliceBob <-> Alice
Bob <->o Alice
@enduml

 

 

修改箭头颜色

你可以用以下记号修改箭头的颜色:

@startuml
Bob -[#red]> Alice : hello
Alice -[#0000FF]->Bob : ok
@enduml

 

 

对消息序列编号

 

关键字 autonumber 用于自动对消息编号。

 

@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
@enduml

语句 autonumber start 用于指定编号的初始值,而 autonumber startincrement 可以同时指定编号的初始值和每次增加的值。

 

 

@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Responseautonumber 15
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Responseautonumber 40 10
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response@enduml

 

你可以在双引号内指定编号的格式。

格式是由 Java 的DecimalFormat类实现的: (0 表示数字;# 也表示数字,但默认为0)。

你也可以用 HTML 标签来制定格式。

@startuml
autonumber "<b>[000]"
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Responseautonumber 15 "<b>(<u>##</u>)"
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Responseautonumber 40 10 "<font color=red><b>Message 0  "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response@enduml

你还可以用语句 autonumber stop 和 autonumber resume incrementformat 来表示暂停或继续使用自动编号。

 

@startuml
autonumber 10 10 "<b>[000]"
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Responseautonumber stop
Bob -> Alice : dummyautonumber resume "<font color=red><b>Message 0  "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Responseautonumber stop
Bob -> Alice : dummyautonumber resume 1 "<font color=blue><b>Message 0  "
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml

 

 

 

Page Title, Header and Footer

The title keyword is used to add a title to the page.

Pages can display headers and footers using header and footer.

 

@startumlheader Page Header
footer Page %page% of %lastpage%title Example TitleAlice -> Bob : message 1
Alice -> Bob : message 2@enduml

 

 

分割示意图

 

关键字 newpage 用于把一张图分割成多张。

在 newpage 之后添加文字,作为新的示意图的标题。

这样就能很方便地在 Word 中将长图分几页打印。

@startumlAlice -> Bob : message 1
Alice -> Bob : message 2newpageAlice -> Bob : message 3
Alice -> Bob : message 4newpage A title for the\nlast pageAlice -> Bob : message 5
Alice -> Bob : message 6
@enduml

 

 

组合消息

 

我们可以通过以下关键词将组合消息:

  • alt/else
  • opt
  • loop
  • par
  • break
  • critical
  • group, 后面紧跟着消息内容

 

可以在标头(header)添加需要显示的文字(group除外)。

关键词 end 用来结束分组。

注意,分组可以嵌套使用。

 

@startuml
Alice -> Bob: Authentication Requestalt successful caseBob -> Alice: Authentication Acceptedelse some kind of failureBob -> Alice: Authentication Failuregroup My own labelAlice -> Log : Log attack startloop 1000 timesAlice -> Bob: DNS AttackendAlice -> Log : Log attack endendelse Another type of failureBob -> Alice: Please repeatend
@enduml

 

 

给消息添加注释

我们可以通过在消息后面添加 note left 或者 note right 关键词来给消息添加注释。

你也可以通过使用 end note 来添加多行注释。

 

@startuml
Alice->Bob : hello
note left: this is a first noteBob->Alice : ok
note right: this is another noteBob->Bob : I am thinking
note lefta notecan also be definedon several lines
end note
@enduml

 

 

其他的注释

 

可以使用note left ofnote right ofnote over在节点(participant)的相对位置放置注释。

还可以通过修改背景色来高亮显示注释。

以及使用关键字end note来添加多行注释。

 

@startuml
participant Alice
participant Bob
note left of Alice #aquaThis is displayed left of Alice. 
end notenote right of Alice: This is displayed right of Alice.note over Alice: This is displayed over Alice.note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice.note over Bob, AliceThis is yet anotherexample ofa long note.
end note
@enduml

 

 

改变备注框的形状

你可以使用 hnote 和 rnote 这两个关键字来修改备注框的形状。

@startuml
caller -> server : conReq
hnote over caller : idle
caller <- server : conConf
rnote over server"r" as rectangle"h" as hexagon
endrnote
@enduml

 

 

Creole和HTML

可以使用creole格式。

 

@startuml
participant Alice
participant "The **Famous** Bob" as BobAlice -> Bob : hello --there--
... Some ~~long delay~~ ...
Bob -> Alice : ok
note leftThis is **bold**This is //italics//This is ""monospaced""This is --stroked--This is __underlined__This is ~~waved~~
end noteAlice -> Bob : A //well formatted// message
note right of Alice This is <back:cadetblue><size:18>displayed</size></back> __left of__ Alice. 
end note
note left of Bob <u:red>This</u> is <color #118888>displayed</color> **<color purple>left of</color> <s:red>Alice</strike> Bob**. 
end note
note over Alice, Bob<w:#FF33FF>This is hosted</w> by <img sourceforge.jpg>
end note 
@enduml

 

 

分隔符

 

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

@startuml== Initialization ==Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response== Repetition ==Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response@enduml

 

 

= 引用 =

你可以在图中通过使用ref over关键词来实现引用

@startuml
participant Alice
actor Bobref over Alice, Bob : initAlice -> Bob : helloref over BobThis can be onseveral lines
end ref
@enduml

 

 

= 延迟 =

你可以使用...来表示延迟,并且还可以给延迟添加注释。

@startumlAlice -> Bob: Authentication Request
...
Bob --> Alice: Authentication Response
...5 minutes latter...
Bob --> Alice: Bye !@enduml

 

 

= 空间 =

 

你可以使用|||来增加空间。

还可以使用数字指定增加的像素的数量。

@startumlAlice -> Bob: message 1
Bob --> Alice: ok
|||
Alice -> Bob: message 2
Bob --> Alice: ok
||45||
Alice -> Bob: message 3
Bob --> Alice: ok@enduml

 

 

生命线的激活与撤销

关键字activatedeactivate用来表示参与者的生命活动。

一旦参与者被激活,它的生命线就会显示出来。

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

 

还可以使用嵌套的生命线,并且运行给生命线添加颜色。

 

@startuml
participant UserUser -> A: DoWork
activate A #FFBBBBA -> A: Internal call
activate A #DarkSalmonA -> B: << createRequest >>
activate BB --> A: RequestCreated
deactivate B
deactivate A
A -> User: Done
deactivate A@enduml

 

 

Return

A new command return for generating a return message with optional text label. The point returned to is the point that cause the most recently activated life-line. The syntax is simply return label where label, if provided, can be any string acceptable on conventional messages.

@startuml
Bob -> Alice : hello
activate Alice
Alice -> Alice : some action
return bye
@enduml

 

 

 

创建参与者

 

你可以把关键字create放在第一次接收到消息之前,以强调本次消息实际上是在创建新的对象。

@startuml
Bob -> Alice : hellocreate Other
Alice -> Other : newcreate control String
Alice -> String
note right : You can also put notes!Alice --> Bob : ok@enduml

 

 

 

 

Shortcut syntax for activation, deactivation, creation

 

Immediately after specifying the target participant, the following syntax can be used:

 

  • ++ Activate the target (optionally a #color may follow this)
  • -- Deactivate the source
  • ** Create an instance of the target
  • !! Destroy an instance of the target

 

@startuml
alice -> bob ++ : hello
bob -> bob ++ : self call
bob -> bib ++  #005500 : hello
bob -> george ** : create
return done
return rc
bob -> george !! : delete
return success
@enduml

 

 

 

进入和发出消息

如果只想关注部分图示,你可以使用进入和发出箭头。

使用方括号[]表示图示的左、右两侧。

@startuml
[-> A: DoWorkactivate AA -> A: Internal call
activate AA ->] : << createRequest >>A<--] : RequestCreated
deactivate A
[<- A: Done
deactivate A
@enduml

 

还可以使用下面的语法:

@startuml
[-> Bob
[o-> Bob
[o->o Bob
[x-> Bob[<- Bob
[x<- BobBob ->]
Bob ->o]
Bob o->o]
Bob ->x]Bob <-]
Bob x<-]
@enduml

 

 

 

 

Anchors and Duration

 

 

With teoz usage it is possible to add anchors to the diagram and use the anchors to specify duration time.

@startuml
!pragma teoz true{start} Alice -> Bob : start doing things during duration
Bob -> Max : something
Max -> Bob : something else
{end} Bob -> Alice : finish{start} <-> {end} : some time@enduml

 

 

构造类型和圈点

 

 

可以使用<<>>给参与者添加构造类型。

在构造类型中,你可以使用(X,color)格式的语法添加一个圆圈圈起来的字符。

@startumlparticipant "Famous Bob" as Bob << Generated >>
participant Alice << (C,#ADD1B2) Testable >>Bob->Alice: First message@enduml

默认使用 guillemet 字符来显示构造类型。 你可以使用外观参数 guillemet 来修改显示行为。

 

@startumlskinparam guillemet false
participant "Famous Bob" as Bob << Generated >>
participant Alice << (C,#ADD1B2) Testable >>Bob->Alice: First message@enduml

 

@startumlparticipant Bob << (C,#ADD1B2) >>
participant Alice << (C,#ADD1B2) >>Bob->Alice: First message@enduml

 

 

更多标题信息

你可以在标题中使用creole格式。

 

@startumltitle __Simple__ **communication** exampleAlice -> Bob: Authentication Request
Bob -> Alice: Authentication Response@enduml

在标题描述中使用\n表示换行。

@startumltitle __Simple__ communication example\non several linesAlice -> Bob: Authentication Request
Bob -> Alice: Authentication Response@enduml

还可以使用关键字titleend title定义多行标题。

@startumltitle<u>Simple</u> communication exampleon <i>several</i> lines and using <font color=red>html</font>This is hosted by <img:sourceforge.jpg>
end titleAlice -> Bob: Authentication Request
Bob -> Alice: Authentication Response@enduml

 

 

包裹参与者

 

 

可以使用boxend box画一个盒子将参与者包裹起来。

还可以在box关键字之后添加标题或者背景颜色。

 

@startumlbox "Internal Service" #LightBlueparticipant Bobparticipant Alice
end box
participant OtherBob -> Alice : hello
Alice -> Other : hello@enduml

 

 

移除脚注

使用hide footbox关键字移除脚注。

 

@startumlhide footbox
title Footer removedAlice -> Bob: Authentication Request
Bob --> Alice: Authentication Response@enduml

 

 

外观参数(skinparam)

 

skinparam改变字体和颜色。

可以在如下场景中使用:

  • 在图示的定义中,
  • 在引入的文件中,
  • 在命令行或者ANT任务提供的配置文件中。

你也可以修改其他渲染元素,如以下示例:

 

@startuml
skinparam sequenceArrowThickness 2
skinparam roundcorner 20
skinparam maxmessagesize 60
skinparam sequenceParticipant underlineactor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as CUser -> A: DoWork
activate AA -> B: Create Request
activate BB -> C: DoWork
activate C
C --> B: WorkDone
destroy CB --> A: Request Created
deactivate BA --> User: Done
deactivate A@enduml

 

@startuml
skinparam backgroundColor #EEEBDC
skinparam handwritten trueskinparam sequence {ArrowColor DeepSkyBlueActorBorderColor DeepSkyBlueLifeLineBorderColor blueLifeLineBackgroundColor #A9DCDFParticipantBorderColor DeepSkyBlueParticipantBackgroundColor DodgerBlueParticipantFontName ImpactParticipantFontSize 17ParticipantFontColor #A9DCDFActorBackgroundColor aquaActorFontColor DeepSkyBlueActorFontSize 17ActorFontName Aapex
}actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as CUser -> A: DoWork
activate AA -> B: Create Request
activate BB -> C: DoWork
activate C
C --> B: WorkDone
destroy CB --> A: Request Created
deactivate BA --> User: Done
deactivate A@enduml

 

 

 

填充区设置

 

可以设定填充区的参数配置。

 

@startuml
skinparam ParticipantPadding 20
skinparam BoxPadding 10box "Foo1"
participant Alice1
participant Alice2
end box
box "Foo2"
participant Bob1
participant Bob2
end box
Alice1 -> Bob1 : hello
Alice1 -> Out : out
@enduml

这篇关于PlanUML画图札记之一 ------ 时序图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/813688

相关文章

安卓玩机工具------小米工具箱扩展工具 小米机型功能拓展

小米工具箱扩展版                     小米工具箱扩展版 iO_Box_Mi_Ext是由@晨钟酱开发的一款适用于小米(MIUI)、多亲(2、2Pro)、多看(多看电纸书)的多功能工具箱。该工具所有功能均可以免root实现,使用前,请打开开发者选项中的“USB调试”  功能特点 【小米工具箱】 1:冻结MIUI全家桶,隐藏状态栏图标,修改下拉通知栏图块数量;冻结

Windows11电脑上自带的画图软件修改照片大小(不裁剪尺寸的情况下)

针对一张图片,有时候上传的图片有大小限制,那么在这种情况下如何修改其大小呢,在不裁剪尺寸的情况下 步骤如下: 1.选定一张图片,右击->打开方式->画图,如下: 第二步:打开图片后,我们可以看到图片的大小为82.1kb,点击上面工具栏的“重设大小和倾斜”进行调整,如下: 第三步:修改水平和垂直的数字,此处我修改为分别都修改为50,然后保存,可以看到大小变成63.5kb,如下:

程序员都在使用的画图工具

大家好,我是袁庭新。 程序员都在使用的画图工具,你一定没用过这款画图工具吧!我教程中的架构图都是用它来画的。 比如我编写的RDB工作原理图就是用draw.io绘制的,如下图所示: 再例如Redis集群故障恢复原理图我也是通过draw.io工具绘制的,如下图所示: 是不是觉得draw.io绘制的图形特别简洁、美观。它的官网是: https://www.drawio.com dra

多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测

多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测 目录 多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测(完整源码和数据) 2.SS

python画图|3D图基础教程

python画3D图和2D流程类似: 【a】定义一个自变量x; 【b】定义两个因变量y和z; 【c】直接输出plot(x,y,z) 今天就一起快乐学习一下画3D图的基础教程。 【1】官网教程 打开官网,可以迅速找到学习教程,参考下述链接: https://matplotlib.org/stable/plot_types/3D/plot3d_simple.html 然后我们解读一下示

python画图|垂线标记系列

进行了一段时间的直方图学习之后,发现python的matplo居然还支持画垂线标记图,赶紧把它记录下来。 直方图绘制教程见下述链接: 【a】直方图绘制基础教程:python画图|直方图绘制教程-CSDN博客 【b】 直方图绘制进阶教程:python画图|直方图绘制教程进阶-CSDN博客 【c】 堆叠直方图绘制教程:python画图|堆叠直方图绘制-CSDN博客 【d】并列直方图绘制教程:

时序预测|变分模态分解-双向时域卷积-双向门控单元-注意力机制多变量时间序列预测VMD-BiTCN-BiGRU-Attention

时序预测|变分模态分解-双向时域卷积-双向门控单元-注意力机制多变量时间序列预测VMD-BiTCN-BiGRU-Attention 文章目录 一、基本原理1. 变分模态分解(VMD)2. 双向时域卷积(BiTCN)3. 双向门控单元(BiGRU)4. 注意力机制(Attention)总结流程 二、实验结果三、核心代码四、代码获取五、总结 时序预测|变分模态分解-双向时域卷积

【python 数据可视化】美丽漂亮的画图神器--pyecharts

今天我们介绍下pyechats 的用法和一个简单的例子。 安装: pip install pyecharts 步骤1:导入相关包: # 导入包import pandas as pdfrom pyecharts.charts import *from pyecharts import options as optsfrom pyecharts.globals import *f

plot()画图,横或纵坐标出现乱序

现象: import matplotlib.pyplot as plt plt.plot(x, y, ‘-’) 画折线图,出现了如下,纵坐标数据密集显示,放大之后,出现了乱序。 解决方法: 1.先查看横纵坐标的数据类型。 print(“type:”, type(y)). 我这里打印是字符串类型。 type: <class ‘str’> 2.横纵坐标数据类型需要是int ,float

python画图|并列直方图绘制

前述学习过程中,已经知晓普通直方图绘制和堆叠直方图绘制,参考链接如下: 西猫雷婶-CSDN博客 有时候,我们还会遇到并列直方图绘制的需求,今天就探索一下。 【1】官网教程 按照惯例,我们先来到官网: https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html#sphx-glr-gallery-lin