圖例解析UML序列圖中變體和選擇項(xiàng)作用
本文和大家重點(diǎn)討論一下UML序列圖中變體和選擇項(xiàng),UML序列圖中變體用來指明在兩個(gè)或更多的消息序列之間的、互斥的選擇,而選擇項(xiàng)組合碎片用來為序列建模,這些序列給予一個(gè)特定條件,將會(huì)發(fā)生的;或者,序列不發(fā)生。
變體
UML序列圖中變體用來指明在兩個(gè)或更多的消息序列之間的、互斥的選擇。3變體支持經(jīng)典的“ifthenelse”邏輯的建模(舉例來說,如果我買三個(gè),然后我得到我購(gòu)買的20%折扣;否則我得到我購(gòu)買的10%折扣)。
就如你將會(huì)在圖8中注意到的,一個(gè)變體的組合碎片元件使用框架來畫。單詞“alt”放置在框架的namebox里。然后較大的長(zhǎng)方形分為UML2所稱的操作元。4操作元被虛線分開。每個(gè)操作元有一個(gè)約束進(jìn)行測(cè)試,而這個(gè)約束被放置在生命線頂端的操作元的左上部。5如果操作元的約束等于“true”,然后那個(gè)操作元是要執(zhí)行的操作元。
圖8:包含變體組合碎片的一個(gè)UML序列圖片段
圖8作為一個(gè)變體的組合碎片如何閱讀的例子,顯示序列從頂部開始,即bank對(duì)象獲取支票金額和帳戶結(jié)余。此時(shí),UML序列圖中的變體組合碎片接管。因?yàn)榧s束“[balance>=amount]”,如果余額超過或等于金額,然后順序進(jìn)行bank對(duì)象傳遞addDebitTransaction和storePhotoOfCheck消息給account對(duì)象。然而,如果余額不是超過或等于金額,然后順序的過程就是bank傳遞addInsuffientFundFee和noteReturnedCheck消息給account對(duì)象,returnCheck消息給它自身。因?yàn)?ldquo;else”約束,當(dāng)余額不大于或者等于金額時(shí),第二個(gè)序列被調(diào)用。在變體的組合碎片中,不需要“else”約束;而如果一個(gè)操作元,在它上面沒有一個(gè)明確的約束,那么將假定“else”約束。
變體的組合碎片沒被限制在簡(jiǎn)單的“ifthenelse”驗(yàn)證??赡苄枰罅康淖凅w路徑。如果需要較多的變體方案,你一定要做的全部工作就是把一個(gè)操作元加入有序列約束和消息的長(zhǎng)方形中。
選擇項(xiàng)
UML序列圖中選擇項(xiàng)組合碎片用來為序列建模,這些序列給予一個(gè)特定條件,將會(huì)發(fā)生的;或者,序列不發(fā)生。一個(gè)選擇項(xiàng)用來為簡(jiǎn)單的“ifthen”表達(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)。這些元件如圖9所示。
圖9:包括選擇項(xiàng)組合碎片的一個(gè)UML序列圖片段
閱讀選擇項(xiàng)組合碎片很容易。圖9是圖7的UML序列圖片段的再加工,但是這次它使用一個(gè)選擇項(xiàng)組合碎片,因?yàn)槿绻鸖tudent的逾期平衡等于0,需要傳遞更多的消息。按照?qǐng)D9的UML序列圖,如果Student的逾期平衡等于零,然后傳遞addStudent,getCostOfClass和chargeForClass消息。如果Student的逾期平衡不等于零,那么在選擇項(xiàng)組合碎片中,序列不傳遞任何一個(gè)消息。
例子圖9的UML序列圖片段包括一個(gè)選擇項(xiàng)約束;然而,約束不是一個(gè)必需的元件。在高層次、抽象的UML序列圖中,你可能不想敘述選擇項(xiàng)的條件。你可能只是想要指出片段是可選擇的。
【編輯推薦】