設(shè)計(jì)原則(二)——類(lèi)與類(lèi)之間的關(guān)系
類(lèi)與類(lèi)之間的六種關(guān)系:
泛化(Generalization)、實(shí)現(xiàn)(Realization)、組合(Composition)、聚合(Aggregation)、關(guān)聯(lián)(Association)、依賴(Dependency)
UML中常用符號(hào)含義:
????????+ public
????????- private
????????# protected

一、泛化(繼承)
????????繼承指的是一個(gè)類(lèi)(稱(chēng)為子類(lèi)、子接口)繼承另外的一個(gè)類(lèi)(稱(chēng)為父類(lèi)、父接口)的功能,并可以增加它自己的新功能的能力。在Java中繼承關(guān)系通過(guò)關(guān)鍵字extends明確標(biāo)識(shí),C#中通過(guò):來(lái)標(biāo)識(shí)繼承。在UML類(lèi)圖設(shè)計(jì)中,繼承用一條帶空心三角箭頭的實(shí)線表示,從子類(lèi)指向父類(lèi),或者子接口指向父接口。
????????UML類(lèi)圖表示

二、實(shí)現(xiàn)
????????實(shí)現(xiàn)指的是一個(gè)class類(lèi)實(shí)現(xiàn)interface接口(可以是多個(gè))的功能,實(shí)現(xiàn)是類(lèi)與接口之間最常見(jiàn)的關(guān)系。在Java中此類(lèi)關(guān)系通過(guò)關(guān)鍵字implements明確標(biāo)識(shí),C#中使用:來(lái)標(biāo)識(shí),在UML類(lèi)圖設(shè)計(jì)中,實(shí)現(xiàn)用一條帶空心三角箭頭的虛線表示,從類(lèi)指向?qū)崿F(xiàn)的接口。
????????UML類(lèi)圖表示

三、依賴
????????類(lèi)A的實(shí)現(xiàn)需要引用類(lèi)B,這就是依賴,這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,而B(niǎo)類(lèi)的變化會(huì)影響到A,則A與B存在依賴關(guān)系,依賴關(guān)系是弱的關(guān)聯(lián)關(guān)系。例如:人依賴計(jì)算機(jī)去做軟件開(kāi)發(fā)。在UML類(lèi)圖設(shè)計(jì)中,依賴關(guān)系用由類(lèi)A指向類(lèi)B的帶箭頭虛線表示。
????????UML類(lèi)圖表示

四、關(guān)聯(lián)
????????關(guān)聯(lián)體現(xiàn)的是兩個(gè)類(lèi)之間語(yǔ)義級(jí)別的一種 強(qiáng)依賴關(guān)系,比如我和我的朋友,這種關(guān)系比依賴更強(qiáng)、不存在依賴關(guān)系的偶然性、關(guān)系也不是臨時(shí)性的,一般是長(zhǎng)期性的,而且雙方的關(guān)系一般是平等的。
????????關(guān)聯(lián)可以是單向、雙向的。表現(xiàn)在代碼層面,為被關(guān)聯(lián)類(lèi)B以類(lèi)的屬性形式出現(xiàn)在關(guān)聯(lián)類(lèi)A中,也可能是關(guān)聯(lián)類(lèi)A引用了一個(gè)類(lèi)型為被關(guān)聯(lián)類(lèi)B的全局變量。在UML類(lèi)圖設(shè)計(jì)中,關(guān)聯(lián)關(guān)系用由關(guān)聯(lián)類(lèi)A指向被關(guān)聯(lián)類(lèi)B的帶箭頭實(shí)線表示。
????????UML類(lèi)圖表示

五、聚合
????????聚合是關(guān)聯(lián)關(guān)系的一種特例,它體現(xiàn)的是整體與部分的關(guān)系,即 has-a 的關(guān)系。此時(shí)整體與部分之間是可分離的,它們可以具有各自的生命周期,部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享。此時(shí)整體與部分之間是可分離的,即沒(méi)有了整體,局部也可單獨(dú)存在。比如計(jì)算機(jī)與CPU、公司與員工的關(guān)系等。表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分。在UML類(lèi)圖設(shè)計(jì)中,聚合關(guān)系以空心菱形加實(shí)線表示(菱形指向整體)
????????UML類(lèi)圖表示
? ? ? ??

六、組合
????????組合也是關(guān)聯(lián)關(guān)系的一種特例,這種關(guān)系比聚合更強(qiáng),是一種contains-a的關(guān)系,部分不能脫離整體存在。這是一種比聚合更強(qiáng)的關(guān)系,所以也稱(chēng)為強(qiáng)聚合。
????????整體的生命周期即為組成部分的生命周期。它同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束,比如人和人的大腦。表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分。在UML類(lèi)圖設(shè)計(jì)中,組合關(guān)系以實(shí)心菱形加實(shí)線表示。
????????UML類(lèi)圖表示

全圖 看你掌握了沒(méi)~

————————————————
參考文章:https://blog.csdn.net/weixin_43819566/article/details/111795638