深度剖析UML序列圖中的組合碎片
本文和大家重點討論UML序列圖中的組合碎片的概念,在本文前面“基礎”的段落中呈現的,我介紹了“變體”,“選擇項”,和“循環”的組合碎片。這些三個組合碎片是大多數人將會使用最多的。
組合碎片(跳轉和并行)
在本文前面“基礎”的段落中呈現的,我介紹了“變體”,“選擇項”,和“循環”的組合碎片。這些三個組合碎片是大多數人將會使用最多的。然而,有二個其他的組合碎片,大量共享的人將會發現有用——跳轉和并行。
UML序列圖中跳轉
跳轉組合碎片幾乎在每個方面都和選擇項組合碎片一致,除了兩個例外。首先,跳轉的框架namebox的文本“break”代替了“option”。其次,當一個跳轉組合碎片的消息運行時,封閉的交互作用的其他消息將不會執行,因為序列打破了封閉的交互。這樣,跳轉組合碎片非常象C++或Java的編程語言中的break關鍵字。
圖16:來自圖8的UML序列圖片段的重構,片段使用跳轉代替變體
跳轉最常用來做模型異常處理。圖16是圖8的重構,但是這次圖16使用跳轉組合碎片,因為它把balance<amount的情況作為一個異常對待,而不是一個變體流。要閱讀圖16,你從序列的左上角開始,向下讀。當序列到達返回值“balance”的時候,它檢查看看是否余額比金額更少。如果余額不少于金額,被傳遞的下一個消息是addDebitTransaction消息,而且序列正常繼續。然而,在余額比金額更少的情況下,然后序列進入跳轉組合碎片,它的消息被傳遞。一旦跳轉組合的消息的已經被傳遞,序列不發送任何其它消息就退出(舉例來說,addDebitTransaction)。
注意有關跳轉的一件重要的事是,它們只引起一個封閉交互的序列退出,不必完成圖中描述的序列。在這種情況下,跳轉組合是變體或者循環的一部分,然后只是變體或循環被退出。
UML序列圖中并行
今天的現代計算機系統在復雜性和有時執行并發任務方面不斷進步。當完成一個復雜任務需要的處理時間比希望的長的時候,一些系統采用并行處理進程的各部分。當創造一個UML序列圖,顯示并行處理活動的時候,需要使用并行組合碎片元件。
并行組合碎片使用一個框架來畫,你把文本“par”放在框架的namebox中。然后你把框架的內容段用虛線分為水平操作元。框架的每個操作元表示一個在并行運行的線程。
圖17:oven是并行做兩個任務的對象實例
圖17可能沒有舉例說明做并行活動的對象的***的計算機系統實例,不過提供了一個容易理解的并行活動序列的例子。序列如這樣進行:hungryPerson傳遞cookFood消息給oven對象。當oven對象接收那個消息時,它同時發送兩個消息(nukeFood和rotateFood)給它本身。這些消息都處理后,hungryPerson對象從oven對象返回yummyFood。
總結
UML序列圖是一個用來記錄系統需求,和整理系統設計的好圖。UML序列圖是如此好用的理由是,因為它按照交互發生的時間順序,顯示了系統中對象間的交互邏輯。
【編輯推薦】