UML中的用例圖

 UML中的用例圖:主要用來確定需求,圖中分爲多個用例(USECASE),也就是那些小人和圈圈,以及相關的註釋,主要包含三種關係:包涵,擴展,泛化<generalization>,其中
1. 包含關係:使用包含(Inclusion)用例來封裝一組跨越多個用例的相似動作(行爲片斷),以便多個基(Base)用例複用。基用例控制與包含用例的關係,以及被包含用例的事件流是否會插入到基用例的事件流中。這種情況類似於在過程設計語言中,將程序的某一段算法封裝成一個子過程,然後再從主程序中調用這一子過程。
2.擴展關係:將基用例中一段相對獨立並 且可選的動作,用擴展(Extension)用例加以封裝,再讓它從基用例中聲明的擴展點(Extension Point)上進行擴展,從而使基用例行爲更簡練和目標更集中。擴展用例爲基用例添加新的行爲。擴展用例可以訪問基用例的屬性,因此它能根據基用例中擴展 點的當前狀態來判斷是否執行自己。但是擴展用例對基用例不可見。
3.
泛化關係:子用例和父用例相似,但表現出更特別的行爲;子用例將繼承父用例的所有結構、行爲和關係。子用例可以使用父用例的一段行爲,也可以重載它。父用例通常是抽象的。在實際應用中很少使用泛化關係,子用例中的特殊行爲都可以作爲父用例中的備選流存在。
三者對用例關係的優化側重點是不同的。如下:
         ●泛化側重表示子用例間的互斥性;
         ●包含側重表示被包含用例對Actor提供服務的間接性;
         ●擴展側重表示擴展用例的觸發不定性;(對基類功能的模塊化擴展)


ps:

定義
include / using (包含) :基用例與包含用例之間的關係。說明如何將包含用例中定義的行爲插入基用例定義的行爲中。基用例可以看到包含用例,並依賴於包含用例的執行結果。但是二者不能訪問對方的屬性。

extend(擴展):指擴展用例與基用例之間的關係,說明如何將擴展用例定義的行爲插入基用例定義的行爲序列。擴展用例以模塊化的方法遞增地修改基用例。  
   
  generalization(泛化):一個較廣泛元素和一個較特殊元素之間的類元關係。較特殊元素完整地包含了較廣泛元素,並含有更多信息。較特殊元素的實例可以用於任何使用較廣泛元素的地方。   
    

說明
其中include/using比較好理解,就是指 把多個用例(UseCase A'加撇號表示是在提取公共部分之前的原UseCase , UseCase C')都使用到的相同的部分提取出來單獨作爲一個用例(UseCase B),然後再在分離之後的用例A, C調用B,畫上連線。




extend和generization容易搞混,至於原因可能在於Java語言中的繼承(也就是UML中的泛化)使用了extends這個詞的緣 故。網上有不少文章把generization直接當作了extend,對學習者造成了誤導;也有文章說extend和generization是特殊和 一般的關係,下面我舉個具體的例子來說明。

舉例
從這幅圖中,我們可以看到:
“包含”比較好理解,二者之間可以認爲是一個"HAS A"的關係。
“泛化”是一般的“抽象和具體”之間的關係,子用例(較特殊用例)完整包含了父用例(較一般用例),是一個"IS A"關係。“用郵件報告錯誤”和“用短信報告錯誤”都是一種具體的“報告錯誤”。
“擴展”的擴展用例和基用例之間既不是"HAS A"關係也不是"IS A"關係,而是“以模塊化的方法遞增地修改基用例”,以提供一些附加的功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章