喜好

喜好检索

生活 蔬菜

蔬菜大全

思考

见闻与录

BT技术

BT蓝牙技术

标签

PlantUML时序绘画工具 2023年11月20日

    大纲

    PlantUML时序绘画工具

    [PlantUML 官网] (https://plantuml.com/zh/)

    《PlantUML 语言参考指南》

    PlantUML Git仓库

    PlantUML是一个多功能组件,可快速、直接地创建图表。用户可以使用简单直观的语言起草各种图表
    
    

    序列图

    [序列图说明] (https://plantuml.com/zh/sequence-diagram)

    序列图案例1

    sequence_1.puml

    
    @startuml
    'https://plantuml.com/sequence-diagram
    
    
    Alice -> Bob: Authentication Request
    Bob --> Alice: Authentication Response
    
    Alice -> Bob: Another authentication Request
    Alice <-- Bob: another authentication Response
    @enduml
    
    

    序列图案例2_autonumber

    关键字 autonumber 用于自动对消息编号
    
    
     autonumber //start// 用于指定编号的初始值,而 autonumber //start// //increment// 可以同时指定编号的初始值和每次增加的值
     
    autonumber 在双引号内指定编号的格式。 格式是由 Java 的DecimalFormat类实现的: (0 表示数字;# 也表示数字,但默认为0)。
    
    

    sequence_2.puml

    
    @startuml
    'https://plantuml.com/sequence-diagram
    
    autonumber
    
    Alice -> Bob: Authentication Request
    Bob --> Alice: Authentication Response
    
    Alice -> Bob: Another authentication Request
    Alice <-- Bob: another authentication Response
    @enduml
    
    
    

    序列图案例3_participant

    如果使用关键字participant 来声明参与者,就可以对该参与者进行更多的控制。
    声明的顺序将是(默认的)显示顺序。
    使用这些其他的关键字来声明参与者,将改变参与者的表示形状。
     actor(角色)
     boundary(边界)
     control(控制)
     entity(实体)
     database(数据库)
     collections(集合)
     queue(队列)
    
    
    使用as 关键字重命名参与者  ( participant Participant as Foo )
    
    使用order 关键字来定制参与者的显示顺序 ( participant Last order 30 )
    
    使用# 井号 来标注颜色 ( actor Bob #red )
    
    
    多行定义
    participant Participant [
        =Title
        ----
        ""打算""
    ]
    
    
    箭头文本对齐 
    skinparam sequenceMessageAlign left
    skinparam sequenceMessageAlign right 
    skinparam sequenceMessageAlign center
    
    
    
    让响应信息显示在箭头下面
    skinparam responseMessageBelowArrow false
    skinparam responseMessageBelowArrow true
    
    关键字 autonumber 用于自动对消息编号
    
    
    

    改变箭头样式

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

    sequence_3.puml

    
    @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
    
    
    

    组合消息

    
    我们可以通过以下关键词来组合消息:
      alt/else
      opt
      loop
      par
      break
      critical
      group 
    后面紧跟着消息内容 可以在标头(header)添加需要显示的文字(对于group关键字,参看下一章节 '次级分组标签')。
    关键词 end 用来结束分组。
    注意,分组可以嵌套使用。
    
    

    sequence_4_1.puml

    
    @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
    
    

    sequence_4_2.puml

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

    注释信息

    可以使用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
    
    

    注释信息颜色背景

    
    @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
    
    
    

    生命线的激活与撤销

    
    关键字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关键字配合

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

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

    
    @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
    
    
    
    

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

    
    在指定目标参与者后,可以立即使用以下语法:
    ++ 激活目标(可选择在后面加上#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
    alice -> bob   --++ #gold: hello
    bob   -> alice --++ #gold: you too
    alice -> bob   --: step1
    alice -> bob   : step2
    @enduml
    
    
    
    

    用例图

    类图

    对象图

    活动图

    组件图

    部署图

    状态图

    时序图