UML中各種關係說明以及舉例

UML中描述對象和類之間相互關係的方式包括:依賴(Dependency),關聯(Association),聚合(Aggregation),組合(Composition),泛化(Generalization),實現(Realization)等。

依賴 (Dependency):元素A的變化會影響元素B,但反之不成立,那麼B和A的關係是依賴關係,B依賴A;類屬關係和實現關係在語義上講也是依賴關 系,但由於其有更特殊的用途,所以被單獨描述。uml中用帶箭頭的虛線表示Dependency關係,箭頭指向被依賴元素。

泛化(Generalization):通常所說的繼承(特殊個體 is kind of 一般個體)關係,不必多解釋了。uml中用帶空心箭頭的實線線表示Generalization關係,箭頭指向一般個體。

實現(Realize):元素A定義一個約定,元素B實現這個約定,則B和A的關係是Realize,B realize A。這個關係最常用於接口。uml中用空心空心箭頭和虛線表示Realize關係,箭頭指向定義約定的元素。

關聯(Association):元素間的結構化關係,是一種弱關係,被關聯的元素間通常可以被獨立的考慮。uml中用實線表示Association關係,箭頭指向被依賴元素。

聚合(Aggregation):關聯關係的一種特例,表示部分和整體(整體 has a 部分)的關係。uml中用帶空心菱形頭的實線表示Aggregation關係,菱形頭指向整體。

組 合(Composition):組合是聚合關係的變種,表示元素間更強的組合關係。如果是組合關係,如果整體被破壞則個體一定會被破壞,而聚合的個體則可 能是被多個整體所共享的,不一定會隨着某個整體的破壞而被破壞。uml中用帶實心菱形頭的實線表示Composition關係,菱形頭指向整體。

其中依賴(Dependency)的關係最弱,而關聯(Association),聚合(Aggregation),組合(Composition)表示的關係依次增強。換言之關聯,聚合,組合都是依賴關係的一種,聚合是表明對象之間的整體與部分關係的關聯,而組合是表明整體與部分之間有相同生命週期關係的聚合。

而關聯與依賴的關係用一句話概括下來就是,依賴描述了對象之間的調用關係,而關聯描述了對象之間的結構關係。

後面的例子將針對某個具體目的來獨立地展示各種關係。雖然語法無誤,但這些例子可進一步精煉,在它們的有效範圍內包括更多的語義。

依賴(Dependency)

實體之間一個“使用”關係暗示一個實體的規範發生變化後,可能影響依賴於它的其他實例(圖D)。 更具體地說,它可轉換爲對不在實例作用域內的一個類或對象的任何類型的引用。其中包括一個局部變量,對通過方法調用而獲得的一個對象的引用(如下例所 示),或者對一個類的靜態方法的引用(同時不存在那個類的一個實例)。也可利用“依賴”來表示包和包之間的關係。由於包中含有類,所以你可根據那些包中的 各個類之間的關係,表示出包和包的關係。

圖D


關聯(Association)

實體之間的一個結構化關係表明對象是相互連接的。箭頭是可選的,它用於指定導航能力。如果沒有箭頭,暗示是一種雙向的導航能力。在Java中,關聯(圖E) 轉換爲一個實例作用域的變量,就像圖E的“Java”區域所展示的代碼那樣。可爲一個關聯附加其他修飾符。多重性(Multiplicity)修飾符暗示 着實例之間的關係。在示範代碼中,Employee可以有0個或更多的TimeCard對象。但是,每個TimeCard只從屬於單獨一個 Employee。

圖E

聚合(Aggregation)

聚合(圖F)是關聯的一種形式,代表兩個類之間的整體/局部關係。聚合暗示着整體在概念上處於比局部更高的一個級別,而關聯暗示兩個類在概念上位於相同的級別。聚合也轉換成Java中的一個實例作用域變量。

關聯和聚合的區別純粹是概念上的,而且嚴格反映在語義上。聚合還暗示着實例圖中不存在迴路。換言之,只能是一種單向關係。

圖F



合成(Composition)

合成 (圖G) 是聚合的一種特殊形式,暗示“局部”在“整體”內部的生存期職責。合成也是非共享的。所以,雖然局部不一定要隨整體的銷燬而被銷燬,但整體要麼負責保持局 部的存活狀態,要麼負責將其銷燬。局部不可與其他整體共享。但是,整體可將所有權轉交給另一個對象,後者隨即將承擔生存期職責。

Employee和TimeCard的關係或許更適合表示成“合成”,而不是表示成“關聯”。

圖G

泛化(Generalization)

泛化(圖H)表示一個更泛化的元素和一個更具體的元素之間的關係。泛化是用於對繼承進行建模的UML元素。在Java中,用extends關鍵字來直接表示這種關係。

圖H


實現(Realization)

實例(圖I)關係指定兩個實體之間的一個合同。換言之,一個實體定義一個合同,而另一個實體保證履行該合同。對Java應用程序進行建模時,實現關係可直接用implements關鍵字來表示。

圖I

發佈了10 篇原創文章 · 獲贊 3 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章