《面向对象的思考过程(原书第4版)》一1.11 组合
本節(jié)書摘來(lái)自華章出版社《面向?qū)ο蟮乃伎歼^(guò)程(原書第4版)》一書中的第1章,第1.11節(jié),[美] 馬特·魏斯費(fèi)爾德(Matt Weisfeld) 著黃博文 譯更多章節(jié)內(nèi)容可以訪問(wèn)云棲社區(qū)“華章計(jì)算機(jī)”公眾號(hào)查看。
1.11 組合
對(duì)象中包含其他對(duì)象非常自然。比如電視機(jī)包含開(kāi)關(guān)和顯示屏。計(jì)算機(jī)包含顯卡、鍵盤和光驅(qū)。可以將計(jì)算機(jī)自身看成一個(gè)對(duì)象,而光驅(qū)也是一個(gè)有效的對(duì)象。
事實(shí)上,你可以打開(kāi)計(jì)算機(jī)把光驅(qū)取下來(lái)放到你手上。計(jì)算機(jī)和光驅(qū)都可以看作對(duì)象。只是計(jì)算機(jī)包含其他的對(duì)象(譬如光驅(qū))。
使用其他對(duì)象來(lái)構(gòu)建或結(jié)合成新的對(duì)象,這種方式就是組合。
1.11.1 抽象
和繼承一樣,組合也是一種構(gòu)建對(duì)象的機(jī)制。事實(shí)上,我想說(shuō)只有兩種方式來(lái)使用其他類構(gòu)建新類,這兩種方式就是繼承和組合。之前已經(jīng)看到了,繼承允許類繼承另一個(gè)類。我們可以把屬性和行為抽象到通用類中。例如,狗和貓都是哺乳動(dòng)物,因?yàn)楣肥?#xff08;is-a)哺乳動(dòng)物,貓也是(is-a)哺乳動(dòng)物。而使用組合,我們也可以把類嵌入其他類中來(lái)構(gòu)造新類。
我們可以拿車和引擎之間的關(guān)系來(lái)舉例。把引擎從車中分離出來(lái)是明顯可行的。我們可以單獨(dú)構(gòu)建引擎,把它用到各種車上,更別提還有其他優(yōu)勢(shì)。但我們不能說(shuō)引擎是(is-a)一輛車。順口說(shuō)出來(lái)我們就覺(jué)得不對(duì)(因?yàn)槲覀冊(cè)跒檎鎸?shí)世界的系統(tǒng)建模,這正是我們想要的效果)。我們最好用has-a術(shù)語(yǔ)來(lái)描述組合關(guān)系。車有(has-a)引擎。
1.11.2 has-a關(guān)系
我們之前已經(jīng)討論過(guò)了繼承關(guān)系是is-a關(guān)系的原因,而組合關(guān)系可以稱為has-a關(guān)系。我們可以使用上一小節(jié)中的例子,電視有(has-a)開(kāi)關(guān)和顯示屏。電視顯而易見(jiàn)不是一個(gè)開(kāi)關(guān),所以兩者沒(méi)有繼承關(guān)系。同樣,計(jì)算機(jī)有(has-a)顯卡,有(has-a)鍵盤,有(has-a)光驅(qū)。第7章深入講解繼承和組合這兩個(gè)主題以及相互之間的關(guān)系。
總結(jié)
以上是生活随笔為你收集整理的《面向对象的思考过程(原书第4版)》一1.11 组合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《Java线程与并发编程实践》—— 2.
- 下一篇: 《移动App测试的22条军规》—第1章1