[UML基礎] 循序圖(Sequence Diagram)

最近Senior RD 請我根據系統架構畫出循序圖,這邊做學習筆記,好讓日後好複習。

  • 什麼是循序圖

               循序圖是普遍被開發者使用的工具,在單例使用者和物件的互動中做建模。它們說明系統不同的部分如何進行互動以及如何執行功能,以及執行特定案例中的發生的前後順序。
               用簡單的話來說,循序圖可以表示系統不同部分上的作業順序,以完成某些工作。

  • ​循序圖符號

               時間軸可以代表循序圖的結構方式,該時間軸從頂部開始並逐漸下降以標記互動的順序,每一個物件擁有一個列,它們之間交互的訊息用箭頭表示。
               

循序圖各個部分的快速概述:

生命線符號(Lifeline Notation)  :

一個循序圖是由數個生命線符號所組成且應該在頂部做水平排列。沒有兩個生命線符號可以互相重疊。

它們是表示系統之相互交互的不同物件或部分零件的順序。

Actor(角色)元素:


當特定循序圖是被特定使用案例所有擁有時,將使用帶有Actor(角色)元素符號的生命線符號。
             

Entity(實體)元素:

帶有entity(實體) 元素的生命線代表系統資料,例如:在一個顧客服務Application,客戶實體將管理和客戶相關的全部資料。

Boundary(邊界)元素:

帶有邊界(Boundary)元素的生命線描述一個系統的邊界或軟體元素在系統中。例如:使用者介面屏幕,使用者和資料庫關口或目錄互動,就是一個邊界。


Control(控制)元素:

帶有控制(Control)元素的生命線表示控制實體或管理者。它組織和安排邊界和實體之間的互動,並充當它們之間的中介。

活動條(Activation Bars)

活動條是放置在生命線上的框。它用於指示在兩個對象之間的互動期間某個對象處於活動狀態(或實例化)。矩形的長度表示對象保持活動狀態的持續時間。

在循序圖中,當一個物件向另一個物件發送消息時,就會發生兩個對象之間的交互互動。

在訊息調用者(發送消息的對象)的生命線上使用活動條
和訊息接收器(接收訊息的物件)指示消息交互期間兩者均處於活動狀態/已實例化。
   

訊息箭頭(Message Arrows)

從訊息調用者到訊息接收者的箭頭指定循序圖中的消息。

一條訊息可以向任何方向流動。從左到右,從右到左或返回到訊息調用者本身。

雖然您可以在箭頭上描述從一個對象發送到另一對象的消息,但是可以使用不同的箭頭來指示要發送或接收的消息的類型。

訊息箭頭上帶有描述,稱為消息簽名。此消息簽名的格式如下。除message_name之外的所有部分都是可選的。
          

          attribute = message_name (arguments): return_type 

同步訊息(Synchronous Message)

如活動條示例所示,當發送方等待接收方處理該訊息並在繼續處理另一條訊息之前返回時,將使用同步訊息。

用來指示這種訊息類型的箭頭是可靠的,如下面的消息所示。
 

非同步訊息(Asynchronous Message)

當消息調用方在將其他消息發送到系統內的其他對象之前不等待接收方處理該訊息並返回時,將使用異步訊息。
用於顯示此類訊息的箭頭是一條線箭頭,如下面的示例所示。

回傳訊息(Return message)

回傳訊息用於指示訊息接收者已完成對訊息的處理,並將控制權返回給訊息調用者。

備註(Tip):通過最大程度地減少回傳訊息的使用,可以避免造成混亂,因為可以在初始訊息箭頭本身中指定返回值。

參與者創建訊息(Participant  creation message)

物件不一定在事件序列的整個持續時間內都存在。可以根據正在發送的消息來創建物件或參與者。

參與者破壞訊息(Participant destruction message)

同樣,不再需要的參與者也可以從序列圖中刪除。這是通過在參與者的生命線末尾添加“ X”來實現的。

回溯訊息(Reflexive message)

當物件向自身發送消息時,稱為回溯消息。訊息箭頭指示該訊息的起點和終點在同一生命線,如下例所示。    

評論(Comment)


UML圖通常允許在所有UML圖類型中註釋的註釋。

註釋對像是一個具有折角的矩形,如下所示。註釋可以用虛線鏈接到相關物件。

  • 循序圖最佳的實踐方式:

用sequence fragment 來管理複雜的交互作用

sequence fragment 表示唯一個框,該框在循序圖中構成物件之間交互作用的一部分

它用於以更結構化的方式顯示複雜的交互作用,例如:alternative flows和 loops。
片段的左上角是一個operator notation,這是Fragment Notation,它指定the type of fragment。 



Alternatives:

此替代組合片段是被用於當選擇余兩個或多個訊息順序。此模組是if then else的邏輯。

替代片段是由一個大舉行或框表示,它是通過框內的名稱用"alt"(也稱為片段運算符)表示。
為了顯示兩個或多個選擇,會使用虛線(dashed line)將較大的矩形劃分為所謂的交互操作數,
如上面的序列圖示例所示。每個操作數都有一個要測試的防護,它位於操作數的左上角。

Options:


可選組合片段是用來描述循序將只發上在正確的狀況,否則此循序將不會發生。此模板是"if then" 陳述式。
相似於alternative fragment,可選片段也使用矩形框代表,"opt"是放置進 名稱框。
不像alternative fragment,可選片段不分為兩個或多個操作數。選件的防護罩位於左上角。
(在循序圖模板和示例部分中找到帶有option fragment的循序圖示例)


Loops:


迴圈片段是用來代表重複的序列。放置單字"loop"於名稱框且遮罩狀況位於左上角的框。
除了 Boolean test之外,循環片段中的遮罩還可以針對其他兩個特殊條件進行測試。這些是最小迭代(written as minint= [the number])和最大迭代(written as maxint = [the number])。
如果這是最小迭代保護,則此loop的次數不得少於上述次數;如果它是最大迭代保護,則循環執行的次數不得超過所示次數。


Reference Fragment

可以使用ref fragment來管理大型序列圖的大小。它允許您在另一個序列圖中重用一個序列圖的一部分,

或者換句話說,您可以使用ref fragment在另一個圖中引用一個圖的一部分。
要指定參考片段,您必須在框架的名稱框中提及“ ref”,並在框架內引用序列圖的名稱。

  • 繪製更小的循序圖以捕捉用例的本質。

與其用幾個物件和幾組訊息弄亂您的循序圖,不如繪製一些較小的時序圖來恰當地解釋系統的功能。

在閱讀器中,繪製一些較小的循序圖,以恰當地說明您的系統的功能。確保該圖適合單個頁面,並且還留有解釋性註釋的空間。
同樣,不要繪製幾十個循序圖,而要找出場景之間的共同點,並專注於此。而且,如果代碼具有表達力並且可以獨立運行,則無需首先繪製循序圖。

參考 : Sequence Diagram Tutorial