首頁(yè)技術(shù)文章正文

類(lèi)與類(lèi)之間的關(guān)系有哪些?

更新時(shí)間:2021-07-23 來(lái)源:黑馬程序員 瀏覽量:

類(lèi)與類(lèi)之間關(guān)系的表示方式有哪些?

1.關(guān)聯(lián)關(guān)系

關(guān)聯(lián)關(guān)系是對(duì)象之間的一種引用關(guān)系,用于表示一類(lèi)對(duì)象與另一類(lèi)對(duì)象之間的聯(lián)系,如老師和學(xué)生、師傅和徒弟、丈夫和妻子等。關(guān)聯(lián)關(guān)系是類(lèi)與類(lèi)之間最常用的一種關(guān)系,分為一般關(guān)聯(lián)關(guān)系、聚合關(guān)系和組合關(guān)系。我們先介紹一般關(guān)聯(lián)。

關(guān)聯(lián)又可以分為單向關(guān)聯(lián),雙向關(guān)聯(lián),自關(guān)聯(lián)。

(1)單向關(guān)聯(lián)

1627027000176_01關(guān)聯(lián)關(guān)系.png

在UML類(lèi)圖中單向關(guān)聯(lián)用一個(gè)帶箭頭的實(shí)線表示。上圖表示每個(gè)顧客都有一個(gè)地址,這通過(guò)讓Customer類(lèi)持有一個(gè)類(lèi)型為Address的成員變量類(lèi)實(shí)現(xiàn)。


(2)雙向關(guān)聯(lián)

從上圖中我們很容易看出,所謂的雙向關(guān)聯(lián)就是雙方各自持有對(duì)方類(lèi)型的成員變量。

在UML類(lèi)圖中,雙向關(guān)聯(lián)用一個(gè)不帶箭頭的直線表示。上圖中在Customer類(lèi)中維護(hù)一個(gè)List,表示一個(gè)顧客可以購(gòu)買(mǎi)多個(gè)商品;在Product類(lèi)中維護(hù)一個(gè)Customer類(lèi)型的成員變量表示這個(gè)產(chǎn)品被哪個(gè)顧客所購(gòu)買(mǎi)。

1627027045268_02雙向關(guān)聯(lián).png

(3)自關(guān)聯(lián)

自關(guān)聯(lián)在UML類(lèi)圖中用一個(gè)帶有箭頭且指向自身的線表示。上圖的意思就是Node類(lèi)包含類(lèi)型為Node的成員變量,也就是“自己包含自己”。

1627027063235_03自關(guān)聯(lián).png

2. 聚合關(guān)系

聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)關(guān)聯(lián)關(guān)系,是整體和部分之間的關(guān)系。

聚合關(guān)系也是通過(guò)成員對(duì)象來(lái)實(shí)現(xiàn)的,其中成員對(duì)象是整體對(duì)象的一部分,但是成員對(duì)象可以脫離整體對(duì)象而獨(dú)立存在。例如,學(xué)校與老師的關(guān)系,學(xué)校包含老師,但如果學(xué)校停辦了,老師依然存在。

在 UML 類(lèi)圖中,聚合關(guān)系可以用帶空心菱形的實(shí)線來(lái)表示,菱形指向整體。下圖所示是大學(xué)和教師的關(guān)系圖:

1627027084681_04聚合關(guān)系.png

3. 組合關(guān)系

組合表示類(lèi)之間的整體與部分的關(guān)系,但它是一種更強(qiáng)烈的聚合關(guān)系。

在組合關(guān)系中,整體對(duì)象可以控制部分對(duì)象的生命周期,一旦整體對(duì)象不存在,部分對(duì)象也將不存在,部分對(duì)象不能脫離整體對(duì)象而存在。例如,頭和嘴的關(guān)系,沒(méi)有了頭,嘴也就不存在了。

在 UML 類(lèi)圖中,組合關(guān)系用帶實(shí)心菱形的實(shí)線來(lái)表示,菱形指向整體。下圖所示是頭和嘴的關(guān)系圖:

1627027102700_05組合關(guān)系.png

4. 依賴關(guān)系

依賴關(guān)系是一種使用關(guān)系,它是對(duì)象之間耦合度最弱的一種關(guān)聯(lián)方式,是臨時(shí)性的關(guān)聯(lián)。在代碼中,某個(gè)類(lèi)的方法通過(guò)局部變量、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用來(lái)訪問(wèn)另一個(gè)類(lèi)(被依賴類(lèi))中的某些方法來(lái)完成一些職責(zé)。

在 UML 類(lèi)圖中,依賴關(guān)系使用帶箭頭的虛線來(lái)表示,箭頭從使用類(lèi)指向被依賴的類(lèi)。下圖所示是司機(jī)和汽車(chē)的關(guān)系圖,司機(jī)駕駛汽車(chē):

1627027117116_06依賴關(guān)系.png

5. 繼承關(guān)系

繼承關(guān)系是對(duì)象之間耦合度最大的一種關(guān)系,表示一般與特殊的關(guān)系,是父類(lèi)與子類(lèi)之間的關(guān)系,是一種繼承關(guān)系。

在 UML 類(lèi)圖中,泛化關(guān)系用帶空心三角箭頭的實(shí)線來(lái)表示,箭頭從子類(lèi)指向父類(lèi)。在代碼實(shí)現(xiàn)時(shí),使用面向?qū)ο蟮睦^承機(jī)制來(lái)實(shí)現(xiàn)泛化關(guān)系。例如,Student 類(lèi)和 Teacher 類(lèi)都是 Person 類(lèi)的子類(lèi),其類(lèi)圖如下圖所示:

1627027206789_繼承關(guān)系.png

6. 實(shí)現(xiàn)關(guān)系

實(shí)現(xiàn)關(guān)系是接口與實(shí)現(xiàn)類(lèi)之間的關(guān)系。在這種關(guān)系中,類(lèi)實(shí)現(xiàn)了接口,類(lèi)中的操作實(shí)現(xiàn)了接口中所聲明的所有的抽象操作。

在 UML 類(lèi)圖中,實(shí)現(xiàn)關(guān)系使用帶空心三角箭頭的虛線來(lái)表示,箭頭從實(shí)現(xiàn)類(lèi)指向接口。例如,汽車(chē)和船實(shí)現(xiàn)了交通工具,其類(lèi)圖如圖 9 所示。



猜你喜歡:

什么是Java語(yǔ)言 java是做什么的?

什么是JAVA常量?

Java swing是什么?有什么作用?

Java集合的分類(lèi)有哪些?

黑馬程序員java開(kāi)發(fā)培訓(xùn)課程

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!