標籤:
最近在教軟體工程項目實踐,就又仔細瞭解了下UML中各種關係的意義,雖然有點簡單,但是有些概念還是經常被混淆的,寫在這裡是為了加深印象。
關係列表:
繼承關係(Generalization);
實現關係(Realization);
依賴關係(Dependency);
關聯關係(Association);
有方向的關聯(DirectedAssociation);
彙總關係(Aggregation);
組合關係(Composition);
繼承關係(Generalization):
Class B繼承與Class A
繼承指的是一個類(稱為子類、子介面)繼承另外的一個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力,繼承是類與類或者介面與介面之間最常見的關係之一;在Java中此類別關係通過關鍵字extends明確標識,在設計時一般沒有爭議性;
實現關係(Realization):
Class A實現了Interface A
實現指的是一個class類實現interface介面(可以是多個)的功能;實現是類與介面之間最常見的關係之一;在Java中此類別關係通過關鍵字implements明確標識,在設計時一般沒有爭議性;
依賴關係(Dependency):
ClassA依賴於ClassB
可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關係是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A;表現在代碼層面,為類B作為參數被類A在某個method方法中使用;
關聯關係(Association):
ClassA與ClassB相互關聯
這裡的關聯關係分的比較細,把相互關聯和有方向的關聯區分開了,相互他體現的是兩個類、或者類與介面之間語義層級的一種強依賴關係,是一種長期的穩定的關係;表現在代碼層面,為被關聯類別以類屬性的形式出現在關聯類別中,也可能是關聯類別引用了一個類型為被關聯類別的全域變數;
有方向的關聯(DirectedAssociation):
ClassA關聯於ClassB
是關聯的一種特別形式,是單向的;表現在代碼層面,為被關聯類別B以類屬性的形式出現在關聯類別A中,也可能是關聯類別A引用了一個類型為被關聯類別B的全域變數;
彙總關係(Aggregation):
電腦 has-a cpu
彙總是關聯關係的一種特例,他體現的是整體與部分、擁有的關係,即has-a的關係,此時整體與部分之間是可分離的,他們可以具有各自的生命週期,部分可以屬於多個整體對象,也可以為多個整體對象共用;比如電腦與CPU;表現在代碼層面,和關聯關係是一致的,只能從語義層級來區分;
組合關係(Composition):
孕婦 contains-a 胎兒
組合也是關聯關係的一種特例,他體現的是一種contains-a的關係,這種關係比彙總更強,也稱為強彙總;他同樣體現整體與部分間的關係,但此時整體與部分是不可分的,整體的生命週期結束也就意味著部分的生命週期結束;孕婦死了胎兒自然也就死了;表現在代碼層面,和關聯關係是一致的,只能從語義層級來區分;
UML 中關係圖的解說