圖例解析UML序列圖中變體和選擇項作用
本文和大家重點討論一下UML序列圖中變體和選擇項,UML序列圖中變體用來指明在兩個或更多的消息序列之間的、互斥的選擇,而選擇項組合碎片用來為序列建模,這些序列給予一個特定條件,將會發生的;或者,序列不發生。
變體
UML序列圖中變體用來指明在兩個或更多的消息序列之間的、互斥的選擇。3變體支持經典的“ifthenelse”邏輯的建模(舉例來說,如果我買三個,然后我得到我購買的20%折扣;否則我得到我購買的10%折扣)。
就如你將會在圖8中注意到的,一個變體的組合碎片元件使用框架來畫。單詞“alt”放置在框架的namebox里。然后較大的長方形分為UML2所稱的操作元。4操作元被虛線分開。每個操作元有一個約束進行測試,而這個約束被放置在生命線頂端的操作元的左上部。5如果操作元的約束等于“true”,然后那個操作元是要執行的操作元。
圖8:包含變體組合碎片的一個UML序列圖片段
圖8作為一個變體的組合碎片如何閱讀的例子,顯示序列從頂部開始,即bank對象獲取支票金額和帳戶結余。此時,UML序列圖中的變體組合碎片接管。因為約束“[balance>=amount]”,如果余額超過或等于金額,然后順序進行bank對象傳遞addDebitTransaction和storePhotoOfCheck消息給account對象。然而,如果余額不是超過或等于金額,然后順序的過程就是bank傳遞addInsuffientFundFee和noteReturnedCheck消息給account對象,returnCheck消息給它自身。因為“else”約束,當余額不大于或者等于金額時,第二個序列被調用。在變體的組合碎片中,不需要“else”約束;而如果一個操作元,在它上面沒有一個明確的約束,那么將假定“else”約束。
變體的組合碎片沒被限制在簡單的“ifthenelse”驗證。可能需要大量的變體路徑。如果需要較多的變體方案,你一定要做的全部工作就是把一個操作元加入有序列約束和消息的長方形中。
選擇項
UML序列圖中選擇項組合碎片用來為序列建模,這些序列給予一個特定條件,將會發生的;或者,序列不發生。一個選擇項用來為簡單的“ifthen”表達式建模。(例如,如果架上的圈餅少于五個,那么另外做兩打圈餅)。
選擇項組合碎片符號與變體組合碎片類似,除了它只有一個操作元并且永不能有“else”約束以外(它就是如此,沒有理由)。要畫選擇項組合,你畫一個框架。文字“opt”是被放置在框架的namebox里的文本,在框架的內容區,選擇項的約束被放置在生命線頂端上的左上角。然后選擇項的消息序列被放在框架的內容區的其余位置內。這些元件如圖9所示。
圖9:包括選擇項組合碎片的一個UML序列圖片段
閱讀選擇項組合碎片很容易。圖9是圖7的UML序列圖片段的再加工,但是這次它使用一個選擇項組合碎片,因為如果Student的逾期平衡等于0,需要傳遞更多的消息。按照圖9的UML序列圖,如果Student的逾期平衡等于零,然后傳遞addStudent,getCostOfClass和chargeForClass消息。如果Student的逾期平衡不等于零,那么在選擇項組合碎片中,序列不傳遞任何一個消息。
例子圖9的UML序列圖片段包括一個選擇項約束;然而,約束不是一個必需的元件。在高層次、抽象的UML序列圖中,你可能不想敘述選擇項的條件。你可能只是想要指出片段是可選擇的。
【編輯推薦】