母項使用案例可以特殊化成為一或多個代表母項之更特定形式的子項使用案例。母項或子項都不必然是抽象的,不過,母項在大部分情況下是抽象的。子項繼承母項的所有結構、行為和關係。相同母項的子項都是母項的所有特殊化。
這是適用於使用案例的一般化(如需類別上適用的一般化概念的相關資訊,請參閱準則:一般化)。
當您發現兩個或更多使用案例有共同行為、結構和目的時,便使用一般化。當出現這個情況時,您可以在一個新使用案例(通常是抽象的)中說明共用的部分,再利用子項使用案例來將它特殊化。
範例:
「電話訂單」和「網際網路訂單」這兩個使用案例都是抽象使用案例「下訂單」的特殊化。
在訂單管理系統中,「電話訂單」和「網際網路訂單」這兩個使用案例的結構和行為有許多共用之處。一般使用案例「下訂單」便定義在結構和共用行為的定義之處。抽象使用案例「下訂單」不需要完成它本身,但它提供了一般的行為架構,之後,再由子項使用案例來完成。
母項使用案例不一定是抽象的。
範例:
請設想上一範例中的訂單管理系統。比方說,我們要增加一個「訂單登錄員」參與者,他可以代表客戶將訂單輸入系統中。這個參與者會起始一般的「下訂單」使用案例,這個使用案例這時必須具有專為它而說明的完整事件流程。子項使用案例可以將行為加到母項使用案例所提供的結構中,也可以修改母項中的行為。
「訂單登錄員」參與者可以建立一般使用案例「下訂單」的實例。「下訂單」也可以由「電話訂單」或「網際網路訂單」這兩個使用案例來特殊化。
子項使用案例取決於母項使用案例的結構(關於事件流程結構的討論,請參閱準則:使用案例)。
子項使用案例可以將行為區段插入繼承的行為中,或宣告對子項使用案例的併入和延伸關係,以將其他行為加到母項中。子項可以修改從母項繼承而來的行為區段,不過,這要很小心,以保留母項的內容。子項會保留母項使用案例的結構。這表示所有行為區段(描述為母項事件流程的子流程步驟)都必須存在,但子項可以修改這些行為區段的內容。
如果母項是抽象使用案例,它可能有不完整的行為區段。子項必須完成這些行為區段,使它們對參與者有意義。
如果母項使用案例是抽象使用案例,它便不需要有與參與者的關係。
如果兩個子項使用案例將相同的母項(或基礎)特殊化,這些特殊化彼此無關,這表示它們是在個別的使用案例實例中執行的。這不同於延伸或併入關係,在這兩種關係中,許多附加內容會明確或隱含地修改執行相同基礎使用案例的單一使用案例實例。
您可以在模型的各個使用案例之間,利用使用案例一般化和併入來重複使用行為。它們的差別是,當採用使用案例一般化時,子項的執行會相依於母項(重複使用的部分)的結構和行為,但在併入關係中,基礎使用案例的執行只相依於併入使用案例(重複使用的部分)所執行的功能結果。另一個差別是,在一般化中,各個子項有類似用途和結構,但在併入關係中,重複使用相同併入使用案例的基礎使用案例,用途可以完全不同,不過,它們必須執行相同的功能。
執行子項使用案例的使用案例實例會遵循針對母項使用案例來說明的事件流程,它會依照子項使用案例的事件流程所定義來插入其他行為和修改行為。
使用案例實例會遵循母項使用案例,且會依照子項使用案例所說明來插入或修改行為。
一般而言,您不會說明一般化關係本身。相反地,在子項使用案例事件流程中,您會指定如何將新步驟插入繼承的行為中,以及如何修改繼承的行為。
如果子項將多個母項特殊化(多親繼承),您必須在子項的規格中,明確指出如何在子項中交錯母項的行為序列。
請設想簡單電話系統使用案例的下列逐步概述:
撥區域電話
-
呼叫端拿起話筒。
-
系統發出撥號音。
-
呼叫端撥號。
-
系統關閉撥號音。
-
呼叫端輸入號碼的其餘部分。
-
系統分析號碼。
-
系統找到對應的一方。
-
系統將雙方連接起來。
-
雙方切斷連線。
撥長途電話
-
呼叫端拿起話筒。
-
系統發出撥號音。
-
呼叫端撥號。
-
系統關閉撥號音。
-
呼叫端輸入號碼的其餘部分。
-
系統分析號碼。
-
系統將號碼傳給其他系統。
-
系統連接線路。
-
雙方切斷連線。
兩個使用案例的藍色文字都很類似。如果這兩個使用案例也很類似,我們應該考慮將它們合併成一個,用替代子流程來顯示區域電話和長途電話之間的差別。
不過,如果它們的差異有些重要,且區域電話和長途電話之間的差別值得清楚表現在使用案例模型中,我們就會將共用行為擷取到新的、更一般的、稱為「發出呼叫」的使用案例中。
在使用案例圖中,所建立的一般化關係說明如下:
「撥區域電話」和「撥長途電話」這兩個使用案例都繼承抽象使用案例「發出呼叫」。
|