《軟件設計精要與模式 第2版》 - 書摘精要

(P15)

面向對象思想包括三個核心要素,即「封裝」(Encapsulation)、「繼承」(Inheritance)與「多態」(Polymorphism),它將面向對象技術推到了思想的境界;

(P17)

「封裝變化」須要與「抽象」相結合,遵循「面向接口編程」的思想,如此才能作到對擴展開放;

(P18)

「封裝變化」是設計模式的核心思想;

(P21)

抽象的類型,能夠由於實現的不一樣而體現爲不一樣的類型,從而執行不一樣的功能;

「多態」有機地將「封裝」、「繼承」與「抽象」結合起來:

—— 利用「封裝」的原理,定義了對象類型;
—— 經過「繼承」保證不一樣類型之間的關係;
—— 「抽象」則提供了對象多態的能力;

(P22)

「多態」保證了程序的靈活性,由於它將對象形態的決定權交給了調用者;

調用者能夠根據系統需求,建立不一樣類型的實例,只要該實例被統一抽象爲相同的父類型;

(P23)

「多態」決定了接口實現的可替代性,它使得擴展成爲可能;

對象的「封裝」、「繼承」與「多態」保證了對象的高內聚與低耦合,有利於軟件模塊的可複用,保證了程序的可擴展,這正是面向對象思想體如今軟件設計中的最大優點;

軟件設計須要經驗的積累,不過有時還得須要那麼一點靈感;

面向對象設計的原則是對面向對象思想的提煉,它比面向對象思想的核心要素更具可操做性,但與設計模式相比,卻又更加的抽象,是設計精神要義的抽象歸納;

(P24)

對象的高內聚與細粒度有利於對象的重用;

(P28)

「對擴展開放」的關鍵是「抽象」,而對象的多態則保證了這種擴展的開放性。開放原則首先意味着咱們能夠自由地增長功能,而不會影響原有系統。這就要求咱們可以經過繼承完成功能的擴展。其次,開放原則還意味着實現是可替換的。只有利用抽象,才能夠爲定義提供不一樣的實現,而後根據不一樣的需求實例化不一樣的實現子類;

(P29)

「開放封閉原則」還能夠統一塊兒來理解。因爲咱們對擴展實現了開放,纔可以保證對修改是封閉的。開放利用了對象的抽象,封閉則在必定程度上利用了封裝。最佳的作法仍然是要作到分離對象的變與不變,將對象不變的部分封裝起來,並遵循良好的設計原則以保障接口的穩定;至於對象中可能變的部分,則須要進行抽象,以創建鬆散的耦合關係;

(P31)

抽象屬於高層,細節屬於低層,低層依賴於高層,而不是高層依賴於低層;

「依賴倒置原則」與「面向接口編程」的思想不謀而合;

GOF 在《設計模式》一書中旗幟鮮明地提出了面向對象設計的首要原則,那就是「針對接口編程,而不是針對實現編程」;

(P34)

面向對象設計原則是面向對象思想的體現:

—— 「單一職責原則」與「接口隔離原則」體現了「封裝」的思想;
—— 「開放封閉原則」體現了對象的「封裝」與「多態」;
—— 「Liskov 替換原則」是對對象「繼承」的規範;
—— 「依賴倒置原則」是「多態」與「抽象」思想的體現;

(P35)

設計模式是「封裝變化」思想的最佳闡釋;

「抽象」沒有具體的實現,就表明了一種無限的可能性,使得擴展成爲可能;

(P36)

「繼承」的耦合度要強於「組合」(「合成」或「聚合」);

優先選擇「對象」的「組合」,而不是「繼承」,即「合成」/「聚合」複用與原則;

爲了進一步下降「組合」關係的耦合度,還應該遵循「依賴倒置原則」,對要組合的類進行「抽象」;

(P47)

一個外部具體對象的引入,必然會給一個模塊帶來與外部模塊之間的依賴;

(P49)

模塊與模塊間之因此產生依賴關係,正是由於有具體對象的存在;

使用硬編碼方式建立一個對象,必然會帶來對象之間的具體依賴;

(P53)

在 .NET 中,雖然能夠利用<section></section>對配置文件進行分節,但終究不夠直觀;

(P54)

實現「依賴注入」的前提是「面向接口編程」,而輔助的技術則是利用「反射技術」;

(P66)

「重構技術」涵蓋了軟件工程、面向對象設計、設計模式、單元測試等技術;

(P67)

「測試驅動開發」強調快速實現功能,再以「重構」改善代碼的結構;

(P73)

當一個對象承擔了過多的責任時,就有必要考慮對其進行職責劃分,除非該對象是一個用於協調對象關係的類;

「測試驅動開發」與「重構」密不可分。「測試驅動開發」是一種演進的設計方式,程序結構的設計根據測試用例的驅動,隨時可能會修改,此時咱們就須要學會利用「重構」的利器。在「重構」的時候,仍然不能放棄「測試驅動開發」,並利用「單元測試」工具保證程序的可靠性以及「重構」的正確性;

(P139)

「集合」是一個管理和組織數據對象的數據結構;

「集合對象」除了可以存儲數據外,還必須提供訪問其內部數據的行爲方式,這是一種遍歷機制;

「集合對象」擁有兩個職責:一是存儲內部數據;二是遍歷內部數據;

(P145)

.NET 框架中的全部集合均實現了 IEnumerable 接口,若是是泛型集合,則在實現了 IEnumerable 接口的同時,還實現了 IEnumerable<T> 接口;

(P156)

「面向接口編程」是面向對象編程思想中最重要的一個原則;

根據「封裝變化」的原理,對易於變化的部分進行抽象,定義爲接口(注:並不是語法意義上的接口,而是指公開給調用方的外部定義);

(P161)

「委託」能夠看作是模式中的慣用法 —— 「委託鏈」用在「觀察者模式」中,能夠簡化對被觀察者列表的操做;「委託鏈」還能夠用於「命令模式」,甚至於「職責鏈模式」中;

(P203)

在面向對象設計中,複用對象的方法除了「繼承」,還能夠採用「組合」;

(P345)

分層架構能夠達到以下目的:分散關注、鬆散耦合、邏輯複用和標準定義;

(P362)

在沒有 ORM 框架的狀況下,使用輔助類是一個比較好的策略,利用它來完成數據庫基本操做的封裝,能夠減小不少與數據庫操做有關的重複代碼,這體現了對象複用的原則;

(P364)

沒有「抽象」,就意味着程序是僵化難以擴展的;沒有「封裝」與「繼承」,就意味着程序沒法重用;

(P367)

應用 ORM 框架帶來的最直接好處就是,縮短了整個項目開發的週期;數據庫

相關文章
相關標籤/搜索