構成
參與者
參與者不是特指人,是指系統以外的,在使用系統或與系統互動中所扮演的角色。因此參與者可以是人,可以是事物,也可以是時間或其他系統等等。還有一點要注意的是,參與者不是指人或事物本身,而是表示人或事物當時所扮演的角色。比如小明是圖書館的管理員,他參與
圖書館管理系統的互動,這時他既可以作為管理員這個角色參與管理,也可以作為借書者向圖書館借書,在這裡小明扮演了兩個角色,是兩個不同的參與者。參與者在畫圖中用簡筆人物畫來表示,人物下面附上參與者的名稱。
用例
用例是對包括變數在內的一組動作序列的描述,系統執行這些動作,並產生傳遞特定參與者的價值的可觀察結果。這是
UML對用例的正式定義,對我們初學者可能有點難懂。我們可以這樣去理解,用例是參與者想要系統做的事情。對於對用例的命名,我們可以給用例取一個簡單、描述性的名稱,一般為帶有動作性的詞。用例在畫圖中用橢圓來表示,橢圓下面附上用例的名稱。
系統邊界
系統邊界是用來表示正在
建模系統的邊界。邊界內表示系統的組成部分,邊界外表示系統外部。系統邊界在畫圖中用方框來表示,同時附上系統的名稱,參與者畫在邊界的外面,
用例畫在邊界裡面。因為系統邊界的作用有時候不是很明顯,所以我個人理解,在畫圖時可省略。
箭頭
箭頭用來表示參與者和系統通過相互傳送信號或訊息進行互動的關聯關係。箭頭尾部用來表示啟動互動的一方,箭頭頭部用來表示被啟動的一方,其中
用例總是要由參與者來啟動。
作用
用例圖主要的作用有三個:(1)獲取需求;(2)指導測試;(3)還可在整個過程中的其它
工作流起到指導作用。
元素之間的關係用例圖中包含的元素除了
系統邊界、角色和用例,另外就是關係。關係包括用例之間的關係,角色之間的關係,用例和角色之間的關係。
角色之間的關係
角色之間的關係。由於角色實質上也是類,所以它擁有與類相同的關係描述,即角色之間存在泛化關係,泛化關係的含義是把某些角色的共同行為提取出來表示為通用的行為。
用例之間的關係:
包含關係:基本
用例的行為包含了另一個用例的行為。基本用例描述在多個用例中都有的公共行為。包含關係本質上是比較特殊的依賴關係。它比一般的依賴關係多了一些語義。在包含關係中箭頭的方向是從基本用例到包含用例。在UML1.1中用例之間是使用和擴展這兩種關係,這兩種關係都是泛化關係的版型。在UML1.3以後的版本中用例之間是包含和擴展這兩種關係。
泛化關係:代表一般與特殊的關係。它的意思和
面向對象程式設計中的繼承的概念是類似的。不同的是繼承使用在實施階段,泛化使用在分析、設計階段。在泛化關係中子
用例繼承了父用例的行為和含義,子用例也可以增加新的行為和含義或者覆蓋父用例中的行為和含義。
擴展關係的基本含義和泛化關係類似,但在擴展關係中,對於擴展用例有更多的規則限制,基本用例必須聲明擴展點,而擴展用例只能在擴展點上增加新的行為和含義。與包含關係一樣,擴展關係也是依賴關係的版型。在擴展關係中,箭頭的方向是從擴展
用例到基本用例,這與包含關係是不同的。
用例的泛化、包含、擴展關係的比較。一般來說可以使用“is a”和“has a”來判斷使用那種關係。泛化和擴展關係表示用例之間是“is a”關係,包含關係表示用例之間是“has a”關係。擴展與泛化相比多了擴展點,擴展用例只能在基本用例的擴展點上進行擴展。在擴展關係中基本用例是獨立存在。在包含關係中在執行基本用例的時候一定會執行包含用例。如果需要重複處理兩個或多個用例時可以考慮使用包含關係,實現一個基本用例對另一個的引用。當處理正常行為的變形是偶爾描述時可以考慮只用泛化關係。當描述正常行為的變形希望採用更多的控制方式時,可以在基本
用例中設定擴展點,使用擴展關係。擴展關係比較難理解,如果把擴展關係看作是帶有更多規則限制的泛化關係,可以幫助理解。通常先獲得基本用例,針對這個用例中的每一個行為提問:該步驟會出什麼差錯?該步驟有不同的情況工作怎樣以不同的方式進行等,把所有的變化情況都標識為擴展。通常基本用例很容易構造,而擴展用例需要反覆分析、驗證。當我們發現已經存在的兩個用例間具有某種相似性時,可以把相似的部分從兩個用例中抽象出來單獨作為一個用例,該用例被這兩個用例同時使用,這個抽象出的用例和另外兩個用例形成包含關係。
用例之間的關係舉例
包含:業務中,總是存在著維護某某信息的功能,如果將它作為一個
用例,那新建、編輯以及修改都要在用例詳述中描述,過於複雜;如果分成新建用例、編輯用例和刪除用例,則劃分太細。這時包含關係可以用來理清關係。
擴展:系統中允許用戶對查詢的結果進行導出、列印。對於查詢而言,能不能導出、列印查詢都是一樣的,導出、列印是不可見的。導出、列印和查詢相對獨立,而且為查詢添加了新行為。
泛化:子用例將繼承父用例的所有結構、行為和關係。子用例可以使用父用例的一段行為,也可以重載它。父用例通常是抽象的。
用例圖展示了用例之間以及同用例參與者之間是怎樣相互聯繫的。用例圖用於對系統、子系統或類的行為進行可視化,使用戶能夠理解如何使用這些元素,並使開發者能夠實現這些元素。
將每個系統中的用戶分出工作狀態的屬性和工作內容,方便
建模,防止功能重複和多餘的類。
用例圖定義了系統的功能需求,它是從系統的外部看系統功能,並不描述系統內部對功能的具體實現。