日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

认识 UML 类关系——依赖、关联、聚合、组合、泛化

發(fā)布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 认识 UML 类关系——依赖、关联、聚合、组合、泛化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

1.依賴(Dependency)

2.關聯(lián)(Association)

3.聚合(Aggregation)

4.組合(復合,Composition)

5.泛化(Generalization)

6.小結(jié)

參考文獻


在學習面向?qū)ο笤O計時,類關系涉及依賴、關聯(lián)、聚合、組合和泛化這五種關系,耦合度依次遞增。關于耦合度,可以簡單地理解為當一個類發(fā)生變更時,對其他類造成的影響程度,影響越小則耦合度越弱,影響越大耦合度越強。

下面根據(jù)個人理解,嘗試講解這五種類關系。

1.依賴(Dependency)

依賴關系使用虛線加箭頭表示,如下圖所示:

學生在學習生活中經(jīng)常使用電腦,于是對電腦產(chǎn)生了依賴。依賴關系是五種關系中耦合最小的一種關系。類A要完成某個功能引用了類B,則類A依賴類B。依賴在代碼中主要體現(xiàn)為類A的某個成員函數(shù)的返回值、形參、局部變量或靜態(tài)方法的調(diào)用,則表示類A引用了類B。以Student類和Computer類為例,用C++語言編碼如下:

class Computer {public:static void start(){cout<<"電腦正在啟動"<<endl;}};class Student {public://返回值構成依賴Computer& program();//形參構成依賴void program(Computer&);void playGame() {//局部變量構成依賴Computer* computer=new Computer;...//靜態(tài)方法調(diào)用構成依賴Computer::star();}};

2.關聯(lián)(Association)

關聯(lián)關系使用實線加箭頭表示,類之間的關系比依賴要強。學生與老師是關聯(lián)的,學生可以不用電腦,但是學生不能沒有老師。如下圖所示:

關聯(lián)與依賴的對比:

相似之處:

關聯(lián)暗示了依賴,二者都用來表示無法用聚合和組合表示的關系。

區(qū)別:

(1)發(fā)生依賴關系的兩個類都不會增加屬性。其中的一個類作為另一個類的方法的參數(shù)或者返回值,或者是某個方法的變量而已。

發(fā)生關聯(lián)關系的兩個類,類A成為類B的屬性,而屬性是一種更為緊密的耦合,更為長久的持有關系。 在代碼中的表現(xiàn)如下:

class Teacher;class Student {public:Teacher teacher; //成員變量void study();}????

(2)從關系的生命周期來看,依賴關系是僅當類的方法被調(diào)用時而產(chǎn)生,伴隨著方法的結(jié)束而結(jié)束。關聯(lián)關系當類實例化的時候產(chǎn)生,當類對象銷毀的時候關系結(jié)束。相比依賴,關聯(lián)關系的生存期更長。

關聯(lián)關系有單向關聯(lián)、雙向關聯(lián)、自身關聯(lián)、多維關聯(lián)等等。其中后三個可以不加箭頭。

單向關聯(lián):

雙向關聯(lián):

自身關聯(lián):

多維關聯(lián):

3.聚合(Aggregation)

聚合關系使用實線加空心菱形表示。聚合用來表示集體與個體之間的關聯(lián)關系。例如班級與學生之間存在聚合關系,類圖表示如下:

聚合關系在代碼上與關聯(lián)關系表現(xiàn)一致,類Student將成為類Classes的成員變量。代碼如下:

class Student;class Classes {public:Student* student;Classes(Student* stu):student(stu) {}};

4.組合(復合,Composition)

復合關系使用實線加實心菱形表示。組合又叫復合,用來表示個體與組成部分之間的關聯(lián)關系。例如學生與心臟之間存在復合關系,類圖表示如下:

組合關系在代碼上與關聯(lián)關系表現(xiàn)一致,類Heart將成為類Student的成員變量。代碼如下:

class Heart;class Student {public:Heart* heart;Student() {heart=new Heart;}~Student() {delete heart;}};

聚合與組合的對比:

(1)聚合關系沒有組合緊密。

學生不會因為班級的解散而無法存在,聚合關系的類具有不同的生命周期;而學生如果沒有心臟將無法存活,組合關系的類具有相同的生命周期。

這個從構造函數(shù)可以看出。聚合類的構造函數(shù)中包含另一個類的實例作為參數(shù),因為構造函數(shù)中傳遞另一個類的實例,因此學生可以脫離班級體獨立存在。組合類的構造函數(shù)包含另一個類的實例化。因為在構造函數(shù)中進行實例化,因此兩者緊密耦合在一起,同生同滅,學生不能脫離心臟而存在。

(2)信息的封裝性不同。

在聚合關系中,客戶端可以同時了解Classes類和Student類,因為他們是獨立的。

在組合關系中,客戶端只認識Student類,根本不知道Heart類的存在,因為心臟類被嚴密地封裝在學生類中。

理解聚合與復合的區(qū)別,主要在于聚合的成員可獨立,復合的成員必須依賴于整體才有意義。

5.泛化(Generalization)

泛化是學術名稱,通俗來講,泛化指的是類與類之間的繼承關系和類與接口之間的實現(xiàn)關系

繼承關系使用直線加空心三角形表示。類圖結(jié)構如下:

類接口的實現(xiàn)關系使用虛線加空心三角形表示。類圖結(jié)構如下:

6.小結(jié)

依賴、關聯(lián)、聚合、組合與泛化代表類與類之間的耦合度依次遞增。依賴關系實際上是一種比較弱的關聯(lián),聚合是一種比較強的關聯(lián),組合是一種更強的關聯(lián),泛化則是一種最強的關聯(lián),所以籠統(tǒng)的來區(qū)分的話,實際上這五種關系都是關聯(lián)關系。

依賴關系比較好區(qū)分,它是耦合度最弱的一種,在編碼中表現(xiàn)為類成員函數(shù)的局部變量、形參、返回值或?qū)o態(tài)方法的調(diào)用。關聯(lián)、聚合與組合在編碼形式上都以類成員變量的形式來表示,所以只給出一段代碼我們很難判斷出是關聯(lián)、聚合還是組合關系,我們需要從上下文語境中來判別。關聯(lián)表示類之間存在聯(lián)系,不存在集體與個體、個體與組成部分之間的關系。聚合表示類之間存在集體與個體的關系。組合表示個體與組成部分之間的關系。

依賴、關聯(lián)、聚合與組合是邏輯上的關聯(lián),泛化是物理上的關聯(lián)。物理上的關聯(lián)指的是類體的耦合,所以類間耦合性最強。


參考文獻

[1] 認識UML中類之間的依賴、關聯(lián)、聚合、組合、泛化的關系

[2] UML類關系(依賴,關聯(lián),聚合,組合的區(qū)別)

[3] 談一談自己對依賴、關聯(lián)、聚合和組合之間區(qū)別的理解

總結(jié)

以上是生活随笔為你收集整理的认识 UML 类关系——依赖、关联、聚合、组合、泛化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。