《数据结构与抽象:Java语言描述(原书第4版)》一1.4 像使用自动贩卖机一样使用ADT...
本節(jié)書摘來華章計(jì)算機(jī)《數(shù)據(jù)結(jié)構(gòu)與抽象:Java語(yǔ)言描述(原書第4版)》一書中的第1章 ,第1.4節(jié),[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學(xué) 新英格蘭理工學(xué)院 辛運(yùn)幃 饒一梅 譯 更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“華章計(jì)算機(jī)”公眾號(hào)查看。
1.4 像使用自動(dòng)販賣機(jī)一樣使用ADT
假定你站在一臺(tái)自動(dòng)販賣機(jī)前,如圖1-3所顯示,或者更高級(jí)的一臺(tái),休息一下,然后從販賣機(jī)中買些東西!
當(dāng)站在自動(dòng)販賣機(jī)前時(shí),會(huì)看到它的界面。投入硬幣并且按下按鈕,就能購(gòu)物了。下面是對(duì)自動(dòng)販賣機(jī)的觀察結(jié)果:
- 你僅能執(zhí)行機(jī)器的界面提供給你的特定任務(wù)。
- 你必須理解這些任務(wù)——即你必須知道買一瓶汽水應(yīng)該怎么辦。
- 你不能訪問機(jī)器內(nèi)部,因?yàn)殒i著的外殼封裝了它。
- 即使你不知道內(nèi)部將發(fā)生什么,但你可以使用機(jī)器。
- 如果有人用改進(jìn)版替換了機(jī)器內(nèi)部的機(jī)制但沒改變界面,你仍然能用同樣的方式使用機(jī)器。
與自動(dòng)販賣機(jī)的用戶一樣,你就像本章前面見過的ADT包的客戶。剛剛說的對(duì)自動(dòng)販賣機(jī)用戶的觀察,類似于對(duì)包的客戶的觀察: - 客戶僅能執(zhí)行ADT包說明的操作。這些操作常常聲明在一個(gè)Java接口中。
- 客戶必須遵守ADT包提供的操作規(guī)范。即客戶的程序員必須理解如何使用這些操作。
- 客戶不使用ADT操作就不能訪問包中的數(shù)據(jù)。封裝原理將數(shù)據(jù)表示隱藏在ADT的內(nèi)部。
客戶可以使用包,即使程序員不知道數(shù)據(jù)是如何存儲(chǔ)的。 - 如果有人改變了包操作的實(shí)現(xiàn),只要界面沒有改變,客戶仍然能用同樣的方式使用包。
在前一節(jié)的示例中,每個(gè)包都是實(shí)現(xiàn)ADT包的類的一個(gè)實(shí)例。即,每個(gè)包是一個(gè)對(duì)象,它的行為是ADT包的操作。你可以把每個(gè)這樣的對(duì)象看作我們剛描述的自動(dòng)販賣機(jī)。每個(gè)對(duì)象封裝了包的數(shù)據(jù)和操作,就像自動(dòng)販賣機(jī)封裝了它的產(chǎn)品(汽水)和輸送系統(tǒng)一樣。
有些ADT操作有輸入,類似于你投入自動(dòng)販賣機(jī)中的硬幣。有些ADT操作有輸出,類似于自動(dòng)販賣機(jī)提供的找零、汽水、消息及提示燈。
現(xiàn)在假定你是自動(dòng)販賣機(jī)面板或界面的設(shè)計(jì)人員。機(jī)器能做什么?在使用機(jī)器時(shí)人應(yīng)該做什么?考慮在機(jī)器內(nèi)如何保存及輸送汽水瓶,對(duì)你是否有幫助?我們強(qiáng)調(diào),你應(yīng)該忽略這些方面,而把注意力完全集中于人如何使用機(jī)器上——即你要關(guān)注界面的設(shè)計(jì)。忽略無(wú)關(guān)細(xì)節(jié)能使你的任務(wù)更簡(jiǎn)單,并提高設(shè)計(jì)質(zhì)量。
我們記得,作為設(shè)計(jì)原則,抽象要求你關(guān)注于什么而不是如何。當(dāng)你設(shè)計(jì)一個(gè)ADT并最終設(shè)計(jì)一個(gè)類時(shí),使用數(shù)據(jù)抽象將關(guān)注焦點(diǎn)集中在你想對(duì)數(shù)據(jù)做什么,而不必?fù)?dān)心如何完成這些任務(wù)。本章開頭,當(dāng)設(shè)計(jì)ADT包時(shí)我們練習(xí)了數(shù)據(jù)抽象。當(dāng)我們選擇包應(yīng)該有的方法時(shí),我們沒有考慮如何表示包。相反我們集中考慮每個(gè)方法應(yīng)該做什么。
最后,我們編寫詳細(xì)說明該方法的Java接口。然后編寫一個(gè)使用包的客戶程序,但仍然不知道它的實(shí)現(xiàn)。如果有人為我們編寫了實(shí)現(xiàn),我們的程序大概能正確執(zhí)行。如果其他人給我們一個(gè)更好的實(shí)現(xiàn)版本,我們不需要修改已經(jīng)編寫的客戶程序仍能繼續(xù)使用。客戶的這個(gè)特征是抽象的主要優(yōu)勢(shì)。
總結(jié)
以上是生活随笔為你收集整理的《数据结构与抽象:Java语言描述(原书第4版)》一1.4 像使用自动贩卖机一样使用ADT...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: doc2vec 文档向量
- 下一篇: 图灵学院Java架构师五期笔记