SCJP認證 第二章 面向對象 2.1 封裝

目標:

5.1 編寫代碼,實現類中的緊峯裝、鬆耦合和高內聚,並描述這樣做的優點。

 

假設你爲某個類編寫了代碼,而公司中許多其他程序員編寫的代碼都是用這個類。後來如果你不喜歡該類的運作方式,因爲他的一些實例變量被(其他程序員在他們的代碼中) 設置成一些沒有預料到的值。他們的代碼使你的代碼出現錯誤(不要緊張,這僅僅是個假設)。型號它是個Java程序,因此你應當能夠發佈這個類的一個新版本,而其他程序員能夠在他們的程序中替換該類,而不必修改任何代碼。

 

在實現代碼中進行修改,而不中斷使用改代碼的其他人的代碼的能力,是封裝的主要優點。我們希望將實現細節隱藏在公共程序設計接口的後面。這裏所說的接口是指爲其他代碼調用提東一套可訪問的方法——換句話說,就是代碼的API。通過隱藏實現細節,你能夠改寫你的方法代碼(也學還可以修改類使用變量的方式),而不必要求對調用修改後的方法的代碼進行修改。

如果需要可維護性、靈活性和可擴展性(當然,我們確實需要這些) ,則設計時必須包含封裝。該如何實現呢?

  • 保護實例變量(使用訪問修飾符,通常是private) 。
  • 建立public訪問器方法,強制調用代碼使用這些方法二不是之間訪問實例變量。
  • 對於方法,使用JavaBeans命名規則set<Property >和get<Property>。

 如圖演示了封裝強制代碼的調用程序通過方法二不是直接訪問變量這一思想。

 圖待定

我們將訪問方法稱作getter(讀取器) 和setter(設置器),但有些人喜歡擬人化術語accessor(訪問器)和mutator(變化器)(就個人而言,我們不喜歡“變化”這樣的字眼)。無論怎麼樣稱呼,他們都是其他程序員訪問視力變量是必須使用的方法。它們看似簡單,你很可能會一直像下面這樣使用它們:

 

考試注意事項:

 要注意那些似乎是在訪問方法的行爲的代碼,而問題實際上是沒有封裝。請看下面的例子,看能否找出問題:

 

現在考慮如下問題:right的值會總是left值的三分之一嗎?答案似乎是肯定的,但於要注意,Foo類的用戶不需要使用setLeft()方法!它們能夠輕易地直接訪問視力變量,並將它們修改成任意的int值。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章