UML類圖的幾種關係和序列圖總結
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這些文件。但為什麼不把這些功能直接整合到用例裡面,雙擊用例就彈出一份文件豈不更容易理解,非要畫蛇添足地加一個元件,僅僅為了提供個連結功能。
用例描述表:
鑑於用列圖並不能清楚地表達功能需求,開發中大家通常用描述表來補充某些不易表達的用例,下圖的表給大家提供一個參考: