1. 程式人生 > >c++組合 聚合 關聯 依賴

c++組合 聚合 關聯 依賴

組合和聚合區別(不能脫離整體 能脫離整體)

組合:(表示兩個物件之間是整體和部分的關係,部分的生命週期不能超越整體。如人和腦袋)
比如A類中包含B類的一個引用b,當A類的一個物件消亡時,b這個引用所指向的物件也同時消亡(沒有任何一個引用指向它,成了垃圾物件)

聚合:(表示兩個物件之間是整體和部分的關係,部分的生命週期可以超越整體。如電腦和滑鼠)

反之b所指向的物件還會有另外的引用指向它,這種情況叫聚合。


組合方式一般程式碼會這樣寫: 
A類的構造方法裡建立B類的物件,也就是說,當A類的一個物件產生時,B類的物件隨之產生,當A類的這個物件消亡時,它所包含的B類的物件也隨之消亡。 

聚合方式一般程式碼會這樣寫: 
A類的物件在建立時會立即建立B類的物件,而是等待一個外界的物件傳給它 

--------------------------------------------------------------------

對c++,形如:
class B1;
class B2;
class B3;
class A
{
B1 b1;
B2& b2;
B3* b3;
};
B1,B2,B3都是部分類。
B1與A的關係是組成關係。
B2、B3與A的關係是聚合還是組成要根據這一條:部分類是否能脫離整體類而存在。
在這裡可以理解他們的生命週期是否同步。


如果b2,b3是通過外部傳入

的,形如:
class A
{
public:
   A(B3* b3)
   {
      m_b3 = b3);
   }
private:
   B3* m_b3;
};
main()
{
   B2 bbb;
   A a(&bbb);
}
bbb並不會因為a的消亡而消亡。那麼就是聚合關係。
反之,如果
m_b3是在A的建構函式new,在A的解構函式delete,兩者生命週期一樣,那麼就是組成關係。
引用的情況類似。

個人感覺uml為了滿足所謂通用性,使得對模型的描述很粗糙,並沒有吹噓的那麼好。
僅供參考。

--------------------------------------

關聯:簡單的可以認為,如果一個類作為了另外一個類的屬性,那一定是關聯關係。但你要知道,聚合是一種特殊的關聯,而組合又是一種特殊的聚合。一般的關聯我們認為是平級的、無整體部分關係的,如朋友關係。

依賴:物件之間的臨時關係,臨時性體現在不超越方法的週期。簡單的說,在方法使用到的,如引數類,就一定是依賴關係。

相關推薦

c++組合 聚合 關聯 依賴

組合和聚合區別(不能脫離整體 能脫離整體) 組合:(表示兩個物件之間是整體和部分的強關係,部分的生命週期不能超越整體。如人和腦袋) 比如A類中包含B類的一個引用b,當A類的一個物件消亡時,b這個引用所指向的物件也同時消亡(沒有任何一個引用指向它,成了垃圾物件) 聚合:

C++程式碼描繪UML中的 關聯 依賴 組合 聚合 泛化

UML的類圖關係分為: 關聯、聚合,組合、依賴、泛化(繼承)。而其中關聯又分為雙向關聯、單向關聯、自身關聯;下面就讓我們一起來看看這些關係究竟是什麼,以及它們的區別在哪裡。1、關聯雙向關聯: C1-C2:指雙方都知道對方的存在,都可以呼叫對方的公共屬性和方法。 使用ROSE

系統設計_1_關聯依賴組合聚合UML

一.引        撇開系統的總體設計,架構圖,模組圖等框架性設計,在具體到某一個功能點的流程設計/類設計/介面設計時,通過UML羅列類/介面及其關係可以更好地將設計轉化為程式碼。UML從多個角度描述系統內容,如用例圖從系統參與者的角度描述需求或功能點,部署圖從系統角度描述

關聯組合聚合依賴關係比較

     Association關聯 系表現為變數(has a )。類與類之間的聯接,它使一個類知道另一個類的屬性和方法。例如如果A依賴於B,則B體現為A的全域性變數。關聯關係有雙向關聯和單向關聯。雙向關聯:兩個類都知道另一個類的公共屬性和操作。單向關聯:只有一個類知道另外一個類的公共屬性和操作。大多數關聯

UML中類之間的主要關係:關聯,依賴,泛化,聚合,組合,實現

UML中,類與類之間的關係分為:關聯,依賴,泛化,聚合,組合,實現 關聯: 體現的是類與類的例項之間的關係,而不是類本身的屬性.

面向物件 類與類之間的關係 (依賴,組合,聚合,等)

-----------------------------困難是一位嚴厲的老師,他產生於克服困難的努力中。 # ---------------------------------------------------------------------------------# # class Page:#

C++組合聚合)與C結構體中包含函式

C++組合(聚合)與C結構體中包含函式 今天突然想到C++的聚合,以前一直沒有注意,今天想到就寫下來,做個筆記; C++的類與我們的C語言中的結構體特別像,但是有有些不太一樣,這裡不多累贅了不能,大家學過的都知道。 C++組合(聚合) 我們知道的都是C++的類的物件,

小解UML中關聯聚合依賴(簡易區分)

說明:本帖目的是使讀者快速簡易理解三者關係,並非詳解概念,所以有難免疏漏之處(部分內容來源網路)。 一、相關概念 1.關聯:關聯關係(Association):類之間的聯絡,如客戶和訂單,每個訂單對應特定的客戶,每個客戶對應一些特定的訂單,再如籃球隊員與球隊之間的關聯(下圖

C++組合通信

-m blog .cpp push char include gravity -a txt #include <iostream> #include<vector> #include<string> using

面向對象設計原則九:組合/聚合復用原則

示例 tex pub 意義 面向對象設計 優先 load 沒有 clas 組合/聚合復用原則(LSP)  定義:優先使用組合,使系統更靈活,其次才考慮繼承,達到復用的目的。重用的方式:  繼承、組合、聚合解釋說明:  繼承:在我們想復用代碼時,我們一般會優先想到繼承,但是具

C++組合類的簡單練習

uil 組合 code lin ios 提升 stream set enum 這是第一次在博客上發表隨筆,希望可以敦促自己不要浪費時間,努力提升基本功。 1 #include <iostream> 2 3 class CPU 4 { 5 e

查看C#的dll所依賴.Net版本

down 版本 sof div 沒有 查看 2.0 pos 反編譯 Microsoft SDK自帶的ildasm.exe工具, 是一個反編譯工具, 可以查看編譯好後的dll的文件 雙擊ildasm.exe, 把你要識別的.dll文件拖進來, 就會反編譯了. 接著在ildas

C# MVC IOC、依賴註入

assembly tof package 組件 流行 獲取 .dll pack exe 在MVC5中依賴註入,本文介紹通過掃描類型RegisterAssemblyTypes來進行註冊 另外還有掃描模塊RegisterAssemblyModules來註冊 使用Autofac

C++ primer筆記----關聯容器

1、 關聯容器與順序容器有著根本的不同;關聯容器的元素是按關鍵詞來儲存和訪問的,順序容器是按他們在容器中的位置來順序訪問 2、關鍵詞在關聯容器中起到重要的作用,map中的元素是(關鍵字—值)對,關鍵詞起到索引的作用,值是與索引相關聯的資料。set每個元素只包含一個關鍵字,支援高效的關鍵詞

程式設計原則之組合/聚合複用原則

一、什麼是組合/聚合複用原則 儘量採用組合(contains-a)、聚合(has-a)的方式而不是繼承(is-a)的關係來達到軟體的複用目的 組合/聚合優點: 類之間的耦合比較低,一個類的變化對其他類造成的影響比較少 缺點: 類的數量增多實現起來比較麻煩 繼承的優

UML日記-6類圖的複合聚合關聯關係

2006年10月20日 15:14:00 roclsp 閱讀數:4769 標籤: uml

合成(組合)/聚合複用原則

1.定義:儘量使用物件組合/聚合,而不是繼承關係達到軟體複用的目的 2.聚合has-A和組合contains-A 3.優點:可以使系統更加靈活,降低類與類之間的耦合度,一個類的變化對其他類造成的影響相對較少 4.思考:何時使用合成/聚合、繼承?聚合has-A、組合contains-A、繼承is-A 5

C++ 組合函式

組合函式是將N個一元函式組成一種更復雜的函式,每個函式的返回值作為引數傳給下一個函式,直到傳到最後一個函式結束。這種組合函式的能力可以使我們以一種更直觀的方式去完成複雜的鏈式執行行為。例如有三個函式: int f(int x), int g(int y), int h(i

C/C++學習:關聯變數

1.  物件(控制)變數(control)     a.  資料型別:control 只能建立關聯一次     b).    control 用來操控控制元件     c).  建立 control 變數:控制元件 -> 右擊 -> 新增變數 -> 類別 Co

C++ 10.3 關聯容器map定義以及value_type、key_type、mapped_type

簡介 map是<鍵—值>對的集合 如:map< string ,int> word_count。map型別通常可理解為關聯陣列:可使用鍵作為下標來獲取一個值,正如內建陣列型別一樣。而關聯的本質在於元素的值與某個特定的鍵相關聯,而並非通