天天看點

UML序列圖

轉載來源,學習UML的好地方

[注] 基于原文編輯

序列圖的目的

序列圖主要用于按照互動發生的一系列順序,顯示對象之間的這些互動。很象類圖,開發者一般認為序列圖隻對他們有意義。然而,一個組織的業務人員會發現,序列圖顯示不同的業務對象如何互動,對于交流目前業務如何進行很有用。除記錄組織的目前事件外,一個業務級的序列圖能被當作一個需求檔案使用,為實作一個未來系統傳遞需求。

在項目的需求階段,分析師能通過提供一個更加正式層次的表達,把用例帶入下一層次。那種情況下,用例常常被細化為一個或者更多的序列圖。

組織的技術人員能發現,序列圖在記錄一個未來系統的行為應該如何表現中,非常有用。在設計階段,架構師和開發者能使用圖,挖掘出系統對象間的互動,這樣充實整個系統設計。

序列圖的主要用途之一,是把用例表達的需求,轉化為進一步、更加正式層次的精細表達。用例常常被細化為一個或者更多的序列圖。序列圖除了在設計新系統方面的用途外,它們還能用來記錄一個存在系統(稱它為“遺産”)的對象現在如何互動。當把這個系統移交給另一個人或組織時,這個文檔很有用。

符号

架構的符号元件。在 UML 2中,架構元件用于作為許多其他的圖元件的一個基礎,但是大多數人第一次接觸架構元件的情況,是作為圖的圖形化邊界。當為圖提供圖形化邊界時,一個架構元件為圖的标簽提供一緻的位置。在 UML 圖中架構元件是可選擇的;就如你能在圖 1 和 2 中見到的,圖的标簽被放在左上角,在我将調用架構的“namebox”中,一種卷角長方形,而且實際的 UML 圖在較大的封閉長方形内部定義。(圖請在原文中檢視)

除了提供一個圖形化邊框之外,用于圖中的架構元件也有描述互動的重要的功能, 例如序列圖。在序列圖上一個序列接收和發送消息(又稱互動),能通過連接配接消息和架構元件邊界,建立模型(如圖 2 所見到)。這将會在後面“超越基礎”的段落中被更詳細地介紹。

UML 規範給圖類型提供特定的文本值。(舉例來說,sd代表序列圖,activity代表活動圖,use case代表用例圖)。

基礎

序列圖的主要目的是定義事件序列,産生一些希望的輸出。重點不是消息本身,而是消息産生的順序;不過,大多數序列圖會表示一個系統的對象之間傳遞的什麼消息,以及它們發生的順序。

序列圖按照水準和垂直的次元傳遞資訊:垂直次元從上而下表示消息/調用發生的時間序列,而且水準次元從左到右表示消息發送到的對象執行個體。

生命線

當畫一個序列圖的時候,放置生命線符号元件,橫跨圖的頂部。生命線表示序列中,模組化的角色或對象執行個體。 1 生命線畫作一個方格,一條虛線從上而下,通過底部邊界的中心(圖 3)。生命線名字放置在方格裡。

這裡注意一點,生命線名稱帶下劃線。當使用下劃線時,意味着序列圖中的生命線代表一個類的特定實體,不是特定種類的實體(例如,角色)。在将來的一篇文章中,我們将會了解結構化模組化。現在,僅僅評述序列圖,可能包含角色(例如買方和賣方),而不需要叙述誰扮演那些角色(例如Bill和Fred)。這準許不同語境的圖重複使用。簡單拖放,序列圖的執行個體名稱有下劃線,而角色名稱沒有。

圖 3 中我們生命線例子是一個命名的對象,但是不是所有的生命線都代表命名的對象。相反的,一個生命線能用來表現一個匿名的或未命名的實體。當在一個序列圖上,為一個未命名的執行個體模組化時,生命線的名字采用和一個命名執行個體相同的模式;但是生命線名字的位置留下空白,而不是提供一個例圖名字。再次參考圖 3,如果生命線正在表現Student類的一個匿名例圖,生命線會是: “Student”。同時, 因為序列圖在項目設計階段中使用,有一個未指定的對象是完全合法: 舉例來說,“freshman”。

消息

為了可讀性,序列圖的第一個消息總是從頂端開始,并且一般位于圖的左邊。然後繼發的消息加入圖中,稍微比前面的消息低些。

為了顯示一個對象(例如,生命線)傳遞一個消息給另外一個對象,你畫一條線指向接收對象,包括一個實心箭頭(如果是一個同步調用操作)或一個棍形箭頭(如果是一個異步訊号)。消息/方法名字放置在帶箭頭的線上面。正在被傳遞給接收對象的消息,表示接收對象的類實作的一個操作/方法。

此外,傳回消息是序列圖的一個可選擇部分。

傳回消息的使用依賴模組化的具體/抽象程度。如果需要較好的具體化,傳回消息是有用的;否則,主動消息就足夠了。我個人喜歡,無論什麼時候傳回一個值,都包括一個傳回消息,因為我發現額外的細節使一個序列圖變得更容易閱讀。

當序列圖模組化時,有時候,一個對象将會需要傳遞一個消息給它本身。一個對象何時稱它本身?一個純化論者會争辯一個對象應該永不傳遞一個消息給它本身。然而,為傳遞一個消息給它本身的對象模組化,在一些情境中可能是有用的。舉例來說,圖 5 是圖 4 的一個改良版本。 圖 5 版本顯示調用它的 determineAvailableReports 方法的系統對象。通過表示系統傳遞消息“determineAvailableReports”給它本身,模型把注意力集中到過程的事實上,而不是系統對象。

為了要畫一個調用本身的對象,如你平時所作的,畫一條消息,但是不是連接配接它到另外的一個對象,而是你把消息連接配接回對象本身。

限制

當為對象的互動模組化時,有時候,必須滿足一個條件,消息才會傳遞給對象。限制在 UML 圖各處中,用于控制流。

[注] 編輯這篇文章主要目的:了解時序圖作用,原文結合圖檔看更清晰(我比較懶)

繼續閱讀