UML類圖中的幾種關系總結
阿新 • • 發佈:2017-06-08
技術分享 name dos track text ive implement fonts 結構
演示樣例代碼 :
每一個人都能夠有書籍。可是書籍與人之間並不存在強關系,兩者能夠各自獨立。 演示樣例代碼 :
聚合關系表示部分和總體的關系 (
關聯僅僅是表示單純的依賴 ),部分能夠獨立於總體而存在。
車輪屬於車的一部分。但車輪能夠獨立於車存在。 代碼演示樣例 :
手是人體的一部分,可是手不能獨立於人體而存在。
UML類圖,描寫敘述對象和類之間相互關系的方式包含:依賴(Dependency)、關聯(Association)、聚合(Aggregation)、組合(Composition)、泛化(Generalization)、實現(Realization)等。
依賴(Dependency)
A依賴B,表示A會使用B的行為或屬性,但B不能使用A的行為、屬性,那麽A和B的關系是依賴關系。 uml中用帶箭頭的虛線表示Dependency關系,箭頭指向被依賴元素。 演示樣例代碼 :class B { public void doSth() { System.out.println("do sth in class b."); } } // class A { public void doSthInA(B b) { b.doSth(); // others } }
泛化(Generalization)
就是通常所說的繼承關系,不必多解釋了。uml中用帶空心箭頭的實線線表示Generalization關系,箭頭指向被繼承的類。
// 形狀 class Shape { } // 方形繼承自Shape class Square extends Shape{ }
實現(Realize)
A定義一個約定,B實現這個約定,則B和A的關系是實現,B實現A。這個關系最經常使用於接口。因此A代表接口, B代表實現接口A的詳細類。uml中用空心箭頭和虛線表示Realize關系。箭頭指向定義約定(A)的元素。演示樣例代碼 :
public interface Runnable { public abstract void run(); } // 實現Runnable接口 public class Thread implements Runnable { @Override public void run() { // do sth } }
關聯(Association)
元素間的結構化關系,是一種弱關系,被關聯的元素間通常能夠獨立存在。uml中用實線(單向關聯帶箭頭) 表示Association關系。箭頭指向被依賴元素。每一個人都能夠有書籍。可是書籍與人之間並不存在強關系,兩者能夠各自獨立。 演示樣例代碼 :
class Book { } // class People { // 學生能夠獨立於老師而存在 List<Book> mBooks = new ArrayList<Book>(); }
聚合(Aggregation)
聚合是關聯關系的一種特例,是強的關聯關系;關聯和聚會在語義上無法區分,僅僅能依據考察詳細的邏輯來加以區分。UML中用帶空心菱形頭的實線
表示Aggregation關系,菱形頭指向總體。車輪屬於車的一部分。但車輪能夠獨立於車存在。 代碼演示樣例 :
class Wheel { } class Car { List<Wheel> mWheels = new ArrayList<Wheel>(); }
組合(Composition)
組合是聚合關系的變種,表示元兩者之間具有更強的聚合關系,它通常要求總體代表部分的生命周期。
假設是組合關系,部分(個體)不能獨立於總體而存在。
UML中用帶實心菱形頭的實線表示Composition關系。
菱形頭指向總體。
手是人體的一部分,可是手不能獨立於人體而存在。
class Hand { } class People { List<Hand> mHands = new ArrayList<Hand>(); }
當中依賴(Dependency)的關系最弱,而關聯(Association)。聚合(Aggregation),組合(Composition)表示的關系依次增強。換言之關聯,聚合,組合都是依賴關系的一種,聚合是表明對象之間的總體與部分關系的關聯。而組合是表明總體與部分之間有同樣生命周期關系的聚合。
各種關系的強弱順序:
泛化 = 實現 > 組合 > 聚合 > 關聯 > 依賴
參考推薦:
UML類圖幾種關系的總結
UML類圖符號 各種關系說明以及舉例
UML建模免費工具
UML類圖中的幾種關系總結