• PlantUML 绘制时序图


    目录

    什么是时序图

     案例说明

    Idea安装PlantUML插件

    PlantUML语法

    声明参与者

    注释

    组合消息

    颜色

    其他


    什么是时序图

            时序图有时候也被称为序列图,活动序列图,作为交互图的一种,时序图按照时间顺序从上往下显示每个操作。

     案例说明

       我们以一个日常生活中常见的操作,在ATM上查询银行卡账户余额,首先用户先将银行卡插入读卡器,然后在屏幕上输入密码,如果密码错误则回提示重新输入密码,如果密码正确则会收到一条登陆ATM的提示短信。我们根据这个流程怎么绘制时序图呢?我们就看看下图:

    在这幅图中,垂直的虚线叫做参与者的生面线,表示一个对象的存活时间。每个箭头都表示一个调用。我们在了解时序图以后,我们看看如何使用PlantUML 绘制时序图。

    Idea安装PlantUML插件

            idea->preferences->plugin;在marketplace中搜索PlanUML Integration, 进行安装;安装后我们就可在idea中新建一个PlantUML 文件,图下图所示

    PlantUML语法

         上文中ATM的时序图就是使用PlantUML绘制的,plantUML 文件是以 @startuml 开头, 以 @enduml结尾,如下所示:

    @startuml
    'https://plantuml.com/sequence-diagram
    title 时序图示例
    header @author chenxiu
    footer page  @author chenxiu
    skinparam roundcorner 20
    skinparam sequenceParticipant underline
    skinparam LifeLineBackgroundColor #lightYellow
    hide footbox
    actor User as user #green
    box ATM
    control 屏幕 as app #lightBlue
    participant 读卡器 as reader #yellow
    end box
    
    box BANK #lightBlue
    participant service
    entity 短信
    queue   MessageQueue
    database Mysql
    
    activate user
    user->reader #lightBlue:插如银行卡
    activate reader
    reader-> reader:读卡
    activate reader
    deactivate reader
    reader->app:显示屏幕
    deactivate reader
    activate app
    app ->user:提示输入密码
    deactivate app
    user->app:输入密码
    activate app
    app-> service:查询用户
    activate service
    service->Mysql:查询用户
    activate Mysql
    Mysql ->service:resultSet
    deactivate Mysql
    alt 用户存在
       service ->> MessageQueue:发送登陆ATM消息
    activate MessageQueue
    note over MessageQueue #red:通过消息队列消峰
       ...30秒...
       MessageQueue ->短信:发送短信
       activate 短信
       短信 -->user
       deactivate 短信
       deactivate MessageQueue
       service ->app:服务选项
       app -> user :提示选择服务
    else 用户不存在
    |||
       service->app:登陆失败
       deactivate service
       app-> user:重新输入密码
       deactivate app
    end
    
    @enduml 通过上文的DEMO,我们逐步来分析时序图的内容

    声明参与者

         在时序图中使用 a -> b绘制两个参与者之间的关系,a,b 都是参与者,不必明确声明.但是如果需要对参与者进行更多的控制就需要声明参与者,在PlantUML 中支持其中参与者

    参与者含义
    participant 参与者
    actor角色
    boundary边界
    control控制
    entity实体
    database数据库
    collections集合
    queue队列

    各个参与者的效果如下图所示:

    可以使用 as 关键字给参与者取别名,也可以针对参与者使用多行定义,具体代码示例如下:

    1. @startuml
    2. 'https://plantuml.com/sequence-diagram
    3. '使用 as 关键字对参与者Actor取别名 user,在后续的代码中可以直接使用别名'
    4. actor Actor as user
    5. participant Participant
    6. participant 多行参与者 [
    7. =标题
    8. ----
    9. 副标题
    10. ]
    11. control Control
    12. boundary Boundary
    13. entity Entity
    14. collections Collections
    15. queue Queue
    16. database Database
    17. user->Participant
    18. user->多行参与者
    19. user->Control
    20. user->Boundary
    21. user->Entity
    22. user -> Collections
    23. user->Queue
    24. user->Database
    25. @enduml

    注释

      在代码中使用 ‘注释’ 针对代码进行注释,在UML中使用如下语句添加注释

    note right: this is another note
    note left: this is another note
    note over Alice: This is displayed over Alice.
    

    组合消息

         可以通过以下关键字来组合消息

    关键字 含义
    alt/else/endif..else
    loop/end循环
    par/end常态
    break/end中断条件
    critical/end条件
    group分组
    opt可选项

    代码示例 

    1. @startuml
    2. 'https://plantuml.com/sequence-diagram
    3. A ->B
    4. alt success
    5. B-> C
    6. opt 可选逻辑
    7. C-->D
    8. end
    9. par 正常场景
    10. C-->D
    11. end
    12. critical input==1
    13. C-->E
    14. end
    15. break input <=0
    16. E ->C
    17. end
    18. group 分组说明 [second]
    19. loop 100
    20. B->B:自旋
    21. end
    22. end
    23. C -->A
    24. |||
    25. else fail
    26. |||
    27. B--> A
    28. end
    29. @enduml

     

    颜色

    在PlantUML 中很多元素都是可以修改颜色的,下面我们分别来看看修改颜色

    说明语法示例
    修改参与者颜色participant Participant  #blue 
    改变箭头颜色user -[#blue]> Participant
    改变消息颜色
    user -> participant:<font color=red> requestg
    改变生面线颜色
    控制器 ->alice #lightyellow:认证失败
    修改注释颜色
    note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice.
    
    修改背景颜色
    skinparam backgroundColor #EEEBDCm

    锚点和持续时间

    可以在时序图中添加锚点,进而指定持续时间

    1. @startuml
    2. !pragma teoz true
    3. {start} Alice -> Bob : start doing things during duration
    4. Bob -> Max : something
    5. Max -> Bob : something else
    6. {end} Bob -> Alice : finish
    7. {start} <-> {end} : some time
    8. @enduml

     

     

    其他

    说明语法备注
    标题title 时序图示例
    页头header 我是页头
    页脚footer page 1/2
    开启自动序号autonumber
    隐藏脚注hide footbox
     延迟... 五分钟后 ...
    分页newpage
    分割== 分割 ==
    激活生命线activate
    撤销生命线deactivate
    终结生命线destory
    自动激活生命线autoactivate /return 
    创建对象create
    包裹参与者box/end box

    可以使用box, end box

    将多个声明参与者包围在一起

    隐藏孤立的参与者
    hide unlinked
    

    参考资料:

    顺序图的语法和功能PlantUML序列图的语法:你可以有几种类型的参与者(演员和其他人),箭头,音符,组...改变字体和颜色也有可能。https://plantuml.com/zh/sequence-diagram

  • 相关阅读:
    Qt官方示例:Fridge Magnets Example(冰箱贴)
    华为再次入选2022年Gartner® SIEM魔力象限
    Scikit-Learn逻辑回归
    gdb的一些常见命令收录
    2022年06月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
    十家公司有九家问过的软件测试面试题,最后一题我猜你肯定不会
    TCP协议_三次握手与四次挥手
    典型卷积神经网络算法(AlexNet、VGG、GoogLeNet、ResNet)
    渗透测试之信息收集思路(分析网站架构)
    构造方法
  • 原文地址:https://blog.csdn.net/zhangwei_david/article/details/125451459