注:本文為IBM Developer網(wǎng)站UML2.X系列教程的學(xué)習(xí)筆記,原文參見:http://www.ibm.com/developerworks/cn/rational/r-uml/
一、UML中的新元素-框架:
在 UML 2中,框架元件用于作為許多其他的圖元件的一個(gè)基礎(chǔ),但是大多數(shù)人第一次接觸框架元件的情況,是作為圖的圖形化邊界。當(dāng)為圖提供圖形化邊界時(shí),一個(gè)框架元件為圖的標(biāo)簽提供一致的位置。在 UML 圖中框架元件是可選擇的。
除了提供一個(gè)圖形化邊框之外,用于圖中的框架元件也有描述交互的重要的功能, 例如序列圖。在序列圖上一個(gè)序列接收和發(fā)送消息(又稱交互),能通過連接消息和框架元件邊界,建立模型(如圖 2 所見到)。
對(duì)于序列圖,圖的標(biāo)簽由文字“sd”開始。當(dāng)使用一個(gè)框架元件封閉一個(gè)圖時(shí),圖的標(biāo)簽需要按照以下的格式:圖類型 圖名稱。
UML 規(guī)范給圖類型提供特定的文本值。(舉例來說,sd代表序列圖,activity代表活動(dòng)圖,use case代表用例圖)。
二、UML中的序列圖:
序列圖主要用于按照交互發(fā)生的一系列順序,顯示對(duì)象之間的這些交互。
在項(xiàng)目的需求階段,分析師能通過提供一個(gè)更加正式層次的表達(dá),把用例帶入下一層次。那種情況下,用例常常被細(xì)化為一個(gè)或者更多的序列圖。
序列圖的主要用途之一,是把用例表達(dá)的需求,轉(zhuǎn)化為進(jìn)一步、更加正式層次的精細(xì)表達(dá)。用例常常被細(xì)化為一個(gè)或者更多的序列圖。序列圖除了在設(shè)計(jì)新系統(tǒng)方面的用途外,它們還能用來記錄一個(gè)存在系統(tǒng)(稱它為“遺產(chǎn)”)的對(duì)象現(xiàn)在如何交互。
序列圖的主要目的是定義事件序列,產(chǎn)生一些希望的輸出。重點(diǎn)不是消息本身,而是消息產(chǎn)生的順序;不過,大多數(shù)序列圖會(huì)表示一個(gè)系統(tǒng)的對(duì)象之間傳遞的什么消息,以及它們發(fā)生的順序。圖按照水平和垂直的維度傳遞信息:垂直維度從上而下表示消息/調(diào)用發(fā)生的時(shí)間序列,而且水平維度從左到右表示消息發(fā)送到的對(duì)象實(shí)例。
1.生命線:
生命線畫作一個(gè)方格,一條虛線從上而下,通過底部邊界的中心(圖 3)。生命線名字放置在方格里。
UML 的生命線命名標(biāo)準(zhǔn)按照如下格式: 實(shí)體名:類名
生命線名稱帶下劃線。當(dāng)使用下劃線時(shí),意味著序列圖中的生命線代表一個(gè)類的特定實(shí)體,不是特定種類的實(shí)體(例如,角色)。序列圖的實(shí)例名稱有下劃線,而角色名稱沒有。
一個(gè)生命線能用來表現(xiàn)一個(gè)匿名的或未命名的實(shí)體。當(dāng)在一個(gè)序列圖上,為一個(gè)未命名的實(shí)例建模時(shí),生命線的名字采用和一個(gè)命名實(shí)例相同的模式;但是生命線名字的位置留下空白,而不是提供一個(gè)例圖名字。
為了顯示一個(gè)對(duì)象(例如,生命線)傳遞一個(gè)消息給另外一個(gè)對(duì)象,你畫一條線指向接收對(duì)象,包括一個(gè)實(shí)心箭頭(如果是一個(gè)同步調(diào)用操作)或一個(gè)棍形箭頭(如果是一個(gè)異步訊號(hào))。消息/方法名字放置在帶箭頭的線上面。正在被傳遞給接收對(duì)象的消息,表示接收對(duì)象的類實(shí)現(xiàn)的一個(gè)操作/方法。

返回消息是可選擇的;一個(gè)返回消息畫作一個(gè)帶開放箭頭的虛線,向后指向來源的生命線,在這條虛線上面,你放置操作的返回值。為了要畫一個(gè)調(diào)用本身的對(duì)象,如你平時(shí)所作的,畫一條消息,但是不是連接它到另外的一個(gè)對(duì)象,而是你把消息連接回對(duì)象本身。
三、UML中的約束:
約束的符號(hào)很簡(jiǎn)單;格式是: 【Boolean Test】
四、UML中的新元素-組合碎片(變體方案、選擇項(xiàng)、循環(huán)):
一個(gè)組合碎片用來把一套消息組合在一起,在一個(gè)序列圖中顯示條件分支。
1.變體:
變體用來指明在兩個(gè)或更多的消息序列之間的、互斥的選擇。一個(gè)變體的組合碎片元件使用框架來畫。單詞“alt”放置在框架的namebox里。然后較大的長(zhǎng)方形分為 UML 2 所稱的操作元。 操作元被虛線分開。每個(gè)操作元有一個(gè)約束進(jìn)行測(cè)試,而這個(gè)約束被放置在生命線頂端的操作元的左上部。 如果操作元的約束等于“true”,然后那個(gè)操作元是要執(zhí)行的操作元。
圖 8作為一個(gè)變體的組合碎片如何閱讀的例子,顯示序列從頂部開始,即bank對(duì)象獲取支票金額和帳戶結(jié)余。此時(shí),序列圖中的變體組合碎片接管。因?yàn)榧s束“[balance >= amount]”,如果余額超過或等于金額,然后順序進(jìn)行bank對(duì)象傳遞 addDebitTransaction 和 storePhotoOfCheck 消息給account對(duì)象。然而,如果余額不是超過或等于金額,然后順序的過程就是bank傳遞addInsuffientFundFee 和 noteReturnedCheck 消息給account對(duì)象,returnCheck 消息給它自身。因?yàn)?#8220;else”約束,當(dāng)余額不大于或者等于金額時(shí),第二個(gè)序列被調(diào)用。在變體的組合碎片中,不需要“else”約束;而如果一個(gè)操作元,在它上面沒有一個(gè)明確的約束,那么將假定“else”約束。
2.選擇項(xiàng):
一個(gè)選擇項(xiàng)用來為簡(jiǎn)單的“if then”表達(dá)式建模。(例如,如果架上的圈餅少于五個(gè),那么另外做兩打圈餅)。
選擇項(xiàng)組合碎片符號(hào)與變體組合碎片類似,除了它只有一個(gè)操作元并且永不能有“else”約束以外(它就是如此,沒有理由)。要畫選擇項(xiàng)組合,你畫一個(gè)框架。文字“opt”是被放置在框架的 namebox 里的文本,在框架的內(nèi)容區(qū),選擇項(xiàng)的約束被放置在生命線頂端上的左上角。 然后選擇項(xiàng)的消息序列被放在框架的內(nèi)容區(qū)的其余位置內(nèi)。
注意:變體用于為if then else建模,選擇項(xiàng)用于為if then建模,因?yàn)橹挥幸粋€(gè)分支,所以不能出現(xiàn)[else]
3.循環(huán):
循環(huán)組合碎片表面非常類似選擇項(xiàng)組合碎片。你畫一個(gè)框架,在框架的 namebox 中放置文本“loop”。在框架的內(nèi)容區(qū)中,一個(gè)生命線的頂部,循環(huán)約束被放置在左上角。然后循環(huán)的消息序列被放在框架內(nèi)容區(qū)的其余部分中。在一個(gè)循環(huán)中,除了標(biāo)準(zhǔn)的布爾測(cè)試外,一個(gè)約束能測(cè)試二個(gè)特定的條件式。特定的約束條件式是寫作“minint = [the number]”(例如,“minint = 1”)的最小循環(huán)次數(shù),或?qū)懽?#8220;maxint = [the number]”(例如,“maxint = 5”)的最大循環(huán)次數(shù)。通過最小循環(huán)檢驗(yàn),循環(huán)必須運(yùn)行至少指定次數(shù),而循環(huán)執(zhí)行次數(shù)不能達(dá)到約束指定的最大循環(huán)次數(shù)。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。