概述
用例試圖描概括了用例中角色和系統之間的關系,描述了系統功能需求,角色和系統的交互以及系統的反應。
官方定義:用例定義了一組用例示例,其中每個示例都是系統所執行的一系列操作,這些操作生成特定主角可以觀測的值.
簡單的說法:一個用例就是與參與者交互的,並且給參與者提供可觀測的意義的結果的一系列活動的集合,所謂的用例就是一件事情,要完成這件事情,需要做的一系列的活動;而做一件事情可以有很多不同的辦法和步驟,也可能會遇到各種各樣的意外情況,因此這件事情是由很多不同情況的集合構成的,在UML中稱之為用例場景。一個用例場景就是一個用例的實例。
用例的特征
1.用例是相對獨立的,就是說他不與其他用例交互,而是獨自完成參與者的目的。
2.用例的執行結果對於參與者來說是可觀測的和有意義的。例如系統中有個刪除前自動備份數據的操作,這個操作結果對與參與者是透明的,參與者不是直接受益人,所以他不能稱之為用例。
3.事件必須由一個參與者發起,不存在沒有參與者的用例,用例不應該自動啟動,或啟動其他的用例。
4.用例必然是以動賓短語形式出現的、例如“喝水”是一個有效的用例,而“喝”不是。
用例的粒度
用例的粒度是根據建模的抽象層次所決定的。
1.在業務建模階段,用例的粒度是以每個用例能夠說明一件完整的事情為宜。
2.在概念建模階段,用例的粒度是以每個用例能夠描述一個完成的事件流為宜。
3.在系統建模階段,用例的粒度是以每個用例能夠描述操作者與計算機的一次完整的交互為宜。
用例和功能的誤區
功能和用例是有本質的區別的。
1.功能是脫離使用者的願望而存在的。例如我們描述一個自行車的功能就是他能騎和載物,並無誰來使用它。
2.功能是孤立的,在系統中,給一個輸入就能得到一個輸出。而用例是一個系統性的工作,這個系統的工作非常明確的去為某個參與者達成一個特定的目標。
3.如果非要從功能的角度去解釋用例,那么用例可以解釋為一系列完成一個特定目標的功能的組合。
UML用例圖中包含(include)、擴展(extend)和泛化(generalization)三種關系
1、包含關系:使用包含(Inclusion)用例來封裝一組跨越多個用例的相似動作(行為片斷),以便多個基(Base)用例復用。基用例控制與包含用例的 關系,以及被包含用例的事件流是否會插入到基用例的事件流中。基用例可以依賴包含用例執行的結果,但是雙方都不能訪問對方的屬性。
包含關系對典型的應用就是復用,也就是定義中說的情景。但是有時當某用例的事件流過於復雜時,為了簡化用例的描述,我們也可以把某一段事件流抽象成為一個被包含的用例;相反,用例划分太細時,也可以抽象出一個基用例,來包含這些細顆粒的用例。這種情況類似於在過程設計語言中,將程序的某一段算法封裝成一個子過程,然后再從主程序中調用這一子過程。
例如:管理員管理文章,就包含增加、修改和刪除幾種功能。
2、擴展(extend)
擴展關系:將基用例中一段相對獨立並且可選的動作,用擴展(Extension)用例加以封裝,再讓它從基用例中聲明的擴展點(Extension Point)上進行擴展,從而使基用例行為更簡練和目標更集中。擴展用例為基用例添加新的行為。擴展用例可以訪問基用例的屬性,因此它能根據基用例中擴展點的當前狀態來判斷是否執行自己。但是擴展用例對基用例不可見。
對於一個擴展用例,可以在基用例上有幾個擴展點。
例如:在管理員提交申請之后,就可以打印申請單和查看申請單。
4、泛化(generalization)
泛化關系:子用例和父用例相似,但表現出更特別的行為;子用例將繼承父用例的所有結構、行為和關系。子用例可以使用父用例的一段行為,也可以重載它。父用例通常是抽象的。在實際應用中很少使用泛化關系,子用例中的特殊行為都可以作為父用例中的備選流存在。
UML中擴展和泛化的區別
泛化表示類似於OO術語“繼承”或“多態”。UML中的Use Case泛化過程是將不同Use Case之間的可合並部分抽象成獨立的父Use Case,並將不可合並部分單獨成各自的子Use Case;包含以及擴展過程與泛化過程類似,但三者對用例關系的優化側重點是不同的。如下:
●泛化側重表示子用例間的互斥性;
●包含側重表示被包含用例對Actor提供服務的間接性;
●擴展側重表示擴展用例的觸發不定性;詳述如下:
既然用例是系統提供服務的UML表述,那么服務這個過程在所有用例場景中是必然發生的,但發生按照發生條件可分為如下兩種情況:
1.無條件發生:肯定發生的;
2.有條件發生:未必發生,發生與否取決於系統狀態;
因此,針對用例的三種關系結合系統狀態考慮,泛化與包含用例屬於無條件發生的用例,而擴展屬於有條件發生的用例。進一步,用例的存在是為Actor提供服 務,但用例提供服務的方式可分為間接和直接兩種,依據於此,泛化中的子用例提供的是直接服務,而包含中的被包含用例提供的是間接服務。同樣,擴展用例提供的也是直接服務,但擴展用例的發生是有條件的。
另外一點需要提及的是:泛化中的子用例和擴展中的擴展用例均可以作為基本用例事件的備選擇流而存在。
最后再呈現一個用例圖示例
歡迎各位參與討論,如果覺得對你有幫助,請點擊 推薦下,萬分謝謝.
作者:spring yang
出處:http://www.cnblogs.com/springyangwc/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。