記得在當(dāng)時(shí)學(xué)習(xí)uml總是不好分清聚合與組合的關(guān)系,找工作時(shí)特地復(fù)習(xí)了這塊的內(nèi)容,結(jié)果正巧被面試官問(wèn)道,這兩天又在搞這塊的內(nèi)容,對(duì)聚合與組合有了更清楚的了解:
聚合:表示兩個(gè)對(duì)象之間是整體和部分的弱關(guān)系,部分的生命周期可以超越整體。如電腦和鼠標(biāo),就可以用一下圖形表示:
組合:表示兩個(gè)對(duì)象之間是整體和部分的
強(qiáng)關(guān)系,部分的生命周期不能超越整體,或者說(shuō)不能脫離整體而存在。組合關(guān)系的“部分”,是不能在整體之間進(jìn)行共享的。如人和眼睛的關(guān)系:

不過(guò),如果你要說(shuō),眼睛可以移植,是不是說(shuō)可以脫離人而存在,它們就不是組合關(guān)系了?其實(shí),UML中對(duì)象的關(guān)系都是在相應(yīng)的軟件環(huán)境或?qū)嶋H場(chǎng)景下定義的,這里區(qū)別聚合和組合的關(guān)系,關(guān)鍵還是在于它們之中整體和部分的關(guān)系強(qiáng)、弱,以及它們之間的依附關(guān)系。如果剛才說(shuō)眼睛可以移植給別人,那你也可以把它認(rèn)為是聚合,這都要結(jié)合實(shí)際場(chǎng)景來(lái)說(shuō)明。
另外兩個(gè)比較重要的關(guān)系是關(guān)聯(lián)和依賴(lài):
關(guān)聯(lián):簡(jiǎn)單的可以認(rèn)為,如果一個(gè)類(lèi)作為了另外一個(gè)類(lèi)的屬性,那一定是關(guān)聯(lián)關(guān)系。但你要知道,
聚合是一種特殊的關(guān)聯(lián),而組合又是一種特殊的聚合。一般的關(guān)聯(lián)我們認(rèn)為是平級(jí)的、無(wú)整體部分關(guān)系的,如朋友關(guān)系。
依賴(lài):對(duì)象之間的臨時(shí)關(guān)系,臨時(shí)性體現(xiàn)在不超越方法的周期。簡(jiǎn)單的說(shuō),在方法使用到的,如參數(shù)類(lèi),就一定是依賴(lài)關(guān)系。
最后想說(shuō)一句,實(shí)際工作中,我并沒(méi)有發(fā)現(xiàn)區(qū)分這四種關(guān)系有多么大的用處,也許自己還沒(méi)有碰到,只是覺(jué)得可能每個(gè)學(xué)習(xí)它的同學(xué)總想把它搞清楚,但實(shí)際工作中作用并不明顯。