代碼整潔之道讀書筆記-第六章對象和數(shù)據(jù)結構

1、數(shù)據(jù)抽象
  我們平時在寫實體類的時候通常會把類的成員變量定義成private的,然后提供相應的get和set方法供外部調用來實現(xiàn)對該對象的屬性修改,而不是直接的操作成員變量。這種做法體現(xiàn)了java的封裝性,不想暴露內(nèi)部結構(實際上還是暴露了)。這種想法個人覺的和對外提供接口的想法有點類似,不需要暴露具體實現(xiàn),只需要提供必要的參數(shù),我就返回相應的結果。

隱藏實現(xiàn)并非只是在變量之間放上一個函數(shù)層那么簡單。隱藏實現(xiàn)關乎抽象!類并不簡單地用取值器和賦值器將其變量推向外間,而是暴露抽象接口,以便用戶無需了解數(shù)據(jù)的實現(xiàn)就能操作數(shù)據(jù)本體。

理解:模塊不應該了解它所操作對象的內(nèi)部情形。對象應該暴露行為,而不是數(shù)據(jù)。

2、數(shù)據(jù)、對象的反對稱性

對象把數(shù)據(jù)隱藏于抽象之后,暴露操作數(shù)據(jù)的函數(shù);數(shù)據(jù)結構暴露其數(shù)據(jù),沒有提供有意義的函數(shù)。

  過程式代碼便于在不改動既有數(shù)據(jù)結構的前提下添加新函數(shù)。面向對象代碼便于在不改動既有函數(shù)的前提下添加新類。
  反過來說:
  過程式代碼難以添加新數(shù)據(jù)結構,因為必須修改所有函數(shù)。面向對象代碼難以添加新函數(shù),因為必須修改所有類。
  所以,對于面向對象較難的事,對于過程式代碼卻比較容易,反之亦然!
3、得墨忒耳律
  規(guī)則:對象 O 的 M 方法,可以訪問/調用如下的:
    1. 對象 O 本身
    2. M 方法的傳入?yún)?shù)
    3. M 方法中創(chuàng)建或實例化的任意對象
    4. 對象 O 直接的組件對象
    5. 在M范圍內(nèi),可被O訪問的全局變量
  好處:
    ? 我們可以更改一個類,而無需因連鎖反應再去改許多其他的(類)。
    ? 我們可以改變調用的方法,而無需改變其他任何東西。
    ? 遵從LOD,讓測試更容易被構建。我們不必為了模擬而寫很多的’when’和各種return。
    ? 提高了封裝和抽象。
    ? 基本上,我們隱藏了“xx是如何工作的”。
    ? 讓代碼更少的耦合。主叫方法只耦合一個對象,而并非所有的內(nèi)部依賴。
    ? 它通常會更好地模擬現(xiàn)實世界。想想錢包與付款的那個比喻。
(ImportNew:http://www.importnew.com/10501.html
  law of demeter, LKP最少知道原則:一個對象應當對其他對象又盡可能少的了解,不和陌生人說話。也即是方法不應該調用由任何函數(shù)返回對象的方法。
4、數(shù)據(jù)傳送對象
  最為精煉的數(shù)據(jù)結構,是一個只有公共變量、沒有函數(shù)的類。這種數(shù)據(jù)結構有時被稱為數(shù)據(jù)傳送對象,或DTO。

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

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

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