PlantUML——序列图

1.PlantUML-时序图 1.1 简单示例 符号 说明 -> 表示参与者之间传递的消息,而不必显示地声明参与者 <- 同->,可提高阅读性 –> 绘制虚线箭头 <– 同<–,可提高阅读性 @startuml 用户 -> 认证中心: 登录操作 认证中心 -> 缓存: 存放(key=token+ip,value=token)token 用户 <- 认证中心 : 认证成功返回token 用户 -> 认证中心: 下次访问头部携带token认证 认证中 阅读详情

PlantUML序列图

1、序列图的基本概念

序列图是对象之间传送消息的时间顺序的可视化表示。序列图从一定程度上更加详细地描述了用例的需求,将其转化为更正式的精细表达,这也是序列图的主要用途之一。序列图的目的在于描述系统中各个对象按照时间顺序的交互过程。

1.1、序列图的定义

所谓交互(Interaction)是指在具体语境中为实现某个目标的一组对象之间进行一组消息交换的行为。一个结构良好的交互过程类似于算法,简单、易于理解和修改。UML提供的交互机制通常会对两种情况进行建模,分别是为系统的动态行为进行建模和为系统的控制过程进行建模。面向系统的动态行为进行建模时,针对系统为实现自身的某个功能而展开的一组动态行为进行描述,其中包含描述一组彼此关联、相互作用的对象间的动作序列和配合关系,以及这些对象间传递和接收的消息。面向控制流进行建模时,可以针对一个用例、一个业务或系统操作过程,也可以针对整个系统,描述这类控制问题的着眼点是消息在系统内如何按照时间顺序发送、接收和处理。

序列图(Sequence Diagram)和协作图(Collaboration Diagram)都是交互图,并彼此等价。序列图用于表现一个交互过程,该交互过程是一个协作中的各种类元角色间的一组消息交换,侧重于强调时间顺序。

在UML的表示中,序列图将交互关系表示为一个二维图。其中,纵向是时间轴,时间沿纵轴向下延伸。横向代表了在协作中各独立对象的角色,角色使用生命线进行表示,当对象存在时,生命线用一条虚线来表示,此时对象不处于激活状态,当对象的过程处于激活状态时,生命线是一个双道线。序列图中的消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。

如图所示,这是一个学生查看自身信息的序列图。在这个序列图中,涉及3个对象之间的交互,分别是Student(李明)​、WebInterface(登录页面)和DataManager(数据管理)​。​“Student”​(李明)首先通过WebInterface(登录页面)进行登录,WebInterface(登录页面)需要通过DataManager(数据管理)获得用户“Student”​(李明)的验证信息。成功验证之后,​“Student”​(李明)通过WebInterface(登录页面)向DataManager(数据管理)获取自己的信息并显示在自己的客户端。

在这里插入图片描述
序列图中包含了4个基本的模型元素,分别是:

  • 对象(Object)​
  • 生命线(Lifeline)​
  • 激活(Activation)
  • 消息(Message)​

1.2、序列图的作用

序列图是用于描述在给定场景中消息是如何在对象间传递的一种图形化方式,在使用它进行建模时,可以将它的用途分为以下三个方面:

  • 确认和丰富使用场景的一种逻辑表达方式。系统使用场景的描述就是有关系统潜在的使用方式,一个使用场景的逻辑可能是一个用例的一部分,或是一条控制流。
  • 细化用例的表达方式。如前文所述,序列图的主要用途之一,就是把用例表达的需求转化为更正式的精细表达。
  • 有效地描述如何分配各个类的职责以及各个类具有相应职责的原因。可以根据对象之间的交互关系来定义类的职责,各个类之间的交互关系构成一个特定的用例。例如,​“Customer对象向Address对象请求其街道名称”指出了Customer对象应该具有“知道其街道名”这个职责。

一般认为,序列图只对开发者有意义。然而,一个组织的业务人员会发现,序列图描述了不同的业务对象是如何交互的,对于沟通当前业务如何进行是很有用的。除了记录组织的当前事件之外,业务级的序列图甚至可以被当作需求文件来使用,为实现一个未来系统提供有效的需求信息。

2、序列图的组成

序列图(Sequence Diagram)是由对象(Object)​、生命线(Lifeline)​、激活(Activation)和消息(Message)等构成的。序列图的目的就是按照交互发生的一系列顺序,表述对象之间的这些交互过程。

2.1、对象(Object)

序列图中的对象和对象图中的对象概念是一样的,都是类的实例。序列图中的对象可以是系统的参与者或者任何有效的系统对象。对象的表示形式也和对象图中的对象表示形式一样,使用包围名称的矩形框来标记,所显示的对象及其类的名称带有下划线,二者用冒号分隔开,使用“对象名:类名”的形式,对象的下部有一条被称为“生命线”的垂直虚线,如图所示。

在这里插入图片描述

如果对象的开始位置置于序列图的顶部,那就意味着序列图在开始交互的时候该对象就已经存在了,如果对象的位置不在顶部,那么表明对象在交互的过程中将被创建。

在序列图中,可以通过以下几种方式使用对象:

  • 使用对象生命线来建立类与对象行为的模型,这也正是序列图的主要目的。
  • 不指定对象的类,先用对象创建序列图,随后再指定它们所属的类。这样可以描述系统的一个使用场景。
  • 区分同一个类的不同对象之间如何交互时,则首先应给出对象命名,然后描述同一类对象的交互。也就是说,同一个序列图中的几条生命线可以表示同一个类的不同对象,两个对象之间的区分是根据对象名称进行区分的。
  • 表示类的生命线可以与表示该类对象的生命线平行存在。可以将表示类的生命线对象名称设置为类的名称。

通常将一个交互的发起对象称为主角,对于大多数业务应用软件来讲,主角通常是一个人或一个组织。主角实例通常由序列图中的第一条(最左侧)生命线来表示,也就是把它们放在模型的“可以看见的开始之处”​。如果在同一序列图中有多个主角实例,就应尽量使它们位于最左侧或最右侧的生命线。同样,那些与主角交互的角色被称为系统响应角色,通常放在图的右边。在许多的业务应用软件中,这些系统响应角色经常被称为“Backend Entities”​(后台实体)​,也就是那些通过访问技术提供交互服务的系统,例如消息队列、Web服务等。

2.2、生命线(Lifeline)

生命线(Lifeline)是一条垂直的虚线,用来表示序列图中的对象在一段时间内的存在。在序列图中,每个对象的底部中心的位置都带有生命线。生命线是一条时间线,在序列图中自上而下,所用时间取决于交互持续的时间,也就是说生命线表现了对象存在的时段。

对象与生命线结合在一起称为对象生命线。对象存在的时段包括对象拥有控制线程时或被动对象在控制线程通过时。当对象拥有控制线程时,对象被激活,作为线程的根。被动对象在控制线程通过时,也就是被动对象被外部调用时,通常称为对象的活动,它存在的时间包括过程调用下层过程的时间。

对象生命线包含矩形的对象图和对象图下面的生命线,如图所示。

在这里插入图片描述
生命线之间的箭头代表对象之间的消息传递,被箭头指向的对象表示该对象接收消息,通常由一个操作来完成,箭尾对应的对象表示该对象发送消息,由一个操作激活。生命线之间箭头排列的顺序,代表了消息的时间顺序。

2.3、激活(Activation)

序列图可以描述对象的激活(Activation)​,激活是对象操作(或方法)的执行,它表示一个对象直接地完成操作的过程,或通过从属操作完成操作的过程。它用于对执行的持续时间和与其调用者之间的控制关系进行建模。激活就是执行某个操作的实例,它包括这个操作调用其他从属操作的过程。

在序列图中,激活使用一个细长的矩形框来表示,它的顶端与激活时间对齐,而底端与完成时间对齐。被执行的操作根据不同风格表示成一个附在激活符号旁或左边空白处的数字标号。消息的符号也可表示被执行的操作,在这种情况下,激活上的数字标号就可以省略。如果控制流是过程性的,那么激活符号的顶部位于激发该活动的消息箭头指向的位置,而符号的底部位于返回消息箭头的尾部。

如图所示,图中包含一个递归调用和其他两个操作。

在这里插入图片描述

2.4、消息(Message)

消息(Message)是从一个对象(发送者)向另一个或其他几个对象(接收者)发送信号,或由一个对象(发送者或调用者)调用另一个对象(接收者)的操作。它可以有不同的实现方式,比如过程调用、活动线程间的内部通信、事件的发生等。

从消息的定义可以看出,消息由三部分组成,分别是发送者、接收者和活动。所谓发送者是发出消息的类元角色。接收者是接收到消息的类元角色,接收消息的一方也被认为是事件的实例。接收者有两种不同的调用处理方式可以选用,通常由接收者的模型所决定。一种方式是操作作为方法实现,当信号到来时它将被激活。过程执行完后,调用者收回控制权,并可以收回返回值。另一种方式是主动对象,操作调用可能导致调用事件,它触发一个状态机转换。活动为调用、信号、发送者的局部操作或原始活动,如创建或销毁等。

在序列图中,消息的表示形式为从一个对象(发送者)的生命线指向另一个对象(目标)生命线的箭头。在Rational Rose 2007序列图的图形编辑工具栏中,消息有下列几种形式见表所示。
在这里插入图片描述
如图所示,在序列图中,显示了五种消息的图形表示形式。

在这里插入图片描述
除此之外,我们还可以利用消息的规范设置消息其他类型,比如同步(Synchronous)消息、阻止(Balking)消息和超时(Timeout)消息等。同步消息表示发送者发出消息后等待接收者响应这个消息。阻止(Balking)消息表示发送者发出消息给接收者,如果接收者无法立即接收消息,则发送者放弃这个消息。超时(Timeout)消息表示发送者发出消息给接收者,如果接收者超过一定时间未响应,则发送者放弃这个消息。

在Rational Rose 2007还可以设置消息的频率。消息的频率可以让消息按规定时间间隔发送,例如每10秒发送一次消息。主要包括两种设置:定期(Periodic)和不定期(Aperiodic)​。定期消息按照固定的时间间隔发送。不定期消息,只发送一次,或者在不规则时间发送。

消息按时间顺序从顶到底垂直排列。如果多条消息并行,它们之间的顺序不重要。消息可以有序号,但因为顺序是用相对关系表示的,通常也可以省略序号。在RationalRose 2007中,可以设置是否显示序号。设置是否显示序号的步骤为:在菜单栏中选择“Tools”​(工具)下的“Options”​(选项)选项,在弹出的对话框中选择“Diagram”​(图)选项卡,如图所示,选择或取消“Sequence Numbering”选项。

在这里插入图片描述

3、序列图的高级概念

3.1、创建对象与销毁对象

创建一个对象就是指发送者发送一个实例化消息后实例化一个对象的操作。在创建对象的消息操作中,可以有参数,用于新生对象实例的初始化。类属性的初始值表达式是通常由创建操作计算的,其结果用于属性的初始化。当然也可以隐式取代这些值,因此初始值表达式是可重载的默认项。创建操作后,新的对象遵循其类的约束,并可以接收消息。

销毁对象指的是将对象销毁并回收其拥有的资源,它通常是一个明确的动作,也可以是其他动作、约束或垃圾回收机制的结果。销毁一个对象将导致对象的所用组成部分将被销毁,但是不会销毁一般关联或者聚集关系连接的对象,尽管它们之间包含该对象的链接将被消除。

在序列图中,创建对象操作的执行使用消息的箭头表示,箭头指向被创建对象的框。对象创建之后就会具有生命线,就像序列图中的任何其他对象一样。对象符号下方是对象的生命线,它持续到对象被销毁或者序列图结束。

在序列图中,对象被销毁是使用在对象的生命线上画大“×”表示,在销毁新创建的对象,或者序列图中的任何其他对象时,都可以使用。它的位置是在导致对象被销毁的信息上,或者在对象自我终结的地方。

创建对象与销毁对象的示例如图所示,在该例中创建了一个“对话框”对象并将其销毁。
在这里插入图片描述

3.2、分支与从属流

在UML中,存在两种方式可以来修改序列图中消息的控制流,分别是:分支和从属流。

  • 分支是指的是从同一点发出多个消息的并指向不同的对象,根据条件判断是否互斥,可以有条件和并行两种结构。
  • 从属流指的是从同一点发出多个消息指向同一个对象的不同生命线。

引起一个对象的消息产生分支可以有很多种情况,在复杂的业务处理过程中,要根据不同的条件进入不同的处理流程中,这通常被称作条件分支,另外一种情况是当执行到某一点的时候需要向两个或两个以上对象发送消息,消息是并行的,这时被称为并行分支。

由于序列图只表示某一个活动按照时间顺序的经历过程,因此在Rational Rose 2007中,对序列图的画法没有明显地支持,虽然说我们也可以通过添加脚本的方式来辅助画出序列图。对于出现不同分支的情况,如果有必要,可以针对每一个分支画出一个序列图。一般来说,在序列图中只要画出主要分支过程就足够了。

在UML 2.5中,可以使用两种方法来临时解决分支的问题,一种是在序列图中产生分支的地方插入一个引用的方式。对于每个分支,分别用一个单独的序列图来表示。这种方法要求分支后不再聚合,并且各分支间没有太多具体关联。另一种方法是对于非常复杂的业务来说,可以采用协作图和序列图相辅助的方法来表达完整的信息,另外还可以利用状态图和活动图,其中状态机中对分支有良好的表达。

从属流是从对象的由于不同的条件而根据执行了不同的生命线分支。如用户在保存或删除一个文件时,向文件系统发送一条消息,文件系统会根据保存或删除消息条件的不同执行不同的生命线。从属流在Rational Rose 2007中也不支持,可以通过并发表达方式,因为添加从属流以后会明显增加序列图的复杂度。

3.3、帧化序列图

从UML2.0版本开始,对UML图形增加了一个补充,称作框架的符号元件。它被用于作为许多其他的图元件的一个基础,但是通常被人们用作图的图形化边界。当为图提供图形化边界时,一个框架元件为图的标签提供一致的位置。在UML图中,框架元件是可选择的,图的标签被放在左上角,使用一种卷角长方形表示,而且实际的UML图被封闭在较大的长方形内部定义,如图7-8所示。当使用一个框架元件封闭一个图时,图的标签需要按照以下的格式:图形类型图名称。UML规范给出图形类型提供了特定的文本值,比如,sd代表序列图,activity代表活动图,use case代表用例图。

借助于框架的符号元件,我们可以将序列图进行帧化,如图所示。将序列图进行帧化的目的是使用户能够在一张序列图中快速容易地复用另一张序列图的部分或全部内容。因为在为一个用例的多个场景创建实例过程中,图和图之间的通常有相当一部分内容是重复的。通过帧化,先在一部分图的周围绘制一个帧,标识出帧的隔离区,然后只要把带有标记的帧插入到一个新图中就可以实现复用了。在Rational Rose 2007中不支持将序列图进行帧化。

在这里插入图片描述
在这里插入图片描述

4、PlantUML语法

4.1、基本示例

  • 在 PlantUML 序列图中,-> 序列表示两个参与者之间发送的消息,它是自动识别的,不需要事先声明。
  • 通过使用--> 序列,利用虚线箭头,在您的图中提供独特的可视化。
  • 为了提高可读性而不影响可视化表示,可使用反向箭头,如 <- 或 <-- 。但要注意,这是专门针对序列
    图的,其他图类型的规则有所不同。
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response
@enduml

在这里插入图片描述

4.2、声明参与者

  • 如果使用关键字 participant 来声明参与者,就可以对该参与者进行更多的控制。
  • 声明的顺序将是(默认的)显示顺序。
  • 使用这些其他的关键字来声明参与者,将改变参与者的表示形状。
    • 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

在这里插入图片描述

  • 使用 as 关键字重命名参与者。
  • 也可以改变演员或参与者的背景颜色。
@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

在这里插入图片描述

4.3、多行定义参与者

@startuml
participant Participant [
=Title
----
""打算""
]
participant Bob
Participant -> Bob
@enduml

在这里插入图片描述

4.4、在参与者中使用非字母

可以使用引号来定义参与者。而且你可以使用 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

在这里插入图片描述

4.5、给自己发消息

  • 参与者可以给自己发信息,
  • 消息文字可以用\n 来换行。
@startuml
Alice -> Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext
@enduml

在这里插入图片描述

4.6、文本对齐

  • 箭头上的文本对齐可以用 skinparam sequenceMessageAlign,后接参数 left,right 或 center。
  • 也可以使用 direction 或 reverseDirection 来根据箭头的方向对齐文本。更多细节可参考 skinparam。
@startuml
skinparam sequenceMessageAlign right
Bob -> Alice : Request
Alice -> Bob : Response
@enduml

在这里插入图片描述

4.6.1、让响应信息显示在箭头下面

可以使用 skinparam responseMessageBelowArrow true 命令,让响应信息显示在箭头下面。

@startuml
skinparam responseMessageBelowArrow true
Bob -> Alice : hello
Bob <- Alice : ok
@enduml

在这里插入图片描述

4.7、改变箭头样式

可以通过以下几种方式改变箭头样式:

  • 添加最后的 x 表示丢失的信息
  • 使用\ 或/ 而不是 < 或 > 只拥有箭头的底部或顶部部分
  • 重复箭头头(例如 >> 或// )头,拥有一个薄的图纸
  • 使用-- 而不是- 拥有一个点状箭头
  • 在箭头头添加最后的”o”
  • 使用双向的箭头 <->
@startuml
Bob ->x Alice
Bob -> Alice
Bob ->> Alice
Bob -\ Alice
Bob \\- Alice
Bob //-- Alice
Bob ->o Alice
Bob o\\-- Alice
Bob <-> Alice
Bob <->o Alice
@enduml

在这里插入图片描述

4.8、修改箭头颜色

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

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

在这里插入图片描述

4.9、对消息序列编号

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

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

在这里插入图片描述
语句 autonumber //start// 用于指定编号的初始值,而 autonumber //start// //increment// 可以同时指定编号的初始值和每次增加的值。

@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber 15
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response
autonumber 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 Response
autonumber 15 "<b>(<u>##</u>)"
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response
autonumber 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 //increment// //format// 来表示暂停或继续使用自动编号。

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

在这里插入图片描述

  • 也可以使用一个 2 或 3 位的序列,中间采用一种或几种分隔符,如.,;,,,:。例如:1.1.1 或 1.1:1 。最后一位数字会自动递增。
  • 要增加第一个数字,请使用:autonumber inc A 。要增加第二位数字,请使用:autonumber inc B 。
@startuml
autonumber 1.1.1
Alice -> Bob: Authentication request
Bob --> Alice: Response
autonumber inc A
'Now we have 2.1.1
Alice -> Bob: Another authentication request
Bob --> Alice: Response
autonumber inc B
'Now we have 2.2.1
Alice -> Bob: Another authentication request
Bob --> Alice: Response
autonumber inc A
'Now we have 3.1.1
Alice -> Bob: Another authentication request
autonumber inc B
'Now we have 3.2.1
Bob --> Alice: Response
@enduml

在这里插入图片描述

也可以用 autonumber 的值,带有%autonumber% 变量。

@startuml
autonumber 10
Alice -> Bob
note right
the <U+0025>autonumber<U+0025> works everywhere.
Here, its value is ** %autonumber% **
end note
Bob --> Alice: //This is the response %autonumber%//
@enduml

在这里插入图片描述

4.10、页面标题、页眉和页脚

  • title 关键字用于为页面添加标题。
  • 页面可以使用 header 和 footer 显示页眉和页脚。
@startuml
header Page Header
footer Page %page% of %lastpage%
title Example Title
Alice -> Bob : message 1
Alice -> Bob : message 2
@enduml

在这里插入图片描述

4.11、分割示意图

  • 关键字 newpage 用于把一张图分割成多张。
  • 在 newpage 之后添加文字,作为新的示意图的标题。这样就能很方便地在 Word 中将长图分几页打印。
@startuml
Alice -> Bob : message 1
Alice -> Bob : message 2
newpage
Alice -> Bob : message 3
Alice -> Bob : message 4
newpage A title for the\nlast pagel
Alice -> Bob : message 5
Alice -> Bob : message 6
@enduml

在这里插入图片描述

4.12、组合消息

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

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

可以在标头 (header) 添加需要显示的文字,关键词 end 用来结束分组。注意,分组可以嵌套使用。

@startuml
Alice -> Bob: 认证请求
alt 成功情况
    Bob -> Alice: 认证接受
else 某种失败情况
    Bob -> Alice: 认证失败
    group 我自己的标签
    Alice -> Log : 开始记录攻击日志
        loop 1000次
            Alice -> Bob: DNS 攻击
        end
    Alice -> Log : 结束记录攻击日志
    end
else 另一种失败
    Bob -> Alice: 请重复
end
@enduml

在这里插入图片描述

4.13、次级分组标签

对于 group 而言,在标头处的 [和] 之间可以显示次级文本或标签。

@startuml
Alice -> Bob: 认证请求
Bob -> Alice: 认证失败
group 我自己的标签 [我自己的标签2]
    Alice -> Log : 开始记录攻击日志
    loop 1000次
        Alice -> Bob: DNS攻击
    end
    Alice -> Log : 结束记录攻击日志
end
@enduml

在这里插入图片描述

4.14、注释信息

  • 可以使用 note left 或 note right 关键字在信息后面加上注释。
  • 可以使用 end note 关键字有一个多行注释。
@startuml
Alice->Bob : hello
note left: this is a first note

Bob->Alice : ok
note right: this is another note

Bob->Bob : I am thinking
note left
a note
can also be defined
on several lines
end note
@enduml

在这里插入图片描述

4.15、其他的注释信息方式

  • 可以使用 note left of,note right of 或 note over 在节点 (participant) 的相对位置放置注释。
  • 还可以通过修改背景色来高亮显示注释。
  • 以及使用关键字 end note 来添加多行注释。
@startuml
participant Alice
participant Bob
note left of Alice #aqua
This is displayed
left of Alice.
end note
note 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, Alice
This is yet another
example of
a long note.
end note
@enduml

在这里插入图片描述

4.16、改变备注框的形状 [hnote 和 rnote]

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

  • hnote 代表六边形(hexagonal)的备注框;
  • rnote 代表正方形(rectangle)的备注框。
@startuml
caller -> server : conReq
hnote over caller : 空闲
caller <- server : conConf
rnote over server
"r"是正方形
"h"是六边形
endrnote
rnote over server
多
行
文本
endrnote
hnote over caller
多
行
文本
endhnote
@enduml

在这里插入图片描述

4.17、在多个参与者添加备注 [across]

可以之直接在所有参与者之间添加备注,格式是:

  • note across: 备注描述
@startuml
Alice->Bob:m1
Bob->Charlie:m2
note over Alice, Charlie: 创建跨越所有参与者的备注的旧方法:\n ""note over //FirstPart, LastPart//""note across: 新方法:\n""note across""
Bob->Alice
hnote across: 跨越所有参与者的备注。
@enduml

在这里插入图片描述

4.18、在同一级对齐多个备注 [/]

使用/可以在同一级对齐多个备注:

  • 没有/ (默认情况下,备注不是对齐的。)
@startuml
note over Alice : Alice的初始状态
note over Bob : Bob的初始状态
Bob -> Alice : hello
@enduml

在这里插入图片描述

@startuml
note over Alice : Alice的初始状态
/ note over Bob : Bob的初始状态
Bob -> Alice : hello
@enduml

在这里插入图片描述

4.19、Creole 和 HTML

可以使用 creole 格式。

@startuml
participant Alice
participant "The **Famous** Bob" as Bob
Alice -> Bob : hello --there--
... Some ~~long delay~~ ...
Bob -> Alice : ok
note left
This is **bold**
This is //italics//
This is ""monospaced""
This is --stroked--
This is __underlined__
This is ~~waved~~
end note
Alice -> 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

在这里插入图片描述

4.20、分隔符

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

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

在这里插入图片描述

4.21、引用

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

@startuml
participant Alice
actor Bob
ref over Alice, Bob : init
Alice -> Bob : hello
ref over Bob
This can be on
several lines
end ref
@enduml

在这里插入图片描述

4.22、延迟

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

@startuml
Alice -> Bob: 认证请求
...
Bob --> Alice: 认证响应
...5分钟后...
Bob --> Alice: 再见!
@enduml

在这里插入图片描述

4.23、文本换行

  • 可以通过手动在文本中添加\n 使长文本换行。
  • 或者使用 maxMessageSize 设置(此方式暂不支持中文换行)
@startuml
skinparam maxMessageSize 50
participant a
participant b
a -> b :这\n一条\n是\n手动换行
a -> b :this is a very long message on several words
@enduml

在这里插入图片描述

4.24、空间

  • 可以使用 ||| 来增加空间。
  • 还可以使用数字指定增加的像素的数量
@startuml
Alice -> Bob: message 1
Bob --> Alice: ok
|||
Alice -> Bob: message 2
Bob --> Alice: ok
||45||
Alice -> Bob: message 3
Bob --> Alice: ok
@enduml

在这里插入图片描述

4.25、生命线的激活与撤销

  • 关键字 activate 和 deactivate 用来表示参与者的生命活动。
  • 一旦参与者被激活,它的生命线就会显示出来。
  • activate 和 deactivate 适用于以上情形。
  • 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

在这里插入图片描述
还可以使用嵌套的生命线,并且运行给生命线添加颜色。

@startuml
participant User
User -> A: DoWork
activate A #FFBBBB

A -> A: Internal call
activate A #DarkSalmon

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

B --> A: RequestCreated
deactivate B
deactivate A

A -> User: Done
deactivate A
@enduml

在这里插入图片描述
也可以使用自动激活关键字(autoactivate),这需要与 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

在这里插入图片描述

4.26、返回

新命令 return 可以用于生成一个带有可选文本标签的返回信息。返回的点是导致最近一次激活生命线
的点。语法是简单的返回标签,其中标签(如果提供)可以是传统信息中可以接受的任何字符串。

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

在这里插入图片描述

4.27、创建参与者

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

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

在这里插入图片描述

4.28、激活、撤销和创建的快捷语法

在指定目标参与者后,可以立即使用以下语法:

  • ++ 激活目标(可选择在后面加上 #color)
  • -- 撤销激活源
  • ** 创建目标实例
  • !! 摧毁目标实例
@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
alice -> bob ++ : hello1
bob -> charlie --++ : hello2
charlie --> alice -- : ok
@enduml

在这里插入图片描述

@startuml
@startuml
alice -> bob --++ #gold: hello
bob -> alice --++ #gold: you too
alice -> bob --: step1
alice -> bob : step2
@enduml

在这里插入图片描述

4.29、进入和发出消息

  • 如果只想关注部分图示,你可以使用进入和发出箭头。
  • 使用方括号 [和] 表示图示的左、右两侧。
@startuml
[-> A: DoWork
activate A

A -> A: Internal call
activate A

A ->] : << createRequest >>
A<--] : RequestCreated
deactivate A

[<- A: Done
deactivate A
@enduml

在这里插入图片描述
还可以使用下面的语法:

@startuml
participant Alice
participant Bob #lightblue
Alice -> Bob
Bob -> Carol
...
[-> Bob
[o-> Bob
[o->o Bob
[x-> Bob
...
[<- Bob
[x<- Bob
...
Bob ->]
Bob ->o]
Bob o->o]
Bob ->x]
...
Bob <-]
Bob x<-]
@enduml

在这里插入图片描述

4.30、缩短的进入信息与发出信息箭头

使用? 来显示缩短的箭头。

@startuml
?-> Alice : ""?->""\n**short** to actor1
[-> Alice : ""[->""\n**from start** to actor1
[-> Bob : ""[->""\n**from start** to actor2
?-> Bob : ""?->""\n**short** to actor2
Alice ->] : ""->]""\nfrom actor1 **to end**
Alice ->? : ""->?""\n**short** from actor1
Alice -> Bob : ""->"" \nfrom actor1 to actor2
@enduml

在这里插入图片描述

4.31、锚点和持续时间

使用 teoz 在图表中添加锚点,从而指定持续时间。

@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

在这里插入图片描述

4.32、构造类型和圈点

  • 可以使用 << 和 >> 给参与者添加构造类型
  • 在构造类型中,你可以使用 (X,color) 格式的语法添加一个圆圈圈起来的字符
@startuml
participant "Famous Bob" as Bob << Generated >>
participant Alice << (C,#ADD1B2) Testable >>
Bob->Alice: First message
@enduml

在这里插入图片描述
默认使用 guillemet 字符来显示构造类型。你可以使用外观参数 guillemet 来修改显示行为。

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

在这里插入图片描述

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

在这里插入图片描述

4.33、 Position of the stereotypes

@startuml
skinparam stereotypePosition top
participant A<<st1>>
participant B<<st2>>
A --> B : stereo test
@enduml

在这里插入图片描述

@startuml
skinparam stereotypePosition bottom
participant A<<st1>>
participant B<<st2>>
A --> B : stereo test
@enduml

在这里插入图片描述

4.34、更多标题信息

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

@startuml
title __Simple__ **communication** example
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml

在这里插入图片描述
在标题描述中使用\n 表示换行。

@startuml
title __Simple__ communication example\non several lines
Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml

在这里插入图片描述
还可以使用关键字 title 和 end title 定义多行标题。

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

在这里插入图片描述

4.35、包裹参与者

  • 可以使用 box 和 end box 画一个盒子将参与者包裹起来
  • 还可以在 box 关键字之后添加标题或者背景颜色
@startuml
box "Internal Service" #LightBlue
participant Bob
participant Alice
end box
participant Other
Bob -> Alice : hello
Alice -> Other : hello
@enduml

在这里插入图片描述

4.36、移除脚注

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

@startuml
hide footbox
title Footer removed
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
@enduml

在这里插入图片描述

4.37、外观参数 (skinparam)

用 skinparam 改变字体和颜色。可以在如下场景中使用:

  • 在图示的定义中,
  • 在引入的文件中,
  • 在命令行或者 ANT 任务提供的配置文件中。
@startuml
skinparam sequenceArrowThickness 2
skinparam roundcorner 20
skinparam maxmessagesize 60
skinparam sequenceParticipant underline
actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as C
User -> A: DoWork
activate A
A -> B: Create Request
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: Request Created
deactivate B
A --> User: Done
deactivate A
@enduml

在这里插入图片描述

@startuml
skinparam backgroundColor #EEEBDC
skinparam handwritten true
skinparam sequence {
    ArrowColor DeepSkyBlue
    ActorBorderColor DeepSkyBlue
    LifeLineBorderColor blue
    LifeLineBackgroundColor #A9DCDF
    ParticipantBorderColor DeepSkyBlue
    ParticipantBackgroundColor DodgerBlue
    ParticipantFontName Impact
    ParticipantFontSize 17
    ParticipantFontColor #A9DCDF
    ActorBackgroundColor aqua
    ActorFontColor DeepSkyBlue
    ActorFontSize 17
    ActorFontName Aapex
}
actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as C
User -> A: DoWork
activate A
A -> B: Create Request
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: Request Created
deactivate B
A --> User: Done
deactivate A
@enduml

在这里插入图片描述

4.38、填充区设置

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

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

在这里插入图片描述

4.39、箭头类型大全

4.39.1、普通箭头
@startuml
participant Alice as a
participant Bob as b
a -> b : ""-> ""
a ->> b : ""->> ""
a -\ b : ""-\ ""
a -\\ b : ""-\\\\""
a -/ b : ""-/ ""
a -// b : ""-// ""
a ->x b : ""->x ""
a x-> b : ""x-> ""
a o-> b : ""o-> ""
a ->o b : ""->o ""
a o->o b : ""o->o ""
a <-> b : ""<-> ""
a o<->o b : ""o<->o""
a x<->x b : ""x<->x""
a ->>o b : ""->>o ""
a -\o b : ""-\o ""
a -\\o b : ""-\\\\o""
a -/o b : ""-/o ""
a -//o b : ""-//o ""
a x->o b : ""x->o ""
@enduml

在这里插入图片描述

4.39.2、进入信息(使用’[’)
@startuml
participant Alice as a
participant Bob as b
[-> b : ""[-> ""
[->> b : ""[->> ""
[-\ b : ""[-\ ""
[-\\ b : ""[-\\\\""
[-/ b : ""[-/ ""
[-// b : ""[-// ""
[->x b : ""[->x ""
[x-> b : ""[x-> ""
[o-> b : ""[o-> ""
[->o b : ""[->o ""
[o->o b : ""[o->o ""
[<-> b : ""[<-> ""
[o<->o b : ""[o<->o""
[x<->x b : ""[x<->x""
[->>o b : ""[->>o ""
[-\o b : ""[-\o ""
[-\\o b : ""[-\\\\o""
[-/o b : ""[-/o ""
[-//o b : ""[-//o ""
[x->o b : ""[x->o ""
@enduml

在这里插入图片描述

4.39.3、发出信息(使用’]’)
@startuml
participant Alice as a
participant Bob as b
a ->] : ""->] ""
a ->>] : ""->>] ""
a -\] : ""-\] ""
a -\\] : ""-\\\\]""
a -/] : ""-/] ""
a -//] : ""-//] ""
a ->x] : ""->x] ""
a x->] : ""x->] ""
a o->] : ""o->] ""
a ->o] : ""->o] ""
a o->o] : ""o->o] ""
a <->] : ""<->] ""
a o<->o] : ""o<->o]""
a x<->x] : ""x<->x]""
a ->>o] : ""->>o] ""
a -\o] : ""-\o] ""
a -\\o] : ""-\\\\o]""
a -/o] : ""-/o] ""
a -//o] : ""-//o] ""
a x->o] : ""x->o] ""
@enduml

在这里插入图片描述

4.39.4、短进入信息(使用’?’)
@startuml
participant Alice as a
participant Bob as b
a -> b : //Long long label//
?-> b : ""?-> ""
?->> b : ""?->> ""
?-\ b : ""?-\ ""
?-\\ b : ""?-\\\\""
?-/ b : ""?-/ ""
?-// b : ""?-// ""
?->x b : ""?->x ""
?x-> b : ""?x-> ""
?o-> b : ""?o-> ""
?->o b : ""?->o ""
?o->o b : ""?o->o ""
?<-> b : ""?<-> ""
?o<->o b : ""?o<->o""
?x<->x b : ""?x<->x""
?->>o b : ""?->>o ""
?-\o b : ""?-\o ""
?-\\o b : ""?-\\\\o ""
?-/o b : ""?-/o ""
?-//o b : ""?-//o ""
?x->o b : ""?x->o ""
@enduml

在这里插入图片描述

4.39.5、短发出信息(使用’?’)
@startuml
participant Alice as a
participant Bob as b
a -> b : //Long long label//
a ->? : ""->? ""
a ->>? : ""->>? ""
a -\? : ""-\? ""
a -\\? : ""-\\\\?""
a -/? : ""-/? ""
a -//? : ""-//? ""
a ->x? : ""->x? ""
a x->? : ""x->? ""
a o->? : ""o->? ""
a ->o? : ""->o? ""
a o->o? : ""o->o? ""
a <->? : ""<->? ""
a o<->o? : ""o<->o?""
a x<->x? : ""x<->x?""
a ->>o? : ""->>o? ""
a -\o? : ""-\o? ""
a -\\o? : ""-\\\\o?""
a -/o? : ""-/o? ""
a -//o? : ""-//o? ""
a x->o? : ""x->o? ""
@enduml

在这里插入图片描述

4.40、特定外观参数

4.40.1、默认情况下
@startuml
Bob -> Alice : hello
Alice -> Bob : ok
@enduml

在这里插入图片描述

4.40.2、生命线策略
  • nosolid 虚线 (默认情况)
@startuml
skinparam lifelineStrategy nosolid
Bob -> Alice : hello
Alice -> Bob : ok
@enduml

在这里插入图片描述

  • solid 实线
  • 在时序图中使用实线生命线:skinparam lifelineStrategy solid
@startuml
skinparam lifelineStrategy solid
Bob -> Alice : hello
Alice -> Bob : ok
@enduml

在这里插入图片描述

4.40.3、style strictuml

为了符合严格 UML 的标准(线头的形状必须是三角形,而不能是箭头形),你可以使用:

  • skinparam style strictuml
@startuml
skinparam style strictuml
Bob -> Alice : hello
Alice -> Bob : ok
@enduml

在这里插入图片描述

4.41、隐藏孤立参与者

默认情况下会显示所有参与者。

@startuml
participant Alice
participant Bob
participant Carol
Alice -> Bob : hello
@enduml

在这里插入图片描述
可以使用 hide unlinked 命令来隐藏未被链接到的参与者

@startuml
hide unlinked
participant Alice
participant Bob
participant Carol
Alice -> Bob : hello
@enduml

在这里插入图片描述

4.42、给分组信息着色

可以给分组信息 color[着色]。

@startuml
Alice -> Bob: Authentication Request
alt#Gold #LightBlue Successful case
Bob -> Alice: Authentication Accepted
else #Pink Failure
Bob -> Alice: Authentication Rejected
end
@enduml

在这里插入图片描述

4.43、Mainframe

@startuml
mainframe This is a **mainframe**
Alice->Bob : Hello
@enduml

在这里插入图片描述

4.44、 Slanted or odd arrows

@startuml
A ->(10) B: text 10
B ->(10) A: text 10
A ->(10) B: text 10
A (10)<- B: text 10
@enduml

在这里插入图片描述

@startuml
A ->(40) B++: Rq
B -->(20) A--: Rs
@enduml

在这里插入图片描述

@startuml
!pragma teoz true
A ->(50) C: Starts\nwhen 'B' sends
& B ->(25) C: \nBut B's message\n arrives before A's
@enduml

在这里插入图片描述

@startuml
!pragma teoz true
S1 ->(30) S2: msg 1\n
& S2 ->(30) S1: msg 2
note left S1: msg\nS2 to S1
& note right S2: msg\nS1 to S2
@enduml

在这里插入图片描述

4.45、并行信息(使用 teoz)

可以使用 & teoz 命令显示并行信息:

@startuml
!pragma teoz true
Alice -> Bob : hello
& Bob -> Charlie : hi
@enduml

在这里插入图片描述

PlantUML序列图实战:从语法到复杂交互设计 本文详细介绍了PlantUML序列图从基础语法到复杂交互设计的实战技巧,包括条件分支、循环处理、并行操作等高级特性。通过电商、物流等实际案例,展示如何利用PlantUML提升系统设计文档的清晰度和协作效率,特别适合开发者和架构师快速掌握可视化建模技能。 阅读详情

相关推荐

【UML】第12篇 序列图(1/2)——基本概念和构成

序列图(Sequence Diagram)是一种用于显示对象之间交互的图形化表示。它描述了在特定场景下,对象之间按照时间顺序进行的消息传递和协作过程。在序列图中,对象被表示为带有垂直虚线的矩形,虚线表示对象的生命周期。对象之间的交互通过箭头表示的消息来表示,箭头从一个对象的生命线指向另一个对象的生命线,表示消息的发送和接收。

AI人人懂 3048

UML时序图(序列图)

什么是时序图 时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。 让我们来看一看visio2016对时序图的的解释。 时序图的元素 我们在画时序图时会涉及7种元素:角色(Actor)、对象(Object)、生命线(LifeLine)、控制焦点(Activation)、消息(Message)、自关联消息、组合片段。其中前6种是比较常用和重要的元素,剩余的一种组合片段元素不是很常用,但是比较复杂。我们先介绍前6种

宋发元 5万+

【Ubuntu】PlantUML工具 | 安装 | 语法 | 使用工具画序列图

【Ubuntu】PlantUML工具 | 安装 | 语法 | 使用工具画序列图

静谧、淡雅 1355

UML--序列图详解

序列图的基本概念 序列图(Sequence Diagram)是对象之间基于时间顺序的动态交互,它显示出了随着时间的变化对象之间是如何进行通讯的。序列图的主要用途之一是从一定程度上更加详细地描述用例表达的需求,并将其转化为进一步的更加正式层次的精细表达。 序列图的含义 序列图用于表现一个交互,该交互是一个协作中各种类元角色间的一组消息交换,侧重于强调时间顺序。 所谓交互(Interaction)是指...

吴声子夜歌的博客 2万+

Electron多窗口开发避坑指南:Pinia状态同步的3种解决方案对比

本文深入探讨了在Electron多窗口应用中实现Pinia状态同步的三种核心方案。针对Electron多窗口架构下状态隔离的挑战,文章对比了基础事件通信、共享存储以及智能Pinia插件等方案的优劣与适用场景,并提供了生产级的实现指南与选型建议,帮助开发者构建健壮高效的桌面应用。

spice的博客 479

【mip-NeRF】使用一组二维图像渲染3D场景视频(mip-NeRF论文复现)

本文对mip-NeRF模型的pytorch实现进行了复现

Ryan2k的博客 1847

UML之序列图详解

序列图(Sequence Diagram),也称为顺序图或时序图,是一种UML交互图,用于描述系统中对象之间的动态协作和消息传递的时间顺序。时序图通过展示对象间发送消息的时间顺序,帮助开发者理解和设计系统的行为和结构。

犬余的博客 1万+

手把手教你为高云DDR3控制器添加物理约束:从位置锁定到参数配置

本文详细介绍了在高云FPGA平台上为DDR3控制器添加物理约束的实战指南,从位置锁定到参数配置。通过解析高云DDR3控制器的架构,提供关键模块的位置约束和参数调优方法,帮助开发者解决时序不稳定、初始化失败等常见问题,实现稳定可靠的DDR3接口。

weixin_33738555的博客 275

plantUML使用指南之序列图

在软件开发、系统设计和架构文档编写过程中,图形化建模工具扮演着重要的角色。而PlantUML作为一种强大且简洁的开源工具,深受开发者和架构师们的喜爱。通过使用简单的文本语法,PlantUML 能够将复杂的概念转化为直观而易于理解的图形表示,使得软件设计和沟通变得更加高效和便捷。本文旨在介绍和探索 PlantUML 的应用领域、语法规则和关键功能。我们将研究 PlantUML 的序列图,并通过实际案例和应用场景来展示其实际价值。

十十办文武的博客 6037

emqx Java 订阅以及发送 结合若依框架

emqx Java 订阅以及发送 结合若依框架

Spo的博客 1613

ShardingSphere分库分表教程,java后端开发面试题

???? 简介:Java领域优质创作者????、优快云哪吒公众号作者✌ 、Java架构师奋斗者???? ???? 扫描主页左侧二维码,加入群聊,一起学习、一起进步 ???? 欢迎点赞 ???? 收藏 ⭐留言 ???? 目录 一、分库分表 二、分库分表的方式 1、垂直分表 2、垂直分库 3、水平分表 4、水平分库 三、分库分表带来的问题 1、学习成本问题 2、事务问题 3、跨节点join问题 4、跨节点的count、order by、group by以及聚合函数问题 5、数据迁移、容量规划、扩

m0_64205716的博客 3016

plantuml 之序列图(一)

参与者 设置箭头颜色 设置箭头风格 给自己发消息 给消息编号 序列图主要包含有参与者及参与者之间的消息通信. 参与者不需要显式声明. 消息流向使用 -&amp;gt; 表示, 此时绘制出实线箭头; --&amp;gt; 则绘制点线箭头. 若要绘制反向消息流向, 可以使用 &amp;lt;- 或 &amp;lt;--. 消息文本跟在第二参与者之后, 用 : 隔开. 图 1-1 代码 (摘自官方文档) @st...

ding_yingzi的博客 5044

UG\NX二次开发 获取对象的层、颜色、隐藏状态、线宽、线型、高亮显示状态

获取对象的层、颜色、隐藏状态、线宽、线型、高亮显示状态。

王牌飞行员_里海的博客 1982

Plantuml之序列图语法介绍(十七)

本篇目的:Plantuml之序列图语法介绍使用 PlantUML 创建序列图非常简单。这种易用性主要归功于其语法的用户友好性,既直观又易记。直观的语法:首先,用户非常欣赏 PlantUML 所采用的简单直观的语法。这种经过深思熟虑的设计意味着,即使是图表创建新手也能轻松快速地掌握基础知识。文本与图形的关联:-另一个显著特点是文本表示与图形输出之间非常相似。这种和谐的相关性可确保文本草稿准确地转化为图形图表,从而提供连贯、可预测的设计体验,在最终输出中不会出现令人不快的意外。

Android系统攻城狮 1875

YOLO26创新改进 | 全网独家创新篇、小目标检测专属 | AAAI 2025 | 引入HS-FPN中的HFP和SDP创新点,从频域增强小目标特征,淘汰FPN进行升级,助力YOLO26有效涨点

本文提出HS-FPN特征金字塔网络,通过高频感知模块(HFP)和空间依赖感知模块(SDP)优化YOLO26模型。HFP利用高通滤波器增强小目标的高频特征,SDP捕获相邻像素的空间依赖关系。在AI-TOD等小目标检测数据集上,HS-FPN相比传统FPN显著提升性能。文章详细介绍了HFP和SDP的模块结构、核心代码实现,以及如何在YOLO26中集成这两个模块的配置方法,提供了多个版本的yaml文件配置方案。实验结果表明该方法能有效改善微小目标检测效果。

Ai缝合怪、助力小伙伴高效发论文 208

华为od 面试八股文_前端_03_含答案

华为od 面试八股文_前端_03_含答案

MISAYAONE的博客 2130

plantuml 之序列图(二)

给自己发消息 给消息编号 序列图分页 消息分组 对消息进行注释说明 改变注释图标形状 给自己发消息 参与者可以给自己发消息. 如图 1-6 所示. 图 1-6 图 1-6 代码 (摘自官方文档) @startuml ' 若消息很长, 可以使用 "\n" 换行. ' 消息默认是或对齐. ' 参与者名称则是默认中间对齐. Alice-&gt;Alice: ...

ding_yingzi的博客 4124

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

plantuml 之序列图(三)

分隔序列图 引用其它序列图 延迟消息 增加消息箭头上下间隔 生命线激活与销毁 创建参与者 分隔序列图 若序列图的各部分有明显的逻辑区分, 可以使用 ==== 或更多的个 = 对序列图进行分隔, 分隔中间可以加文本 ==TEXT==. 效果见图 1-13. 图 1-13 图 1-13 代码 引用其它序列图 对一个系统进行分解会形成多个序列图. 在某个序...

ding_yingzi的博客 2727

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

plantuml 之序列图(四)

流入消息与流出消息 构造型与 spot 对参与者分组 去除参与者底部方框 改变文本与边框的填充空间 流入消息与流出消息 流入消息指流入序列图的消息, 并非由序列图中的参与者发出的; 流出消息指流出序列图的消息, 亦非由序列图中的参与者发出. 在定义 消息箭头 的语法前或后加上 [ 或 ] 分别表示注入消息与流出消息. 效果见图 1-20. 图 1-20 图 1...

ding_yingzi的博客 2129

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Napkin:用Python编写PlantUML序列图的强大工具

Napkin:用Python编写PlantUML序列图的强大工具 一、项目基础介绍与主要编程语言 Napkin 是一个开源项目,旨在通过使用 Python 语言来编写 PlantUML 序列图。该项目提供了一种简洁而直观的方法,将序列图转换为几乎等同于普通 Python 代码的形式,从而降低了编写和维持复杂序列图的难度。Napkin 的主要编程语言是 Python。 二、项目的核心功能 Napki...

gitblog_00727的博客 548

【PlantUML系列】序列图实战:从基础到高级技巧

本文深入解析PlantUML序列图从基础到高级的实战技巧。通过定义参与者、掌握消息交互语法、运用组合片段处理复杂逻辑,并结合注释与美化,帮助开发者高效绘制清晰的技术文档与系统架构图,提升团队沟通与设计效率。

weixin_29250573的博客 501

PlantUML序列图:从零到精通的视觉化编程艺术

本文详细介绍了PlantUML序列图的使用方法,从基础语法到高级交互模式,帮助开发者掌握视觉化编程艺术。通过实例演示条件逻辑、并行处理等高级技巧,提升技术文档的可读性和维护效率。PlantUML的文本描述方式特别适合需要频繁更新的系统设计文档。

weixin_29269441的博客 291

用plantuml做一个序列图

在vscode里面安装plantuml插件,

walle的博客 636

PlantUML序列图解读01[实录]

autonumber这里就是自动编号的意思

rolt的专栏 25

告别丑陋时序图:C4-PlantUML序列图皮肤参数全解析

你是否还在为系统架构中的交互流程可视化而烦恼?序列图作为展示对象间通信的核心工具,却常常因默认样式杂乱、层次不清导致沟通效率低下。本文将通过**TestSequenceSkinparams.puml**示例,详解如何利用C4-PlantUML的皮肤参数功能,10分钟打造专业级序列图。读完你将掌握:主题定制、元素样式调整、交互流程美化的全流程技巧,让架构设计稿从此清爽易懂。 ## 核心痛点与解决方

gitblog_00501的博客 900
上一篇: PlantUML——对象图
下一篇: PlantUML——状态图
吴声子夜歌
博客等级 码龄9年 2688粉丝 2268原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值