最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Clean Code 無瑕的程式碼 第6章 物件及資料結(jié)構(gòu)

2021-06-16 23:16 作者:tkchenhaha  | 我要投稿

? ? ?第六章主題是資料抽象化,作者講述結(jié)構(gòu)化程式與物件導向程式的差別,還有德摩特爾法則(The Law of Demeter)。

資料抽象化

比較6-1 與6-2 ,6-3與6-4 可知具體與抽象寫法的差別,6-2與6-4有用到 interface

抽象化可以隱藏資料的細節(jié),使用者在不知道實體運算,能夠操縱資料的本質(zhì)。

6-1? 具體的座標點

public class Point{

? ? public double x;

? ? public double y;

}

6-2? 抽象的座標點

public interface Point{

? ? double getX();

? ? double getY();

? ? void setCartesian(double x, double y);

? ? double getR();

? ? double getTheta();

? ? void setPolar(double r, double theta);

}

6-3? 具體化的交通工具類別

FuelTankCapacityInGallons(){

? ? double getGallonsOfGasoline();

}

6-4? 抽象化的交通工具類別

public interface Vehicle{

? ? double getPercentFuelRemaining();

}

初次看一定覺得??????,參考這篇文章了解interface的好處,就能夠理解資料抽象化的好處。

關(guān)於interface的好處 ?

維基百科

抽象資料型別?

實現(xiàn)於程式時,抽象資料型別只顯現(xiàn)出其介面,並將實作加以隱藏。使用者只需關(guān)心它的介面,而不是如何實作。未來可以改變實作的方式。

資料/物件的反對稱性

物件與資料之間是對立且互補。

物件將資料隱藏在抽象層,將函式暴露在外。

資料結(jié)構(gòu)直接將資料暴露在外,沒有提供存取函數(shù)。

看懂6-5與6-6的範例,再假設遇到兩種情況就知道作者想表達的內(nèi)容

6-5是「結(jié)構(gòu)化程式設計」的寫法,資料結(jié)構(gòu)與函數(shù)分開。

6-6是「物件導向」的寫法,每個物件有資料與函數(shù),資料與函數(shù)在一起。

第一種情況是新增計算周長的函數(shù)

第二種情況是新增一個圖形

6-5與6-6的範例為了教學方便全部程式寫在一起,實際上有條理的程式都會每個class一的檔案。判斷程式寫得好不好關(guān)鍵在於有變化的時候,舊有程式會改動多少?

看懂程式之後可知

結(jié)構(gòu)化程式設計有利新增函數(shù),不利新增物件。

物件導向程式設計有利新增物件,不利新增函數(shù)。

德摩特爾法則(The Law of Demeter)

只和朋友說話,不與陌生人聊天。

一個類別C內(nèi)的方法f,應該只能呼叫以下事項的方法

  • C

  • 任何由f所產(chǎn)生的物件

  • 任何當做參數(shù)傳遞給f的物件

  • C類別裡實體變數(shù)所持有的物件

讀者可再參考王洪亮先生的著作《我的程式碼會說話》4.2.6 德摩特爾法則

德摩特爾法則又叫最小知識原則,「一個物件對另一個物件內(nèi)部了解越少越好」。

類別A可以訪問相關(guān)的朋友類別B,不可以透過類別B訪問類別B的朋友類別C。

德摩特爾法則的優(yōu)點可以降低耦合性益於維護擴展,付出的代價是會增加許多中間類別。

火車事故

final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();

作者反對一長串相連的程式呼叫像火車事故。

混合體

作者建議不要寫成四不像,物件導向就完全物件導向,資料結(jié)構(gòu)就完全資料結(jié)構(gòu)。

隱藏結(jié)構(gòu)

這部份看得不是很懂?感覺像是介紹要取得絕對路徑又符合德摩特爾法則(The Law of Demeter)的寫法。

資料傳輸物件 (Data Transfer Objects, DTO)

類別中只有公共變數(shù)沒有函數(shù),常用於資料庫溝通將資料庫內(nèi)的資料轉(zhuǎn)為應用程式的物件或解析socket傳來的訊息。

6-7的範例bean只是讓物件導向愛好者看了比較開心。

活動記錄

特殊的DTO卻有擁有save 與 find的方法,通?;顒佑涗浭菑馁Y料庫表格或資料來源直接轉(zhuǎn)換而來。

總結(jié)

針對問題的特性決定採用結(jié)構(gòu)化程式設計或是物件導向程式設計,動作行為常變化要採用結(jié)構(gòu)化程式設計,資料型態(tài)常變化要採用物件導向程式設計。



Clean Code 無瑕的程式碼 第6章 物件及資料結(jié)構(gòu)的評論 (共 條)

分享到微博請遵守國家法律
米易县| 抚顺市| 许昌县| 磐安县| 鄄城县| 长丰县| 九寨沟县| 自治县| 许昌县| 丰台区| 虞城县| 胶南市| 鹤壁市| 民权县| 津南区| 安徽省| 沧源| 砚山县| 达孜县| 蓝山县| 宁陵县| 贵德县| 息烽县| 三河市| 博客| 湄潭县| 日喀则市| 孟津县| 新民市| 永济市| 东乌珠穆沁旗| 兰州市| 元朗区| 宁化县| 靖远县| 新兴县| 泽普县| 綦江县| 吉安市| 三明市| 呼和浩特市|