UML用例建模面向業務實現或者系統功能,每一個用例實現一個完整的業務或者功能。而一個完整的用例也可能有一些不是必需的附加功能,或者在該用例已經實現后需要添加一些新功能,此時可以通過UML提供的擴展用例機制描述類似這樣的場景。
例如對于銀行儲蓄業務,最基本也是最核心的用例便是“取錢”與“存錢”,當業務辦理完成后,通常儲戶還可以對當前服務進行評價,對服務進行評價不是必須的環節,它是這兩個用例的可選活動,不進行評價并不影響用例“取錢”和“存錢”的目標實現。對服務進行評價這個活動可以單獨建模為用例“評價服務”。用例“評價服務”不能單獨存在,它必須依附于用例“取錢”與“存錢”,它們之間通過由用例“評價服務”指向用例“取錢”和“存錢”的虛線箭頭連接,并且在虛線上標示“?extend?”,表明用例“評價服務”是一個擴展用例,它擴展于基本用例“取錢”和“存錢”,如圖 1所示。
在圖 1中,可以看到基本用例“取錢”和“存錢”中還展示了“擴展點(extension points)”,這是構建擴展用例的一個可選項,即對一個基本用例進行擴展時可以在基本用例中標明擴展點,所謂擴展點就是基本用例調用擴展用例的位置,可以看作是基本用例中某一點的一個分支。
從基本用例的視角出發,擴展用例是可選的,但在什么樣的條件下會選擇執行擴展用例呢?如果擴展用例的名稱本身不足以表明執行條件,那么就需要在建模時通過為擴展關系指定約束的方式指明擴展用例的執行條件。例如對于上例,擴展用例“評價服務”執行的條件是“儲戶在服務完成后選擇對服務進行評價”,該條件可以通過為擴展關系(即帶?extend?標示的虛線箭頭)添加注釋的方式進行說明,如圖 2所示。在通常情況下,擴展用例觸發的條件可能是基本用例狀態的改變。
理想情況下擴展用例用于擴展與基本用例有關聯的那些非關鍵的活動,但在實際建模活動中,擴展用例也經常用來描述一個活動流程中不同的分支。例如,在某個模型中有“付款”這個用例,完全基于面向對象思想建模應當使用泛化關系建立各用例之間的關系(詳見《泛化用例》),如圖 3所示。
在實際建模活動中,有可能最初的模型由于建模時間較早或其他什么原因,“付款”的場景只有使用“現金支付”一種途徑,因而在建模時僅構建用例“付款”(或者“現金支付”),且該用例實現使用現金付款的流程。而后繼在系統升級改造時,要求支持刷卡和掃碼支付,此時多數建模者會選擇通過擴展原有用例的方式來實現功能擴展與升級,如圖 4所示。
?在上圖中,用例“刷卡支付”和“掃碼支付”依然建模為抽象用例(通過使用斜體的用例名稱表示),并由其他具體用例實現,這當然是正確的建模方式。但是假如很不幸,最初的模型其實經歷了兩次升級,第一次升級的時點國內還沒有普及信用卡,大家只有借記卡,同時掃碼支付也只有支付寶提供支付,因而此次升級的任務是將僅支持現金付款升級為支持“刷借記卡支付”和“掃支付寶支付”,并且建模者沒有預料到信用卡和其他支持掃碼支付應用的出現,因而在此次升級中直接使用擴展用例進行升級;而第二次升級時,則要進一步支持“刷信用卡支付”和“掃微信支付”,基于第一次升級的選擇,這一次繼續使用擴展用例或許不算有錯。升級完成的用例圖如圖 5所示。
圖 5展示的用例圖也表明用例之間的擴展關系可以存在多個級別,即一個擴展用例本身也可能存在它的擴展用例。此外,一個基本用例可以有多個擴展用例(如圖 5中的用例“付款”),一個擴展用例也可以被多個基本用例擴展。
用例之間的擴展關系與包含關系有同有異,簡單總結如下:
相同點——兩者都使用帶箭頭的虛線表示;基本用例調用兩者時,都沒有類似函數調用的參數與返回值,而更類似“復制-粘貼”;兩者與基本用例之間的關系都是多對多的。
相異點——表示擴展關系的帶箭頭虛線由擴展用例指向基本用例,而包含關系則由基本用例指向被包含用例;擴展用例是基本用例的可選部分,包含用例是基本用例的必選部分。
UML – 光頭顏說IThttps://gtyan.com/archives/category/uml?
UML之包含用例-CSDN博客
UML之泛化用例-CSDN博客
UML之參與者(Actor)_uml actor-CSDN博客
UML之發現用例-CSDN博客
UML之泛化、特化和繼承_uml中泛化-CSDN博客
UML之組合與聚合_uml聚合和組合-CSDN博客
UML之關聯_uml圖關聯-CSDN博客
UML之集合類型-CSDN博客
UML之屬性與參數的多重性_類圖多重性標注-CSDN博客
UML之模型、包及包的版型(構造型)_包體系結構-CSDN博客
UML之包的導入與訪問_uml的包使用-CSDN博客
UML之包與包圖_uml包圖實例-CSDN博客
UML之類型_bolck definition diagram 中的signal,value type,enume-CSDN博客
UML之修飾符_圖框架標題類型之謬-CSDN博客
UML之類與類圖-CSDN博客
UML之圖框架標題類型之謬_框架標題是什么-CSDN博客