UML類圖關(guān)系(泛化 、繼承、實(shí)現(xiàn)、依賴、關(guān)聯(lián)、聚合、組合)

1. 繼承

繼承是指一個(gè)類(稱為子類、子接口)繼承令一個(gè)類(稱為父類、付接口)的功能

  • 子類具有可以增加它自己的新功能的能力
  • 在Java中此類關(guān)系通過關(guān)鍵字extends明確標(biāo)志
  • 且子類只能繼承一個(gè)父類,單繼承
  • 包括類繼承和接口繼承兩種,如下圖,左側(cè)是類繼承,右側(cè)是接口繼承
image

2. 實(shí)現(xiàn)

實(shí)現(xiàn)是指一個(gè)class類實(shí)現(xiàn)了interface接口

  • 實(shí)現(xiàn)的接口可以是多個(gè)
  • 在 Java 中此類關(guān)系通過implements 關(guān)鍵字標(biāo)志
  • 接口可以從行為方面考慮,多個(gè)類具有相同的行為
image

3. 依賴

依賴簡(jiǎn)單理解,就是一個(gè)類 A 使用到了另一個(gè)類 B

  • 此種依賴關(guān)系具有偶然性額、臨時(shí)性的、非常弱的
  • 但是 B 類的變化會(huì)影響到 A
  • 代碼層的表現(xiàn)是,類 B 作為方法參數(shù)被 A 的某個(gè)方法使用
image

4. 關(guān)聯(lián)

關(guān)聯(lián)是兩個(gè)類、或者類與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴關(guān)系

  • 這種關(guān)系比依賴更強(qiáng)
  • 這種關(guān)系不是偶然性、也不是臨時(shí)的,一般是長(zhǎng)期、平等的
  • 代碼層面表現(xiàn)為,類B 作為屬性形式出現(xiàn)在類A中
    • 成員變量
    • 類變量
image

5. 聚合

聚合關(guān)聯(lián)關(guān)系的一種特例

  • 它體現(xiàn)的是整體與部分、has-a的關(guān)系
  • 整體和部分之間是可分離的,而且具有各自的生命周期
  • 部分可以屬于多個(gè)整體對(duì)象,即部分可以“拆卸”存在其他整體對(duì)象中,也可為多個(gè)整體對(duì)象共享
  • 如計(jì)算機(jī)和CPU,公司和員工
  • 代碼層面表現(xiàn)為,類B 作為屬性形式出現(xiàn)在類A中
    • 成員變量
    • 類變量
image

6. 組合

組合也是關(guān)聯(lián)關(guān)系的一種特例

  • 它體現(xiàn)的是contains-a的關(guān)系
  • 此種關(guān)系比聚合更強(qiáng),也稱為強(qiáng)聚合
  • 體現(xiàn)整體和部分間的關(guān)系,但整體和部分不可分,整體聲明周期決定著部分的生命周期
  • 比如人體和到腦
    • 代碼層面表現(xiàn)為,類B 作為屬性形式出現(xiàn)在類A中
      • 成員變量
      • 類變量
image

關(guān)系依賴強(qiáng)弱排序

組合>聚合>關(guān)聯(lián)>依賴

組合和聚合的區(qū)別

  • 3種對(duì)象:雁群(GooseGroup)-大雁(Goose)-翅膀(Wings)
  • 聚合:雁群-大雁 (has-a, 生命周期獨(dú)立)
  • 組合:大雁-翅膀 (contain-a, 生命周期不獨(dú)立)

代碼層面上組合和聚合的對(duì)比

信息的封裝性不同

GooseGroup 和 Goose

public class GooseGroup {
    
    private Goose goose;
    
    public GooseGroup(Goose goose) {
        //GooseGroup 和 Goose有獨(dú)立的生命周期,Goose 可對(duì)外暴露-聚合
        //客戶端可以同時(shí)了解 GooseGroup 和 Goose
        this.goose = goose; 
    }
    
}

Goose 和 Wings

public class Goose {
    
    private Wings wings;
    
    public Goose() {
        //Goose 負(fù)責(zé)Wings 的生命周期-組合
        //客戶端只認(rèn)識(shí)Goose類,根本不知道Wings的存在,Winds 完全被封裝到Goose中
        wings = new Wings(); 
    }
    
}
參考:https://www.cnblogs.com/alex-blog/articles/2704214.html
圖片地址:https://note.youdao.com/share/?id=019f244276498ee401fbd6563fddbd49&type=note#/
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容