markdown工具鏈plantuml:像寫代碼一樣繪制 UML 模型-時列圖


markdown工具鏈plantuml:像寫代碼一樣繪制 UML 模型-時列圖

概述

序列圖具有直觀、形象的特點,對於理清、呈現對象之間的交互關系非常有幫助。在UML建模中,時序圖中包括的建模元素主要有:對象(Actor)、生命線(Lifeline)、控制焦點(Focus of control)、消息(Message)等。

  • 角色: 可以是人或者系統;
  • 對象:指系統中某個模塊、類、類的實例等,對象的命名包含三種方式:1)對象:類名;2):類名;3)對象名。通常,為作圖清晰,對象的排列遵循以下兩個原則:1)把交互頻繁的對象盡可能的靠攏;2)把初始化整個交互活動的對象放置在最左端;
  • 生命線:從對象圖標向下延伸的一條虛線,表示對象存在的時間;
  • 控制焦點:又稱為激活期,表示時間段的符號,在這個時間段內對象將執行相應的操作。它可以被理解成C語言語義中一對花括號{ }中的內容;用小矩形表示;
  • 消息:用於對象間傳遞信息,消息代表的是責任分配而不是數據流動,消息名稱中不用帶“請求二次”,因為消息箭頭已經包含有請求的意思。例如,A指向B是指A調用B做某事,做某事是B的一個責任。消息可分為:
    • 1)同步消息(Synchronous Message):又稱調用消息,消息的發送者把控制傳遞給消息的接收者,然后停止活動,等待消息的接收者放棄或者返回控制。用來表示同步的意義;
    • 2)異步消息(Asynchronous Message):消息發送者通過消息把信號傳遞給消息的接收者,然后繼續自己的活動,不等待接受者返回消息或者控制。異步消息的接收者和發送者是並發工作的;
    • 3)返回消息(Return Message): 返回消息表示從過程調用返回;
    • 4)自關聯消息(Self-Message): 表示方法的自身調用以及一個對象內的一個方法調用另外一個方法。

上述各個建模元素使用 plantuml 語言示意如下:

@startuml
actor 角色

activate 對象1 
角色 -> 對象1 

對象1 -> 對象2 : 同步消息
對象2 --> 對象1 : 返回消息1

對象1 o-> 對象2 : 異步消息

對象1 -> 對象1 : 自關聯消息

@enduml

一般異步消息開始點使用圓圈表示

角色、對象(參與者)

UML中, 角色可以是人或者系統;對象 指系統中某個模塊、類、類的實例等,對象的命名包含三種方式:1)對象:類名;2):類名;3)對象名。通常,為作圖清晰,對象的排列遵循以下兩個原則:1)把交互頻繁的對象盡可能的靠攏;2)把初始化整個交互活動的對象放置在最左端;

UML角色與對象在 plantuml 中都是參與者。

聲明參與者

plantuml 使用如下關鍵字actor, boundary, control, entity, database聲明參與者:

@startuml
actor actor
boundary boundary
control control
entity entity
database database
@enduml

  • 可以使用 <<>> 給參與者添加構造類型。在構造類型中,可以使用 (X,color) 格式的語法添加一個圓圈圈起來的字符;
  • 可以使用 participant 改變參與者的先后順序與顏色。
  • 可以使用引號定義參與者,此時參與者可以使用特殊字符。
@startuml
participant A << (C,#ADD1B2) Test >> order 2 #red
participant B order 1 #99ff99

A -> B
B -> "C()" : 測試

@enduml

order 值越小,越靠前。

包裹參與者

plantuml 可以使用 boxend box 畫一個盒子將參與者包裹起來。 還可以在 box 關鍵字之后添加標題或者背景顏色。

@startumlA

box "帖子管理" #LightBlue 
participant 添帖模塊 
participant 查詢模塊
end box

participant 數據庫
添帖模塊 -> 查詢模塊 : 查詢帖子
查詢模塊 -> 數據庫 : 查詢數據庫
@enduml

外觀參數

plantuml 用 skinparam 改變字體和顏色。
可以在如下場景中使用:

  • 在圖示的定義中,
  • 在引入的文件中,
  • 在命令行或者ANT任務提供的配置文件中。
@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
}

box "帖子管理" #LightBlue 
participant 添帖模塊 
participant 查詢模塊
end box

participant 數據庫
添帖模塊 -> 查詢模塊 : 查詢帖子
查詢模塊 -> 數據庫 : 查詢數據庫
@enduml

生命線

UML 中,生命線是從對象圖標向下延伸的一條虛線,表示對象存在的時間。

時延與空間

在 plantuml 中,可以使用...來表示延遲,並且可以給延遲添加注釋;可以使用 ||| 來增加空間。可以使用數字指定增加的像素的數量。

@startuml
帖子管理模塊 -> 數據庫: 認證請求
... 
帖子管理模塊 <-- 數據庫: 返回碼
...5 分鍾后... 

數據庫 <-  帖子管理模塊 : 斷開連接
||45||
數據庫 -->  帖子管理模塊 : 再見
@enduml

控制焦點(激活期)

控制焦點,又稱為激活期,表示時間段的符號,在這個時間段內對象將執行相應的操作。它可以被理解成C語言語義中一對花括號{ }中的內容;用小矩形表示;

在plantuml中,關鍵字 activate用來表示參與者的生命活動,一旦參與者被激活,就進入激活期。使用 deactivate 退出生命期。
還可以使用嵌套的生命線,並且運行給生命線添加顏色。可以使用destroy銷毀生命線。

@startuml 
participant 用戶 
用戶 -> 帖子管理模塊: 發帖 
activate 帖子管理模塊 #FFBBBB

帖子管理模塊 -> 帖子管理模塊: 內部調用 
activate 帖子管理模塊 #DarkSalmon

帖子管理模塊 o-> 數據庫: << 創建表項 >> 
activate 數據庫
deactivate 帖子管理模塊

數據庫 --> 帖子管理模塊: 返回碼
destroy 數據庫
@enduml

消息

UML序列圖中,消息用於對象間傳遞信息,消息代表的是責任分配而不是數據流動,消息名稱中不用帶“請求二次”,因為消息箭頭已經包含有請求的意思。例如,A指向B是指A調用B做某事,做某事是B的一個責任。消息可分為:

  • 1)同步消息(Synchronous Message):又稱調用消息,消息的發送者把控制傳遞給消息的接收者,然后停止活動,等待消息的接收者放棄或者返回控制。用來表示同步的意義;
  • 2)異步消息(Asynchronous Message):消息發送者通過消息把信號傳遞給消息的接收者,然后繼續自己的活動,不等待接受者返回消息或者控制。異步消息的接收者和發送者是並發工作的;
  • 3)返回消息(Return Message): 返回消息表示從過程調用返回;
  • 4)自關聯消息(Self-Message): 表示方法的自身調用以及一個對象內的一個方法調用另外一個方法。

進入和發出消息

在 plantuml 中,如果只想關注部分圖示,你可以使用進入和發出箭頭。 使用方括號 [] 表示圖示的左、右兩側。

@startuml 
[-> 帖子管理 : 發帖
帖子管理 ->] : 刪除某個表項
帖子管理 <--] : 錯誤碼
@enduml

箭頭

在 plantuml 中,可以修改箭頭的樣式、顏色。

1. 修改箭頭樣式的方式有以下幾種:

  • 表示一條丟失的消息,末尾加x
  • 讓箭頭只有上半部分或者下半部分:將 <> 替換成 \ 或者 /
  • 細箭頭:將箭頭標記寫兩次 (如 >> 或 //) ;
  • 虛線箭頭:用 -- 替代 -
  • 箭頭末尾加圈:->o
  • 雙向箭頭:<->

2. 可以使用記號修改箭頭顏色A -[#red]> B

@startuml
A -> B : 正常消息
A ->x B : 丟失的消息
A ->> B : 小箭頭消息
A -\ B : 單箭頭消息
A -/ B : 單箭頭消息
A o-> B : 圓點箭頭消息
A ->o B : 圓點箭頭消息

A -[#blue]> B : 修改箭頭顏色
@enduml

消息編號

在 plantuml 中,通過關鍵字 autonumber start_num step 給消息自動編號;
可通過在雙引號內指定編號的格式,格式是由 Java 的 DecimalFormat 類實現的:(0 表示數字;# 也表示數字,但默認為 0)。也可以用HTML標簽來制定格式。

可以使用autonumber stop停止使用編號。

@startuml

autonumber 
A -> B : 編號的消息

autonumber 10 5
A -> B : 編號1的消息
A -> B : 編號4的消息

autonumber "<b>[000]"
A -> B : 3位編號

autonumber 15 "<b>(<u>##</u>)" 
A -> B : 2位編號

autonumber 20 "<font color=red><b> 消息 0 :"
A -> B : 紅色消息
@enduml

組合消息

在 plantuml 中,可以通過關鍵字alt, opt, loop, group, par, critical聲明組合消息。

  • alt: 抉擇,用來指明在兩個或更多的消息序列之間的互斥的選擇,相當於經典的if..else..

抉擇在任何場合下只發生一個序列。 可以在每個片段中設置一個臨界來指示該片段可以運行的條件。else的臨界指示其他任何臨界都不為 True 時應運行的片段。如果所有臨界都為 False 並且沒有 else,則不執行任何片段。

@startuml

alt 查詢成功

發帖模塊 -> 查貼模塊 : 查詢
return 帖子ID

else 查詢失敗小於3次

發帖模塊 -> 查貼模塊 : 查詢
查貼模塊 -> 查貼模塊 : 重試

else 查詢失敗大於3次

發帖模塊 -> 查貼模塊 : 查詢
return 查詢錯誤碼

end
@enduml

  • opt :選項,包含一個可能發生或不發生的序列
@startuml

opt 查詢頻率超過 1000次/s

發帖模塊 -> 查貼模塊 : 查詢
return 返回拒絕服務碼

end
@enduml

  • loop,循環
@startuml

loop 每周一

員工 -> 主管 : 匯報
return 安排工作

end
@enduml

  • group: 后面緊跟着消息內容,表示一個序列組
@startuml

group 發帖操作
actor 用戶
用戶 -> 發帖模塊 : 發貼
發帖模塊 -> 數據庫 : 查詢數據庫
return 查詢結果

發帖模塊 -> 數據庫 : 添加數據庫
return  添加成功

end
@enduml

  • par:並行,表示兩個消息可以並行就行,不同消息使用else隔開。
@startuml
客人 -> 廚師 : 點菜
activate 廚師

par
廚師 -> 廚師 : 炒菜
else
廚師 -> 廚師 : 燉湯
end
@enduml

  • critical: 關鍵,用在 Par 或 Seq 片段中。 指示此片段中的消息不得與其他消息交錯。

注釋

在 plantuml 中,可以通過在消息后面添加 note left of 對象 或者 note right of 對象 關鍵詞來給消息添加注釋;
可以使用 end note 來添加多行注釋;
可以使用 rnote或者 hnote代替 note,分別表示 矩形 與 六邊形
可以在 note 的后面添加 #顏色,改變 note 的顏色。

@startuml

發帖模塊 -> 數據庫 : 添加
note right of 發帖模塊
需要用戶密碼認證
end note

發帖模塊 -> 數據庫 : 刪除
hnote right of 發帖模塊 #aqua
需要用戶密碼認證
end note

@enduml

分割

可以使用 == 關鍵字 == 分割消息為不同的部分

@startuml

發帖模塊 -> 數據庫 : 添加
note right of 發帖模塊
需要用戶密碼認證
end note

== 關鍵字 ==

發帖模塊 -> 數據庫 : 刪除
hnote right of 發帖模塊 #aqua
需要用戶密碼認證
end note

@enduml

參考

NFVschool 微信公共號,關注最前沿的網絡技術。


原文鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM