類與類之間的關係

2021-09-29 20:48:26 字數 2320 閱讀 1341

實現關係(realization)

依賴關係(dependency)

關聯關係(dependency)

聚合關係(aggregation)

組合關係(composition)

從軟體設計的角度來看,一群孤立的類無法構成乙個完整的軟體系統,類與類之間必然存在大量的聯絡與互動,類是實體的抽象,現實中複雜多樣的實體連線,轉換為關係是需要我們仔細的斟酌。

類之間的關係在大體上分為兩種,一種是縱向的,另一種是橫向的。

一、縱向的就是繼承,它是oo的三個特徵之一。在uml中稱作:

泛化(generalization) :表示乙個類對另乙個類的繼承。*

實現(realization) : 實現指的是乙個class類實現inte***ce介面(可以是多個)的功能。*

二、橫向關係較為微妙,按照uml的建議大體上可以分為四種:

依賴 (dependency) :乙個物件在執行期會使用到另乙個物件的關係。

關聯 (association) : 某個物件會長期的持有另乙個物件的引用。

聚合 (aggregation) :聚合是強版本的關聯。它暗含著一種所屬關係以及生命期關係。。

組合 (composition) : 整體與區域性的關係,區域性不可以脫落整體存在

它們的強弱關係是沒有異議的:依賴 < 關聯 < 聚合 < 組合

就是繼承關係。

實現指的是乙個class類實現inte***ce介面(可以是多個)的功能,實現是類與介面之間最常見的關係。 c++中並沒有為介面定義特殊的識別符號,用特殊抽象類來表示介面,介面類應滿足以下條件:

1、介面類中不應該宣告成員變數,靜態變數。

2、可以宣告靜態常量作為介面的返回值狀態,需要在對應的cpp中定義並初始化,訪問時需要使用"介面型別::靜態常量名"訪問

2、定義的介面方法使用virtual 修飾符 和 「=0」 修飾,表示該方法是純虛的。

3、因為介面類是無法建立物件的,所以不應該編寫建構函式和析構函式。

class

ishape

;

就像賭徒與色子的關係,賭徒使用色子,只是賭的時候用色子,其他時候並沒有關係。依賴關係描述乙個物件在執行期會使用到另乙個物件的關係。與關聯關係不同的是,依賴關係是一種臨時性的關係,它通常都是在執行期產生。

class

ccar

;class

cperson

};

關聯就是某個物件會長期的持有另乙個物件的引用,而二者的關聯往往也是相互的。關聯的兩個物件彼此間沒有任何強制性的約束,只要二者同意,可以隨時解除關係或是進行關聯,它們在生命期問題上沒有任何約定。被關聯的物件還可以再被別的物件關聯,所以關聯是可以共享的。

例如:

在c++中表示為,持有物件的指標

class

ccar

;class

cperson

;

聚合是強版本的關聯。它暗含著一種所屬關係以及生命期關係。被聚合的物件還可以再被別的物件關聯,所以被聚合物件是可以共享的。雖然是共享的,聚合代表的是一種更親密的關係。

聚合是整體與部分的關係,且部分可以離開整體而存在,如,車和輪胎是整體和部分的關係,輪胎離開車還可以存在。

是關聯關係的一種特例,他體現的是整體與部分、擁有的關係,即has-a的關係,此時整體與部分之間是可分離的,他們可以具有各自的生命週期,部分可以屬於多個整體物件,也可以為多個整體物件共享;比如計算機與cpu、公司與員工的關係等;表現在**層面,和關聯關係是一致的,只能從語義級別來區分

在c++中表示為,持有物件的指標

// car.h

#include

"tyre.h"

class

ccar

;

組合是關係當中的最強版本,它直接要求包含物件對被包含物件的擁有以及包含物件與被包含物件生命期的關係。被包含的物件還可以再被別的物件關聯,所以被包含物件是可以共享的,然而絕不存在兩個包含物件對同乙個被包含物件的共享。

組合也是關聯關係的一種特例,他體現的是一種contains-a的關係,這種關係比聚合更強,也稱為強聚合;他同樣體現整體與部分間的關係,但此時整體與部分是不可分的,整體的生命週期結束也就意味著部分的生命週期結束;比如你和你的大腦;

在c++中表示為,持有物件的指標

// car.h

#include

"tyre.h"

class

cperson

;

類與類之間的關係

uml uml是統一建模語言 為軟體開發提供一些標準的圖例,統一開發思想,從而促進團隊協作 在軟體過程中,會用到uml 分析 設計 編碼 測試 維護 主流的有 rup rational unified process 合理的統一過程 強調軟體開發一開始就要有好的設計 才能有好的設計 xp程式設計 e...

類與類之間的關係

1.在乙個類中將被聚合元素作為其屬性 如果所有類都會用到乙個類的物件,則把它作為屬性 在任何方法的任何類,都可以建立物件 package 聚合 public class car public static void main string args package 聚合 public class w...

類與類之間的關係

泛化 繼承 指的是乙個類 稱為子類 子介面 繼承另外乙個類 稱為父類 父介面 的功能。在uml類圖設計中,泛化 繼承 使用一條帶空心的三角箭頭的實線表示,從子類指向父類,或者是從子介面指向父介面。示例 public class father class sonextends father 實現 實現...