1.3 實現(xiàn)方案的隱藏

為方便后面的討論,讓我們先對這一領(lǐng)域的從業(yè)人員作一下分類。從根本上說,大致有兩方面的人員涉足面向?qū)ο蟮木幊蹋骸邦悇?chuàng)建者”(創(chuàng)建新數(shù)據(jù)類型的人)以及“客戶程序員”(在自己的應用程序中采用現(xiàn)成數(shù)據(jù)類型的人;注釋④)。對客戶程序員來講,最主要的目標就是收集一個充斥著各種類的編程“工具箱”,以便快速開發(fā)符合自己要求的應用。而對類創(chuàng)建者來說,他們的目標則是從頭構(gòu)建一個類,只向客戶程序員開放有必要開放的東西(接口),其他所有細節(jié)都隱藏起來。為什么要這樣做?隱藏之后,客戶程序員就不能接觸和改變那些細節(jié),所以原創(chuàng)者不用擔心自己的作品會受到非法修改,可確保它們不會對其他人造成影響。

④:感謝我的朋友Scott Meyers,是他幫我起了這個名字。

“接口”(Interface)規(guī)定了可對一個特定的對象發(fā)出哪些請求。然而,必須在某個地方存在著一些代碼,以便滿足這些請求。這些代碼與那些隱藏起來的數(shù)據(jù)便叫作“隱藏的實現(xiàn)”。站在程式化程序編寫(Procedural Programming)的角度,整個問題并不顯得復雜。一種類型含有與每種可能的請求關(guān)聯(lián)起來的函數(shù)。一旦向?qū)ο蟀l(fā)出一個特定的請求,就會調(diào)用那個函數(shù)。我們通常將這個過程總結(jié)為向?qū)ο蟆鞍l(fā)送一條消息”(提出一個請求)。對象的職責就是決定如何對這條消息作出反應(執(zhí)行相應的代碼)。

對于任何關(guān)系,重要一點是讓牽連到的所有成員都遵守相同的規(guī)則。創(chuàng)建一個庫時,相當于同客戶程序員建立了一種關(guān)系。對方也是程序員,但他們的目標是組合出一個特定的應用(程序),或者用您的庫構(gòu)建一個更大的庫。

若任何人都能使用一個類的所有成員,那么客戶程序員可對那個類做任何事情,沒有辦法強制他們遵守任何約束。即便非常不愿客戶程序員直接操作類內(nèi)包含的一些成員,但倘若未進行訪問控制,就沒有辦法阻止這一情況的發(fā)生——所有東西都會暴露無遺。

有兩方面的原因促使我們控制對成員的訪問。第一個原因是防止程序員接觸他們不該接觸的東西——通常是內(nèi)部數(shù)據(jù)類型的設(shè)計思想。若只是為了解決特定的問題,用戶只需操作接口即可,毋需明白這些信息。我們向用戶提供的實際是一種服務(wù),因為他們很容易就可看出哪些對自己非常重要,以及哪些可忽略不計。

進行訪問控制的第二個原因是允許庫設(shè)計人員修改內(nèi)部結(jié)構(gòu),不用擔心它會對客戶程序員造成什么影響。例如,我們最開始可能設(shè)計了一個形式簡單的類,以便簡化開發(fā)。以后又決定進行改寫,使其更快地運行。若接口與實現(xiàn)方法早已隔離開,并分別受到保護,就可放心做到這一點,只要求用戶重新鏈接一下即可。

Java采用三個顯式(明確)關(guān)鍵字以及一個隱式(暗示)關(guān)鍵字來設(shè)置類邊界:public,private,protected以及暗示性的friendly。若未明確指定其他關(guān)鍵字,則默認為后者。這些關(guān)鍵字的使用和含義都是相當直觀的,它們決定了誰能使用后續(xù)的定義內(nèi)容?!皃ublic”(公共)意味著后續(xù)的定義任何人均可使用。而在另一方面,“private”(私有)意味著除您自己、類型的創(chuàng)建者以及那個類型的內(nèi)部函數(shù)成員,其他任何人都不能訪問后續(xù)的定義信息。private在您與客戶程序員之間豎起了一堵墻。若有人試圖訪問私有成員,就會得到一個編譯期錯誤?!癴riendly”(友好的)涉及“包裝”或“封裝”(Package)的概念——即Java用來構(gòu)建庫的方法。若某樣東西是“友好的”,意味著它只能在這個包裝的范圍內(nèi)使用(所以這一訪問級別有時也叫作“包裝訪問”)?!皃rotected”(受保護的)與“private”相似,只是一個繼承的類可訪問受保護的成員,但不能訪問私有成員。繼承的問題不久就要談到。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,533評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,637評論 18 399
  • 第二卷: (四十三)毋以短攻短,毋以頑濟頑。 原文: “人之短處,要曲為彌逢,如暴而揚之,是以短攻短;人有頑固,要...
    愛文字的小藥師閱讀 1,232評論 4 12
  • 說謊的都是騙子, 相信的都是傻子。 為什么那么多人, 還是要把自己變成瘋子? 很多事都是命中注定, 很多愛都是飛蛾...
    琪琪love閱讀 290評論 0 1

友情鏈接更多精彩內(nèi)容