此份指引內容參考自Ambler S.W. 的著作 The Object Primer 2nd Edition(SIGS Books, 2001),並做了一些修改。這份文件能協助我們使用循序圖(Sequence Diagram)進行系統設計,並提供許多設計時需要注意的地方。由於內容滿多的,得分成多篇文章來發表,我們先來看繪圖的一般原則吧!
General Guidelines
此章節將說明繪製循序圖時的一般原則,主要著重在畫循序圖時,要注意的一些基本原則及規範。
1 依循命名規則為循序圖命名
循序圖的命名規則如下(這是我訂的命名規則,參考就好,重點就是要訂出命名規則):
l 描繪基本流程的圖,命名規則為:循序圖類型縮寫名稱-使用案例代碼-系統事件名稱
l 描繪替代流程的圖,命名規則為:循序圖類型縮寫名稱-使用案例代碼_AF_替代流程代碼-系統事件名稱
l 描繪分支流程的圖,命名規則為:循序圖類型縮寫名稱-使用案例代碼_BF_分支流程代碼-系統事件名稱
下表為各種不同類型的循序圖之縮寫名稱及命名的範例。
表 1. 循序圖的命名規則 | ||
Diagram Type | Abbreviation | Example |
System Sequence Diagram | SSD | SSD-UC_001-InvokeProcess |
System Sequence Diagram with User Interface | UISSD | UISSD-UC_001-InvokeProcess |
Design Sequence Diagram | DSD | DSD-UC_001-InvokeProcess DSD-UC_001_AF_B-InvokeProcess DSD-UC_001_BF_A-InvokeProcess |
User Interface Sequence Diagram | UISD | UISD-UC_001-InvokeProcess UISD-UC_001_AF_B-InvokeProcess UISD-UC_001_BF_A-InvokeProcess |
2 訊息傳遞以由左至右的方向開始
循序圖上的訊息傳遞方向,以由左至右為主,如圖1所示,每個訊息基本上都是以由左至右的方向發出。不過有時候訊息的傳遞方向還是有可能由右至左,譬如兩個物件互動傳遞訊息給對方時。
3 按由外而內的類別層次順序擺放類別
循序圖會出現不同的類別層次的類別(Class),不同層次的類別會有不同的擺放順序,一般的由左至右的擺放順序是參與者(Actor Class)、使用者介面類別(User-Interface Class)、控制類別(Controller Class)、企業類別(Business Class)、儲存輔助類別(Persistent Class)及相關的系統類別(System Class),圖1便採用這樣的順序來擺放物件,這樣的擺放順序能增加循序圖的可讀性,也能表現各種類別由外而內的層次關係。
圖1. Enrolling a student
4 參與者的命名與使用案例模型一致
當使用案例模型中的參與者(Actor)出現在循序圖上時,在循序圖中的參與者之名稱應該要和使用案例模型一致。
5 類別的命名與類別模型一致
當類別模型 (Class Model)中的類別出現在循序圖上時,在循序圖中的類別之名稱應該要和類別模型保持一致。
6 在圖的左側列出使用案例的步驟
如圖1,對一個不是很熟悉循序圖的人來說,這樣的圖其實並不是很容易理解,因為它已經滿接近程式碼。所以你可以像圖2一樣,把循序圖所描述的使用案例步驟列在圖的左側方便對照,除了可以讓循序圖更容易解讀外,也可以讓你確認循序圖與使用案例的一致性。
此指引不具強制性,若您使用的Modeling工具無法很方便地在循序圖上加上使用案例步驟,那您可以不循序此指引的規範。
圖2. Checking out an online order.
7 塑模物件消滅行為的時機
對任何系統而言,記憶體管理一直是很重要的議題,如何在對的時間將物件從記憶體中移除更是特別的重要。不過對於非即時系統而言,我們依循Agile Modeling的「簡單塑模」原則,不在循序圖上使用物件消滅標記(包括”X”符號及<
不特別去塑模物件的消滅行為有兩個理由:第一理由是,許多程式語言,如Java、Smalltalk會透過Garbage Collection的技術來自動地管理記憶體。第二個理由是,有些如C++這種必須由你自己來管理記憶體的程式語言,此類語言的程式設計師一般都必須有好的記憶體管理技巧,所以不需在循序圖上添加這些物件消滅的資訊。
然而,對於即時系統而言,你可能需要去塑模物件的消滅行為,因為即時系統的記憶體管理通常會較非即時系統重要許多。
循序圖上不可或缺的元素是物件(Object)及訊息(Message),下一篇文章我們將說明在繪製循序圖上的物件時,需要注意的地方及繪製原則。

