UML入門(二)-序列圖

注:本文爲IBM Developer網站UML2.X系列教程的學習筆記,原文參見:http://www.ibm.com/developerworks/cn/rational/r-uml/

一、UML中的新元素-框架:

在 UML 2中,框架元件用於作爲許多其他的圖元件的一個基礎,但是大多數人第一次接觸框架元件的情況,是作爲圖的圖形化邊界。當爲圖提供圖形化邊界時,一個框架元件爲圖的標籤提供一致的位置。在 UML 圖中框架元件是可選擇的。



除了提供一個圖形化邊框之外,用於圖中的框架元件也有描述交互的重要的功能, 例如序列圖。在序列圖上一個序列接收和發送消息(又稱交互),能通過連接消息和框架元件邊界,建立模型(如圖 2 所見到)。




對於序列圖,圖的標籤由文字“sd”開始。當使用一個框架元件封閉一個圖時,圖的標籤需要按照以下的格式:圖類型 圖名稱。

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


二、UML中的序列圖:

序列圖主要用於按照交互發生的一系列順序,顯示對象之間的這些交互。

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

序列圖的主要用途之一,是把用例表達的需求,轉化爲進一步、更加正式層次的精細表達。用例常常被細化爲一個或者更多的序列圖。序列圖除了在設計新系統方面的用途外,它們還能用來記錄一個存在系統(稱它爲“遺產”)的對象現在如何交互。

序列圖的主要目的是定義事件序列,產生一些希望的輸出。重點不是消息本身,而是消息產生的順序;不過,大多數序列圖會表示一個系統的對象之間傳遞的什麼消息,以及它們發生的順序。圖按照水平和垂直的維度傳遞信息:垂直維度從上而下表示消息/調用發生的時間序列,而且水平維度從左到右表示消息發送到的對象實例。

1.生命線:

生命線畫作一個方格,一條虛線從上而下,通過底部邊界的中心(圖 3)。生命線名字放置在方格里。



UML 的生命線命名標準按照如下格式: 實體名:類名

生命線名稱帶下劃線。當使用下劃線時,意味着序列圖中的生命線代表一個類的特定實體,不是特定種類的實體(例如,角色)。序列圖的實例名稱有下劃線,而角色名稱沒有。

一個生命線能用來表現一個匿名的或未命名的實體。當在一個序列圖上,爲一個未命名的實例建模時,生命線的名字採用和一個命名實例相同的模式;但是生命線名字的位置留下空白,而不是提供一個例圖名字。
 

2.消息體:

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



返回消息是可選擇的;一個返回消息畫作一個帶開放箭頭的虛線,向後指向來源的生命線,在這條虛線上面,你放置操作的返回值。爲了要畫一個調用本身的對象,如你平時所作的,畫一條消息,但是不是連接它到另外的一個對象,而是你把消息連接回對象本身。





三、UML中的約束:




約束的符號很簡單;格式是: 【Boolean Test】

四、UML中的新元素-組合碎片(變體方案、選擇項、循環):

一個組合碎片用來把一套消息組合在一起,在一個序列圖中顯示條件分支。

1.變體:

變體用來指明在兩個或更多的消息序列之間的、互斥的選擇。一個變體的組合碎片元件使用框架來畫。單詞“alt”放置在框架的namebox裏。然後較大的長方形分爲 UML 2 所稱的操作元。操作元被虛線分開。每個操作元有一個約束進行測試,而這個約束被放置在生命線頂端的操作元的左上部。如果操作元的約束等於“true”,然後那個操作元是要執行的操作元。


圖 8作爲一個變體的組合碎片如何閱讀的例子,顯示序列從頂部開始,即bank對象獲取支票金額和帳戶結餘。此時,序列圖中的變體組合碎片接管。因爲約束“[balance >= amount]”,如果餘額超過或等於金額,然後順序進行bank對象傳遞 addDebitTransaction 和 storePhotoOfCheck 消息給account對象。然而,如果餘額不是超過或等於金額,然後順序的過程就是bank傳遞addInsuffientFundFee 和 noteReturnedCheck 消息給account對象,returnCheck 消息給它自身。因爲“else”約束,當餘額不大於或者等於金額時,第二個序列被調用。在變體的組合碎片中,不需要“else”約束;而如果一個操作元,在它上面沒有一個明確的約束,那麼將假定“else”約束。

2.選擇項:

一個選擇項用來爲簡單的“if then”表達式建模。(例如,如果架上的圈餅少於五個,那麼另外做兩打圈餅)。

選擇項組合碎片符號與變體組合碎片類似,除了它只有一個操作元並且永不能有“else”約束以外(它就是如此,沒有理由)。要畫選擇項組合,你畫一個框架。文字“opt”是被放置在框架的 namebox 裏的文本,在框架的內容區,選擇項的約束被放置在生命線頂端上的左上角。 然後選擇項的消息序列被放在框架的內容區的其餘位置內。



注意:變體用於爲if then else建模,選擇項用於爲if then建模,因爲只有一個分支,所以不能出現[else]

3.循環:

循環組合碎片表面非常類似選擇項組合碎片。你畫一個框架,在框架的 namebox 中放置文本“loop”。在框架的內容區中,一個生命線的頂部,循環約束被放置在左上角。然後循環的消息序列被放在框架內容區的其餘部分中。在一個循環中,除了標準的布爾測試外,一個約束能測試二個特定的條件式。特定的約束條件式是寫作“minint = [the number]”(例如,“minint = 1”)的最小循環次數,或寫作“maxint = [the number]”(例如,“maxint = 5”)的最大循環次數。通過最小循環檢驗,循環必須運行至少指定次數,而循環執行次數不能達到約束指定的最大循環次數。



發佈了59 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章