UML類圖關(guān)系(泛化 、繼承启摄、實現(xiàn)稿壁、依賴、關(guān)聯(lián)歉备、聚合傅是、組合)
繼承
指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類蕾羊、父接口)的功能喧笔,并可以增加它自己的新功能的能力,繼承是類與類或者接口與接口之間最常見的關(guān)系龟再;在Java中此類關(guān)系通過關(guān)鍵字extends明確標(biāo)識书闸,在設(shè)計時一般沒有爭議性;
實現(xiàn)
指的是一個class類實現(xiàn)interface接口(可以是多個)的功能利凑;實現(xiàn)是類與接口之間最常見的關(guān)系浆劲;在Java中此類關(guān)系通過關(guān)鍵字implements明確標(biāo)識,在設(shè)計時一般沒有爭議性哀澈;
依賴
可以簡單的理解牌借,就是一個類A使用到了另一個類B,而這種使用關(guān)系是具有偶然性的割按、膨报、臨時性的、非常弱的适荣,但是B類的變化會影響到A现柠;比如某人要過河,需要借用一條船弛矛,此時人與船之間的關(guān)系就是依賴够吩;表現(xiàn)在代碼層面,為類B作為參數(shù)被類A在某個method方法中使用汪诉;
關(guān)聯(lián)
他體現(xiàn)的是兩個類废恋、或者類與接口之間語義級別的一種強(qiáng)依賴關(guān)系谈秫,比如我和我的朋友扒寄;這種關(guān)系比依賴更強(qiáng)鱼鼓、不存在依賴關(guān)系的偶然性、關(guān)系也不是臨時性的该编,一般是長期性的迄本,而且雙方的關(guān)系一般是平等的、關(guān)聯(lián)可以是單向课竣、雙向的嘉赎;表現(xiàn)在代碼層面,為被關(guān)聯(lián)類B以類屬性的形式出現(xiàn)在關(guān)聯(lián)類A中于樟,也可能是關(guān)聯(lián)類A引用了一個類型為被關(guān)聯(lián)類B的全局變量公条;
聚合
聚合是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是整體與部分迂曲、擁有的關(guān)系靶橱,即has-a的關(guān)系,此時整體與部分之間是可分離的路捧,他們可以具有各自的生命周期关霸,部分可以屬于多個整體對象,也可以為多個整體對象共享杰扫;比如計算機(jī)與CPU队寇、公司與員工的關(guān)系等;表現(xiàn)在代碼層面章姓,和關(guān)聯(lián)關(guān)系是一致的佳遣,只能從語義級別來區(qū)分;
組合
組合也是關(guān)聯(lián)關(guān)系的一種特例凡伊,他體現(xiàn)的是一種contains-a的關(guān)系零渐,這種關(guān)系比聚合更強(qiáng),也稱為強(qiáng)聚合窗声;他同樣體現(xiàn)整體與部分間的關(guān)系相恃,但此時整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束笨觅;比如你和你的大腦拦耐;表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的见剩,只能從語義級別來區(qū)分杀糯;
對于繼承、實現(xiàn)這兩種關(guān)系沒多少疑問苍苞,他們體現(xiàn)的是一種類與類固翰、或者類與接口間的縱向關(guān)系狼纬;其他的四者關(guān)系則體現(xiàn)的是類與類、或者類與接口間的引用骂际、橫向關(guān)系疗琉,是比較難區(qū)分的,有很多事物間的關(guān)系要想準(zhǔn)備定位是很難的歉铝,前面也提到盈简,這幾種關(guān)系都是語義級別的,所以從代碼層面并不能完全區(qū)分各種關(guān)系太示;
但總的來說柠贤,后幾種關(guān)系所表現(xiàn)的強(qiáng)弱程度依次為:組合>聚合>關(guān)聯(lián)>依賴;
聚合跟組合其實都屬于關(guān)聯(lián)