豆瓣:https://book.douban.com/subject/1477390/
《Code Complete》2d ed,CC2
-
軟件開發技術的發展,先是直接基於語句來思考編程問題,然後發展到基於子程序來思考,到現在是基於類來思考。
-
類是由一組數據和子程序構成的集合,這些數據和子程序共同擁有一組內聚的、明確定義的職責。
抽象數據類型
- 抽象數據類型(ADT,abstract data type)是指一些數據以及對這些數據所進行的操作的集合。
-
可以隱藏實現細節。
-
改動不會影響到整個程序。
-
讓接口能提供更多信息。
-
更容易提高性能。
-
讓程序的正確性更顯而易見。
-
程序更具自我說明性。
-
無需在程序內到處傳遞數據。
-
可以基於高層抽象操作實體,不用關注細節。
良好的類接口
- 類的接口爲隱藏在其後的具體實現提供了一種抽象。
-
如果類的接口不能展現出一種一致的抽象,那該類的內聚性就很弱。
-
接口不應只基於語義表達而設計,應基於可編程設計,即編譯器能識別並強制實施接口的意圖。
良好的封裝
- 儘可能限制類和成員的可訪問性。
-
不要公開暴露成員數據。
-
避免把私用的實現細節放入類的接口中。
-
不要對類的使用者做出任何假設。
-
避免使用友元類。
-
警惕從語義上破壞封裝性。有時上帝視角是壞事。
有關設計和實現的問題
- 包含(has a)纔是面向對象編程中的主力技術,而非繼承。
-
類的數據成員數量最好不要超過 7 個。
-
繼承適用於“是一個……”(is a)的關係。
-
繼承遵循里氏替換原則。
-
避免讓繼承體系過深。
創建類的原因
- 爲現實世界中的對象建模。
-
爲抽象的對象建模。
-
降低複雜度。
-
隔離複雜度。
-
隱藏實現細節。
-
限制變動的影響範圍。
-
隱藏全局數據。
-
讓參數傳遞更順暢。
-
建立中心控制點。
-
讓代碼易於重用。
2019-12-28 - 廖傑良