91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

圖解碼說(shuō)-六大UML類圖關(guān)系(依賴,繼承,實(shí)現(xiàn),關(guān)聯(lián),聚合,組合)

設(shè)計(jì)模式C語(yǔ)言版 ? 來(lái)源:口袋物聯(lián) ? 作者:口袋物聯(lián) ? 2025-11-05 09:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

UML 類圖是面向?qū)ο笤O(shè)計(jì)的 “施工圖”,而依賴、繼承、實(shí)現(xiàn)、關(guān)聯(lián)、聚合、組合這六大關(guān)系,就是圖中定義類與類互動(dòng)規(guī)則的核心 “語(yǔ)法”。掌握它們,就能快速看懂類的協(xié)作邏輯與系統(tǒng)結(jié)構(gòu)

1 UML 類圖基礎(chǔ)

UML類圖的基本單元,類如下所示

+----------------+
|    Animal      |  // 類名
+----------------+
| - name: String |  // 屬性(private)
| - age: int     |
+----------------+
| + eat(): void  |  // 方法(public)
| + sleep(): void|
+----------------+

通常是一個(gè)三層矩形框,從上到下分別對(duì)應(yīng):

  • 第一層:類名(抽象類名用斜體表示);
  • 第二層:屬性(格式為 “可見(jiàn)性 屬性名:類型”,如 “- name: String” );
  • 第三層:方法(格式為 “可見(jiàn)性 方法名 (參數(shù)): 返回值類型”,如 “+ eat (): void” )。

“-” 代表 private,“+” 代表 public,"#"表示protected

2 六大關(guān)系圖解:從符號(hào)到本質(zhì)

2.1 繼承

繼承是面向?qū)ο?a target="_blank">編程中的一個(gè)基本概念,指的是子類繼承父類的屬性和方法
繼承用于代碼復(fù)用和建立類之間的層次關(guān)系,形成 is-a 關(guān)系

// 基類(父類)
class Animal {
public:
    // 普通方法(會(huì)被繼承)
    void drink() { 
        cout < < "Animal is drinking" < < endl; 
    }
    
    // 虛函數(shù)(用于多態(tài))
    virtual void sound() = 0; // 純虛函數(shù)(抽象方法)
};
 
// 繼承示例(派生類)
class People : public Animal { // 使用繼承(is-a 關(guān)系)
public:
    // 實(shí)現(xiàn)基類的純虛函數(shù)(必須實(shí)現(xiàn))
    void sound() override {
        cout < < "hello world!" < < endl;
    }
};

UML 符號(hào)使用帶空心三角形的實(shí)線(三角形指向父類,即 “誰(shuí)是父,箭頭指誰(shuí)”)

image.png

2.2實(shí)現(xiàn)

實(shí)現(xiàn)通常指的是接口的實(shí)現(xiàn),但C++本身并沒(méi)有像Java那樣的接口關(guān)鍵字,所以可能需要用抽象類來(lái)模擬接口,形成 can-do 關(guān)系
實(shí)現(xiàn)(通過(guò)抽象類)用于定義必須由子類實(shí)現(xiàn)的方法,確保多態(tài)性

在c++中,

// 實(shí)現(xiàn)示例(接口模式)
class Eating { // 模擬接口(沒(méi)有成員變量)
public:
    virtual void eat() = 0; // 純虛函數(shù)(必須實(shí)現(xiàn))
    virtual ~Eating() {}   // 虛析構(gòu)函數(shù)
};
 
class People : public Animal, public Eating { // 多繼承(實(shí)現(xiàn)多個(gè)接口)
public:
    // 實(shí)現(xiàn) Animal 的抽象方法
    void sound() override {
        cout < < "Chirp!" < < endl;
    }
    
    // 實(shí)現(xiàn) Eating 的接口方法
    void eat() override {
        cout < < "Bird is eating" < < endl;
    }
};

UML 符號(hào)使用帶空心三角形的虛線(三角形指向接口,即 “誰(shuí)是接口,箭頭指誰(shuí)”)

image.png

2.3依賴

依賴是一種比較弱的關(guān)系,表示一個(gè)類使用另一個(gè)類,但生命周期上沒(méi)有必然聯(lián)系。比如,一個(gè)方法參數(shù)中使用了另一個(gè)類的對(duì)象,或者局部變量。這種情況下,當(dāng)方法執(zhí)行完畢,依賴的對(duì)象可能就被銷毀了,抽象地說(shuō),類 A 的某個(gè)方法使用類 B 的對(duì)象,但 B 的對(duì)象并非 A 的成員變量,而是通過(guò)參數(shù)、局部變量或靜態(tài)方法調(diào)用臨時(shí)使用。

#include < iostream >
using namespace std;

class Food {
private:
    int eggs;
};

class People {
public:
    // 依賴關(guān)系:通過(guò)方法參數(shù)使用 Foodl
    void eat(Food *food) {
        eat.food();
    }
};

UML 符號(hào)使用帶箭頭的虛線(箭頭指向被依賴的類,即 “誰(shuí)被用,箭頭指誰(shuí)”)

image.png

2.4關(guān)聯(lián)

關(guān)聯(lián)表示長(zhǎng)期的結(jié)構(gòu)性聯(lián)系,表示更強(qiáng)的關(guān)系,通常表示成員變量,一個(gè)類包含另一個(gè)類的實(shí)例作為屬性。關(guān)聯(lián)有方向性,可以是單向或雙向,但生命周期上,關(guān)聯(lián)的對(duì)象通常由另一個(gè)類管理,比如作為成員變量存在,生命周期和包含它的對(duì)象一致

class People {
private:
	chai *home;
	Home *home
public:
	work()
};

class Home {
private:
    char* addr; 
};

UML 符號(hào)使用帶箭頭的實(shí)線(單向關(guān)聯(lián)箭頭指向被關(guān)聯(lián)方;雙向關(guān)聯(lián)無(wú)箭頭,或用雙向箭頭)

image.png

2.5 聚合

整體與部分具有弱依賴關(guān)系,部分的生命周期獨(dú)立于整體。部分可以屬于多個(gè)整體或獨(dú)立存在。典型的 "has-a" 關(guān)系

#include < iostream >
using namespace std;

class People {
private:
	char *name;
	chai *home;
public:
	work()
};

class Company {
private:
    People* people; // 關(guān)聯(lián)關(guān)系:成員變量指向 People 對(duì)象
public:
    Company(People* p) : People(p) {} // 通過(guò)構(gòu)造函數(shù)傳入 People 對(duì)象
    
    void work() {
        people- >work(); // 使用關(guān)聯(lián)的 People 對(duì)象
    }
};

UML 符號(hào)使用帶空心菱形的實(shí)線(菱形在 “整體” 側(cè),箭頭指向 “部分”)

image.png

2.6組合

整體與部分具有強(qiáng)依賴關(guān)系,部分的生命周期由整體管理。部分不能獨(dú)立于整體存在。
整體類持有部分類的對(duì)象實(shí)例,部分在整體構(gòu)造時(shí)創(chuàng)建,整體銷毀時(shí)自動(dòng)銷毀)。

#include < iostream >
using namespace std;

class Heart {
public:
    void beat() {
        cout < < "Heart is beating" < < endl;
    }
    ~Heart() {
        cout < < "Heart destroyed" < < endl;
    }
};

class People {
private:
    Heart heart; // 組合關(guān)系:Heart 是 Person 的組成部分
public:
    void live() {
        heart.beat();
    }
    ~People() {
        cout < < "People destroyed" < < endl;
    }
};

UML 符號(hào)使用帶實(shí)心菱形的實(shí)線(菱形在 “整體” 側(cè),箭頭指向 “部分”)

image.png

3對(duì)比

繼承實(shí)現(xiàn)依賴關(guān)聯(lián)組合聚合
關(guān)系強(qiáng)度"is-a" 關(guān)系"can-do" 關(guān)系弱(臨時(shí)使用)強(qiáng)(長(zhǎng)期持有)強(qiáng)(部分依賴整體)弱(部分獨(dú)立存在)
生命周期父類與子類生命周期通常獨(dú)立接口類不管理對(duì)象生命周期,由實(shí)現(xiàn)類負(fù)責(zé)方法調(diào)用期間存在對(duì)象實(shí)例化時(shí)建立,銷毀時(shí)結(jié)束整體管理部分生命周期部分生命周期獨(dú)立
代碼體現(xiàn)通過(guò)虛函數(shù)實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)通過(guò)純虛函數(shù)定義接口,實(shí)現(xiàn)類提供具體實(shí)現(xiàn)方法參數(shù)、局部變量、靜態(tài)方法調(diào)用成員變量(對(duì)象、指針或引用)成員變量為對(duì)象(非指針)成員變量為指針或引用
對(duì)象管理不管理對(duì)象生命周期可能管理對(duì)象生命周期(如通過(guò)值或指針)整體析構(gòu)時(shí)自動(dòng)銷毀部分整體析構(gòu)時(shí)不銷毀部分
典型場(chǎng)景生物分類(如貓繼承動(dòng)物)技能規(guī)范(如飛行接口)工具類使用(如 Worker 使用 Tool)實(shí)體間聯(lián)系(如 Student 與 Teacher)生物器官與生物體(如心臟與人類)集合與元素(如班級(jí)與學(xué)生)
UML表示空心三角形+實(shí)線空心三角形+虛線虛線箭頭(-->)實(shí)線箭頭(→)實(shí)心菱形箭頭(?→)空心菱形箭頭(◇→)

4實(shí)戰(zhàn)技巧:如何快速識(shí)別關(guān)系?

  • 先看 “箭頭與形狀”:菱形代表 “整體 - 部分”(空心 = 聚合,實(shí)心 = 組合),三角形代表 “層級(jí) / 契約”(實(shí)線 = 繼承,虛線 = 實(shí)現(xiàn));
  • 再判 “強(qiáng)弱與生命周期”:臨時(shí)用 = 依賴,長(zhǎng)期持用 = 關(guān)聯(lián),部分能獨(dú)立 = 聚合,部分不能獨(dú)立 = 組合;
  • 最后對(duì)應(yīng) “業(yè)務(wù)語(yǔ)義”:說(shuō) “是 XX” 找繼承,說(shuō) “能 XX” 找實(shí)現(xiàn),說(shuō) “有 XX” 看關(guān)聯(lián) / 聚合 / 組合。

image.png


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • UML
    UML
    +關(guān)注

    關(guān)注

    0

    文章

    123

    瀏覽量

    31588
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何分辨五六類網(wǎng)線

    分辨五六類網(wǎng)線的方法如下: 外皮標(biāo)識(shí) 五網(wǎng)線外皮標(biāo)注“CAT5”,六類網(wǎng)線標(biāo)注“CAT6”。這是最直觀的區(qū)分方式,標(biāo)識(shí)直接表明網(wǎng)線的類別。 傳輸性能 五
    的頭像 發(fā)表于 01-28 10:21 ?1082次閱讀

    六類網(wǎng)線如何選擇

    選擇超六類網(wǎng)線時(shí),需綜合考慮傳輸性能、結(jié)構(gòu)工藝、應(yīng)用場(chǎng)景、品牌認(rèn)證及價(jià)格等因素,以確保網(wǎng)絡(luò)穩(wěn)定高效運(yùn)行。以下是具體選擇要點(diǎn): 一、明確需求場(chǎng)景 短距離傳輸( 若用于家庭或小型辦公室,且設(shè)備支持萬(wàn)兆
    的頭像 發(fā)表于 01-28 09:37 ?321次閱讀
    超<b class='flag-5'>六類</b>網(wǎng)線如何選擇

    六類跳線VS超五/超六類——如何選擇“網(wǎng)絡(luò)血管”?

    在布線工程中,選對(duì)跳線類型直接影響網(wǎng)絡(luò)性能與成本。六類跳線雖非“全能選手”,但在特定場(chǎng)景下性價(jià)比突出。 一、六類跳線VS超五:千兆網(wǎng)絡(luò)的“分水嶺” 案例:某小區(qū)升級(jí)千兆光纖到戶,若使用超五
    的頭像 發(fā)表于 10-21 10:24 ?981次閱讀
    <b class='flag-5'>六類</b>跳線VS超五<b class='flag-5'>類</b>/超<b class='flag-5'>六類</b>——如何選擇“網(wǎng)絡(luò)血管”?

    六類網(wǎng)線水晶頭和六類水晶頭通用嗎

    六類網(wǎng)線水晶頭與六類水晶頭在物理結(jié)構(gòu)上不完全通用,但通過(guò)兼容設(shè)計(jì)或特殊處理可實(shí)現(xiàn)互連,不過(guò)可能影響性能。 以下是具體分析: 一、超六類六類
    的頭像 發(fā)表于 10-13 10:32 ?6936次閱讀
    超<b class='flag-5'>六類</b>網(wǎng)線水晶頭和<b class='flag-5'>六類</b>水晶頭通用嗎

    國(guó)巨AC0603車規(guī)MLCC家族在六大系統(tǒng)的典型應(yīng)用

    AC系列是YAGEO針對(duì)汽車電子、工業(yè)及高可靠性場(chǎng)景推出的車規(guī)MLCC平臺(tái),尺寸覆蓋0201~1206,介質(zhì)涵蓋I(NP0/C0G)與II(X7R)。今天,國(guó)巨代理南山電子說(shuō)一說(shuō)國(guó)巨AC0603
    的頭像 發(fā)表于 09-19 17:07 ?1152次閱讀
    國(guó)巨AC0603車規(guī)MLCC家族在<b class='flag-5'>六大</b>系統(tǒng)的典型應(yīng)用

    六類跳線是否可以接到六類配線架

    六類跳線可以接到六類配線架,原因如下: 物理接口兼容性:超六類跳線與六類配線架均采用標(biāo)準(zhǔn)RJ45接口,物理形態(tài)完全一致,可直接插拔連接。這種設(shè)計(jì)確保了不同類別網(wǎng)線在物理層面的通用性,
    的頭像 發(fā)表于 09-18 09:52 ?894次閱讀

    網(wǎng)線接口能插六類網(wǎng)線嗎

    網(wǎng)線接口(RJ45)可以插六類網(wǎng)線,但實(shí)際使用效果需結(jié)合具體場(chǎng)景和設(shè)備綜合判斷。以下是詳細(xì)分析: 一、物理兼容性:接口通用,但需注意細(xì)節(jié) RJ45接口標(biāo)準(zhǔn)統(tǒng)一 五(Cat5)、超五
    的頭像 發(fā)表于 09-08 10:32 ?6612次閱讀

    網(wǎng)線面板分五六類

    網(wǎng)線面板確實(shí)分五六類,這種分類主要基于其適配的網(wǎng)線類型及傳輸性能,以下是具體說(shuō)明: 一、分類依據(jù) 適配網(wǎng)線類型 五面板:專為五網(wǎng)線(CAT5)設(shè)計(jì),適用于百兆以太網(wǎng)(100Mb
    的頭像 發(fā)表于 08-08 09:46 ?4336次閱讀

    網(wǎng)線能用六類水晶頭嗎

    網(wǎng)線可以使用六類水晶頭,但需注意兼容性和實(shí)際效果,且通常不建議長(zhǎng)期或關(guān)鍵場(chǎng)景下這樣搭配。 以下是詳細(xì)分析: 一、五網(wǎng)線與六類水晶頭的兼容性 物理結(jié)構(gòu)兼容性 線徑與排列:五
    的頭像 發(fā)表于 08-06 10:29 ?8979次閱讀
    五<b class='flag-5'>類</b>網(wǎng)線能用<b class='flag-5'>六類</b>水晶頭嗎

    六類超速網(wǎng)線屬于超六類網(wǎng)線嗎

    六類超速網(wǎng)線并非標(biāo)準(zhǔn)術(shù)語(yǔ),若其指代支持10Gbps傳輸?shù)?b class='flag-5'>六類改進(jìn)型網(wǎng)線,則可歸類為超六類網(wǎng)線。以下為具體分析: 在網(wǎng)線分類標(biāo)準(zhǔn)中,并不存在“六類超速網(wǎng)線”這一官方命名。若該名稱指代通過(guò)
    的頭像 發(fā)表于 08-05 10:00 ?1243次閱讀

    六類網(wǎng)線和超六類網(wǎng)線有什么區(qū)別

    : 標(biāo)準(zhǔn)條件下支持 1 Gbps(千兆),最大傳輸距離為 100 米。 在短距離(≤55 米)且設(shè)備支持的情況下,可實(shí)現(xiàn) 10 Gbps(萬(wàn)兆),但性能隨距離增加會(huì)衰減。 超六類網(wǎng)線(CAT6A) 帶寬
    的頭像 發(fā)表于 06-09 10:06 ?1.4w次閱讀

    六類網(wǎng)線有幾層護(hù)套

    六類網(wǎng)線有雙層護(hù)套。以室外雙護(hù)套六類非屏蔽網(wǎng)線為例,其外護(hù)套采用聚氯乙烯(PVC)加聚乙烯(PE)雙層護(hù)套,厚度達(dá)0.55mm。這種雙層護(hù)套設(shè)計(jì)可增強(qiáng)線纜的耐磨性、抗老化性和環(huán)境適應(yīng)性,尤其適用于
    的頭像 發(fā)表于 05-19 10:21 ?2152次閱讀

    6E是不是超六類網(wǎng)線

    6E并不是超六類網(wǎng)線,而是增強(qiáng)型六類網(wǎng)線,而超六類網(wǎng)線通常被稱為6A。 1. 6E與超六類網(wǎng)線(6A)的區(qū)別 6E網(wǎng)線: 屬于增強(qiáng)型六類網(wǎng)線
    的頭像 發(fā)表于 04-22 10:27 ?9033次閱讀

    六類水晶頭和六類水晶頭一樣嗎

    六類水晶頭和六類水晶頭不一樣,兩者在結(jié)構(gòu)設(shè)計(jì)、性能要求、應(yīng)用場(chǎng)景等方面存在明顯差異。以下是具體分析: 1. 結(jié)構(gòu)設(shè)計(jì)差異 六類水晶頭 內(nèi)部結(jié)構(gòu)通常為單排8針觸點(diǎn),線槽設(shè)計(jì)適配六類網(wǎng)線
    的頭像 發(fā)表于 04-16 10:30 ?1.1w次閱讀
    超<b class='flag-5'>六類</b>水晶頭和<b class='flag-5'>六類</b>水晶頭一樣嗎

    六類與超六類水晶頭通用嗎

    六類水晶頭和超六類水晶頭在物理接口上是兼容的,可以互換使用,但性能可能會(huì)有所下降。以下是對(duì)六類水晶頭和超六類水晶頭通用性的詳細(xì)分析: 一、定義與標(biāo)準(zhǔn)
    的頭像 發(fā)表于 03-06 10:20 ?1.1w次閱讀