引用:http://blog.csdn.net/suxinpingtao51/article/details/8011335
在UML的
類圖中,常見的有以下幾種關係: 泛化(Generalization), 實現(Realization), 關聯(Association), 聚合(Aggregation), 組合(Composition), 依賴(Dependency)
1. 泛化(Generalization)
【泛化關係】:是一種繼承關係, 表示一般與特殊的關係, 它指定了子類如何特化父類的所有特徵和行爲. 例如:老虎是動物的一種, 即有老虎的特性也有動物的共性.
【箭頭指向】:帶三角箭頭的實線,箭頭指向父類
2. 實現(Realization)
【實現關係】:是一種類與接口的關係, 表示類是接口所有特徵和行爲的實現.
【箭頭指向】:帶三角箭頭的虛線,箭頭指向接口
3. 關聯(Association)
【關聯關係】:是一種擁有的關係, 它使一個類知道另一個類的屬性和方法;如:老師與學生,丈夫與妻子
關聯可以是雙向的,也可以是單向的。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。
【代碼體現】:成員變量
【箭頭及指向】:帶普通箭頭(或實心三角形箭頭)的實心線,指向被擁有者
上圖中,老師與學生是雙向關聯,老師有多名學生,學生也可能有多名老師。但學生與某課程間的關係爲單向關聯,一名學生可能要上多門課程,課程是個抽象的東西他不擁有學生。
上圖爲自身關聯:
4. 聚合(Aggregation)
【聚合關係】:是整體與部分的關係, 且部分可以離開整體而單獨存在. 如車和輪胎是整體和部分的關係, 輪胎離開車仍然可以存在.
聚合關係是關聯關係的一種,是強的關聯關係;關聯和聚合在語法上無法區分,必須考察具體的邏輯關係。
【代碼體現】:成員變量
【箭頭及指向】:帶空心菱形的實心線,菱形指向整體
5. 組合(Composition)
【組合關係】:是整體與部分的關係, 但部分不能離開整體而單獨存在. 如公司和部門是整體和部分的關係, 沒有公司就不存在部門.
組合關係是關聯關係的一種,是比聚合關係還要強的關係,它要求普通的聚合關係中代表整體的對象負責代表部分的對象的生命週期
【代碼體現】:成員變量
【箭頭及指向】:帶實心菱形的實線,菱形指向整體
6. 依賴(Dependency)
【依賴關係】:是一種使用的關係, 即一個類的實現需要另一個類的協助, 所以要儘量不使用雙向的互相依賴.
【代碼表現】:局部變量、方法的參數或者對靜態方法的調用
【箭頭及指向】:帶箭頭的虛線,指向被使用者
各種關係的強弱順序:
泛化 = 實現 > 組合 > 聚合 > 關聯 > 依賴
下面這張UML圖,比較形象地展示了各種類圖關係:
====================================================
序列圖主要用於展示對象之間交互的順序。
序列圖將交互關係表示爲一個二維圖。縱向是時間軸,時間沿豎線向下延伸。橫向軸代表了在協作中各獨立對象的類元角色。類元角色用生命線表示。當對象存在時,角色用一條虛線表示,當對象的過程處於激活狀態時,生命線是一個雙道線。
消息用從一個對象的生命線到另一個對象生命線的箭頭表示。箭頭以時間順序在圖中從上到下排列。
序列圖中涉及的元素:
1. 生命線:
生命線名稱可帶下劃線。當使用下劃線時,意味着序列圖中的生命線代表一個類的特定實體。
2. 同步消息
發送人在它繼續之前,將等待同步消息響應
3. 異步消息
在發送方繼續之前,無需等待響應的消息
4. 註釋
5. 約束
約束的符號很簡單;格式是: [Boolean Test]
6. 組合片段
組合片段 用來解決交互執行的條件及方式。 它允許在序列圖中直接表示邏輯組件,用於通過指定條件或子進程的應用區域,爲任何生命線的任何部分定義特殊條件和子進程。
常用的組合片段有:
a. 抉擇(Alt)
抉擇用來指明在兩個或更多的消息序列之間的互斥的選擇,相當於經典的if..else..。
抉擇在任何場合下只發生一個序列。 可以在每個片段中設置一個臨界來指示該片段可以運行的條件。 else 的臨界指示其他任何臨界都不爲 True 時應運行的片段。 如果所有臨界都爲 False 並且沒有 else,則不執行任何片段。
b. 選項(Opt)
包含一個可能發生或不發生的序列
c. 循環(Loop)
片段重複一定次數。 可以在臨界中指示片段重複的條件。
d. 並行(Par)
下表列出了常用的組合片段:
片段類型 |
名稱 |
說明 |
Opt |
選項 |
包含一個可能發生或可能不發生的序列。 可以在臨界中指定序列發生的條件。 |
Alt |
抉擇 |
包含一個片段列表,這些片段包含備選消息序列。 在任何場合下只發生一個序列。 可以在每個片段中設置一個臨界來指示該片段可以運行的條件。 else 的臨界指示其他任何臨界都不爲 True 時應運行的片段。 如果所有臨界都爲 False 並且沒有 else,則不執行任何片段。 |
Loop |
循環 |
片段重複一定次數。 可以在臨界中指示片段重複的條件。 Loop 組合片段具有“Min”和“Max”屬性,它們指示片段可以重複的最小和最大次數。 默認值是無限制。 |
Break |
中斷 |
如果執行此片段,則放棄序列的其餘部分。 可以使用臨界來指示發生中斷的條件。 |
Par |
並行 |
並行處理。 片段中的事件可以交錯。 |
Critical |
關鍵 |
用在 Par 或 Seq 片段中。 指示此片段中的消息不得與其他消息交錯。 |
Seq |
弱順序 |
有兩個或更多操作數片段。 涉及同一生命線的消息必須以片段的順序發生。 如果消息涉及的生命線不同,來自不同片段的消息可能會並行交錯。 |
Strict |
強順序 |
有兩個或更多操作數片段。 這些片段必須按給定順序發生。 |
有關如何解釋序列的片段
默認情況下,序列圖表明可能發生的一系列消息。 在運行的系統中,可能會出現您未選擇顯示在關係圖上的其他消息。
以下片段類型可用於更改此釋義:
片段類型 |
名稱 |
說明 |
Consider |
考慮 |
指定此片段描述的消息列表。 其他消息可發生在運行的系統中,但對此描述來說意義不大。 在“Messages”屬性中鍵入該列表。 |
Ignore |
忽略 |
此片段未描述的消息列表。 這些消息可發生在運行的系統中,但對此描述來說意義不大。 在“Messages”屬性中鍵入該列表。 |
Assert |
斷言 |
操作數片段指定唯一有效的序列。 通常用在 Consider 或 Ignore 片段中。 |
Neg |
否定 |
此片段中顯示的序列不得發生。 通常用在 Consider 或 Ignore 片段中。 |
====================================================
用例圖主要用來描述 用戶、需求、系統功能單元 之間的關係。它展示了一個外部用戶能夠觀察到的系統功能模型圖。
【用途】:幫助開發團隊以一種可視化的方式理解系統的功能需求。
用例圖所包含的元素如下:
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) 的區別:
條件性:泛化中的子用例和include中的被包含的用例會無條件發生,而extend中的延伸用例的發生是有條件的;
直接性:泛化中的子用例和extend中的延伸用例爲參與者提供直接服務,而include中被包含的用例爲參與者提供間接服務。
對extend而言,延伸用例並不包含基礎用例的內容,基礎用例也不包含延伸用例的內容。
對Inheritance而言,子用例包含基礎用例的所有內容及其和其他用例或參與者之間的關係;
一個用例圖示例:
牢騷:
感覺用例圖還不成熟,並不能很好地表達系統的需求, 沒有UML背景的用戶幾乎不知道畫的些什麼。
其次,包含關係、擴展關係 的箭頭符號竟然是同樣的箭頭,僅靠上方寫個文字來加以區別,翻譯成其他語言的話,幾乎就不知道代表什麼意思。 擴展關係的箭頭朝向也很難理解,爲何要指向基用例,而不指向擴展用例
VS2010添加的“項目”元素,是個很好的創新,能夠在用例圖中關聯word,excel這些文檔。但爲什麼不把這些功能直接集成到用例裏面,雙擊用例就彈出一份文檔豈不更容易理解,非要畫蛇添足地加一個元件,僅僅爲了提供個鏈接功能。
用例描述表:
鑑於用列圖並不能清楚地表達功能需求,開發中大家通常用描述表來補充某些不易表達的用例,下圖的表給大家提供一個參考: