深度剖析UML序列圖中的組合碎片
本文和大家重點(diǎn)討論UML序列圖中的組合碎片的概念,在本文前面“基礎(chǔ)”的段落中呈現(xiàn)的,我介紹了“變體”,“選擇項(xiàng)”,和“循環(huán)”的組合碎片。這些三個(gè)組合碎片是大多數(shù)人將會(huì)使用最多的。
組合碎片(跳轉(zhuǎn)和并行)
在本文前面“基礎(chǔ)”的段落中呈現(xiàn)的,我介紹了“變體”,“選擇項(xiàng)”,和“循環(huán)”的組合碎片。這些三個(gè)組合碎片是大多數(shù)人將會(huì)使用最多的。然而,有二個(gè)其他的組合碎片,大量共享的人將會(huì)發(fā)現(xiàn)有用——跳轉(zhuǎn)和并行。
UML序列圖中跳轉(zhuǎn)
跳轉(zhuǎn)組合碎片幾乎在每個(gè)方面都和選擇項(xiàng)組合碎片一致,除了兩個(gè)例外。首先,跳轉(zhuǎn)的框架namebox的文本“break”代替了“option”。其次,當(dāng)一個(gè)跳轉(zhuǎn)組合碎片的消息運(yùn)行時(shí),封閉的交互作用的其他消息將不會(huì)執(zhí)行,因?yàn)樾蛄写蚱屏朔忾]的交互。這樣,跳轉(zhuǎn)組合碎片非常象C++或Java的編程語(yǔ)言中的break關(guān)鍵字。
圖16:來(lái)自圖8的UML序列圖片段的重構(gòu),片段使用跳轉(zhuǎn)代替變體
跳轉(zhuǎn)最常用來(lái)做模型異常處理。圖16是圖8的重構(gòu),但是這次圖16使用跳轉(zhuǎn)組合碎片,因?yàn)樗裝alance<amount的情況作為一個(gè)異常對(duì)待,而不是一個(gè)變體流。要閱讀圖16,你從序列的左上角開(kāi)始,向下讀。當(dāng)序列到達(dá)返回值“balance”的時(shí)候,它檢查看看是否余額比金額更少。如果余額不少于金額,被傳遞的下一個(gè)消息是addDebitTransaction消息,而且序列正常繼續(xù)。然而,在余額比金額更少的情況下,然后序列進(jìn)入跳轉(zhuǎn)組合碎片,它的消息被傳遞。一旦跳轉(zhuǎn)組合的消息的已經(jīng)被傳遞,序列不發(fā)送任何其它消息就退出(舉例來(lái)說(shuō),addDebitTransaction)。
注意有關(guān)跳轉(zhuǎn)的一件重要的事是,它們只引起一個(gè)封閉交互的序列退出,不必完成圖中描述的序列。在這種情況下,跳轉(zhuǎn)組合是變體或者循環(huán)的一部分,然后只是變體或循環(huán)被退出。
UML序列圖中并行
今天的現(xiàn)代計(jì)算機(jī)系統(tǒng)在復(fù)雜性和有時(shí)執(zhí)行并發(fā)任務(wù)方面不斷進(jìn)步。當(dāng)完成一個(gè)復(fù)雜任務(wù)需要的處理時(shí)間比希望的長(zhǎng)的時(shí)候,一些系統(tǒng)采用并行處理進(jìn)程的各部分。當(dāng)創(chuàng)造一個(gè)UML序列圖,顯示并行處理活動(dòng)的時(shí)候,需要使用并行組合碎片元件。
并行組合碎片使用一個(gè)框架來(lái)畫(huà),你把文本“par”放在框架的namebox中。然后你把框架的內(nèi)容段用虛線(xiàn)分為水平操作元??蚣艿拿總€(gè)操作元表示一個(gè)在并行運(yùn)行的線(xiàn)程。
圖17:oven是并行做兩個(gè)任務(wù)的對(duì)象實(shí)例
圖17可能沒(méi)有舉例說(shuō)明做并行活動(dòng)的對(duì)象的***的計(jì)算機(jī)系統(tǒng)實(shí)例,不過(guò)提供了一個(gè)容易理解的并行活動(dòng)序列的例子。序列如這樣進(jìn)行:hungryPerson傳遞cookFood消息給oven對(duì)象。當(dāng)oven對(duì)象接收那個(gè)消息時(shí),它同時(shí)發(fā)送兩個(gè)消息(nukeFood和rotateFood)給它本身。這些消息都處理后,hungryPerson對(duì)象從oven對(duì)象返回yummyFood。
總結(jié)
UML序列圖是一個(gè)用來(lái)記錄系統(tǒng)需求,和整理系統(tǒng)設(shè)計(jì)的好圖。UML序列圖是如此好用的理由是,因?yàn)樗凑战换グl(fā)生的時(shí)間順序,顯示了系統(tǒng)中對(duì)象間的交互邏輯。
【編輯推薦】
- 圖例解析UML序列圖中變體和選擇項(xiàng)作用
- 繪制UML序列圖時(shí)必須注意的幾個(gè)問(wèn)題
- 技術(shù)分享 Eclipse和UML工具EA的連接方法
- 實(shí)例解析UML序列圖使用
- 學(xué)習(xí)筆記 解析UML序列圖中符號(hào)和生命線(xiàn)