用例除了與參與者有關聯關系外,用例之間也存在著一定的關系,如泛化關系、包含關系、擴展關系等。
4.2.1? 包含關系
包含關系指的是兩個用例之間的關系,其中一個用例(稱為基本用例,Base Use Case)的行為包含了另一個用例(稱為包含用例,Inclusion Use Case)的行為。也就是說基本用例會用到包含用例,表示基本用例中重用包含用例中的步驟。在UML圖中,包含關系使用帶虛線的箭頭表示,并在線上標有<<include>>,如圖4.7所示。
在包含關系中,箭頭的方向是從基本用例到包含用例,也就是說,基本用例是依賴于包含用例的。
4.2.2? 擴展關系
擴展關系的基本含義與泛化關系類似。擴展關系是對基本用例的擴展,基本用例是一個完整的用例,即使沒有子用例的參與,也可以完成一個完整的功能。擴展的基本用例中將存在一個擴展點(Extension Point),只有當擴展點被激活時,子用例才會被執行。在擴展關系中,對于擴展用例(Extension Use Case)有更多的規則限制,即基本用例必須聲明若干擴展點;而擴展用例只能在這些擴展點上增加新的行為和含義。擴展關系是從擴展用例到基本用例的關系,它說明擴展用例定義的行為如何插入基本用例定義的行為中,也就是說擴展用例并不在基本用例中顯示。
在以下幾種情況下,可以使用擴展用例:
(1)表明用例的某一部分是可選的系統行為(這樣就可以將模型中的可選行為和必選行為分開)。
(2)表明只在特定條件(如例外條件)下才執行的分支。
(3)表明可能有一組行為,其中的一個或多個可以在基本用例中的擴展點處插入。所插入的行為和插入的順序取決于在執行基本用例時與主角進行的交互。
在UML圖中,擴展關系使用帶虛線的箭頭表示,并在線上標有<<extend>>,如圖4.8所示。在還書的過程中,只有在例外條件(讀者遺失圖書)的情況下,才會執行交罰款的分支。
4.2.3? 泛化關系
泛化關系指的是一般與特殊的關系。當多個用例共同擁有一種類似的結構和行為的時候,可以將它們的共性抽象成為父用例,其他的用例作為泛化關系中的子用例。在用例的泛化關系中,子用例是父用例的一種特殊形式,它繼承了父用例所有的結構、行為和關系。用例之間泛化關系如圖4.9所示。
4.2.4? 分組關系
在一些用例圖中,用例的數目可能很多,這時就需要把這些用例組織起來。這種情況在一個系統包含很多子系統時就會出現。另一種可能就是,當我們按順序和用戶會談,收集系統需求時,每個需求必須用一個單獨的用例來表達,這時就需要某種方式來對這些需求進行分類。
最直接的方法就是把相關的用例放在一個包中組織起來。一組用例可以放在一個文件夾中。
綜上所述,用例之間存在著一定的關系,這些關系既有聯系又有區別。在擴展關系中,基本用例是一個完整的用例,即是可以獨立存在的用例。一個基本用例在執行時,可以執行也可以不執行擴展部分。
在包含關系中,基本用例可能是、也可能不是一個完整的用例。在執行基本用例時,一定會執行包含用例部分。
當需要重復處理兩個或多個用例時,可以考慮使用包含關系,實現一個基本用例對另一個用例的引用。
當處理正常行為的變型而且只是偶爾描述時,可以考慮只用泛化關系。
當描述正常行為的變型而且希望采用更多的控制方式時,可以在基本用例中設置擴展點,使用擴展關系。
《UML 2.5基礎、建模與設計實踐》(李波,姚麗麗,朱慧)【摘要 書評 試讀】- 京東圖書 (jd.com)