UML類圖與類的關係詳解
|
|
2011-04-21 來源:網絡數據庫 |
|
|
參考二:
深刻淺出UML類圖
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
做者:劉偉 ,發佈於:2012-11-23,來源:CSDN |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
參考三:
在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這些文檔。但爲何不把這些功能直接集成到用例裏面,雙擊用例就彈出一份文檔豈不更容易理解,非要多此一舉地加一個元件,僅僅爲了提供個連接功能。
用例描述表:
鑑於用列圖並不能清楚地表達功能需求,開發中你們一般用描述表來補充某些不易表達的用例,下圖的表給你們提供一個參考: