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