用例圖主要用來描述“用戶、需求、系統功能單元”之間的關系。它展示了一個外部用戶能夠觀察到的系統功能模型圖。
【用途】:幫助開發團隊以一種可視化的方式理解系統的功能需求。
用例圖所包含的元素如下:
1. 參與者(Actor)
表示與您的應用程序或系統進行交互的用戶、組織或外部系統。用一個小人表示。
2. 用例(Use Case)
用例就是外部可見的系統功能,對系統提供的服務進行描述。用橢圓表示。
3. 子系統(Subsystem)
用來展示系統的一部分功能,這部分功能聯系緊密。
4. 關系
用例圖中涉及的關系有:關聯、泛化、包含、擴展。
如下表所示:
a. 關聯(Association)
表示參與者與用例之間的通信,任何一方都可發送或接受消息。
【箭頭指向】:指向消息接收方
b. 泛化(Inheritance)
就是通常理解的繼承關系,子用例和父用例相似,但表現出更特別的行為;子用例將繼承父用例的所有結構、行為和關系。子用例可以使用父用例的一段行為,也可以重載它。父用例通常是抽象的。
【箭頭指向】:指向父用例
c. 包含(Include)
包含關系用來把一個較復雜用例所表示的功能分解成較小的步驟。
【箭頭指向】:指向分解出來的功能用例
d. 擴展(Extend)
擴展關系是指用例功能的延伸,相當於為基礎用例提供一個附加功能。
【箭頭指向】:指向基礎用例
e. 依賴(Dependency)
以上4種關系,是UML定義的標准關系。但VS2010的用例模型圖中,添加了依賴關系,用帶箭頭的虛線表示,表示源用例依賴於目標用例。
【箭頭指向】:指向被依賴項
5. 項目(Artifact)
用例圖雖然是用來幫助人們形象地理解功能需求,但卻沒多少人能夠通看懂它。很多時候跟用戶交流甚至用Excel都比用例圖強,VS2010中引入了“項目”這樣一個元素,以便讓開發人員能夠在用例圖中鏈接一個普通文檔。
用依賴關系把某個用例依賴到項目上:
然后把項目-》屬性 的Hyperlink設置到你的文檔上;
這樣當你在用例圖上雙擊項目時,就會打開相關聯的文檔。
6. 注釋(Comment)
包含(include)、擴展(extend)、泛化(Inheritance) 的區別:
包含關系下,去掉子用例,父用例將不能使用;擴展關系則不會,擴展關系中子用例是對父用例的增強型描述
1、包含<<include>>
包含是指當多個用例中存在相同的事件流時,可以把這些公共事件流抽象成公共用例,這個公共用例稱之為抽象用例(跟類的概念有點相像, 類是多個對象的抽象定義),而原始用例稱為基礎用例,基礎用例與抽象用例之間就是包含關系。但是值得注意的是,對於包含關系而言,基礎用例是抽象用例執行 中不可缺少的一部分,基礎用例一般不單獨存在且基礎用例不知道抽象用例的存在而抽象用例知道基礎用例的存在。包含關系是箭頭從抽象用例指向基礎用例(也就 是從父類指向子類)。
2、擴展<<extend>>
如果一個用例明顯地混合了兩種或兩種以上不同的場景,可以將這個用例分為一個基礎用例和一個擴展用例。擴展關系 用<<extend>>關系表示,箭頭指向基本用例(也就是從子類指向父類)。與此同時,擴展用例是基礎用例在某些特定條件下觸 發產生的,擴展用例不是基礎用例必須存在的部分,擴展用例可以單獨存在,擴展用例知道基礎用例的存在而基礎用例不知道基礎用例的存在。
3、泛化<<>generalization>>
泛化關系是一種繼承關系,子用例將繼承基用例的所有行為,也就是任何使用基用例的地方都可以使用子用例來代替。我平時是這樣記住這個 關系的,就是子類從父類中繼承,父類就是子類的泛化。因為泛化和繼承本就是一對反關系。泛化關系在用例圖中用空心箭頭表示,箭頭方向從子用例指向基用例。
UML用例圖中的三種關系,include,extend和generalization,尤其是包含和擴展,一定要分清它們二者的區別,這對我們掌握這部分的內容是很有幫助的。
條件性:泛化中的子用例和include中的被包含的用例會無條件發生,而extend中的延伸用例的發生是有條件的;
直接性:泛化中的子用例和extend中的延伸用例為參與者提供直接服務,而include中被包含的用例為參與者提供間接服務。
對extend而言,延伸用例並不包含基礎用例的內容,基礎用例也不包含延伸用例的內容。
對Inheritance而言,子用例包含基礎用例的所有內容及其和其他用例或參與者之間的關系;
一個用例圖示例:
牢騷:
感覺用例圖還不成熟,並不能很好地表達系統的需求, 沒有UML背景的用戶幾乎不知道畫的是些什么。
其次,包含關系、擴展關系的箭頭符號竟然是同樣的箭頭,僅靠上方寫個文字來加以區別,翻譯成其他語言的話,幾乎就不知道代表什么意思。擴展關系的箭頭朝向也很難理解,為何要指向基用例,而不指向擴展用例。
VS2010添加的“項目”元素,是個很好的創新,能夠在用例圖中關聯word, excel這些文檔。但為什么不把這些功能直接集成到用例里面,雙擊用例就彈出一份文檔豈不更容易理解,非要畫蛇添足地加一個元件,僅僅為了提供個鏈接功能。
用例描述表:
鑒於用列圖並不能清楚地表達功能需求,開發中大家通常用描述表來補充某些不易表達的用例,下圖的表給大家提供一個參考: