(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 框架帶來的最直接好處就是,縮短了整個項目開發的周期;
新聞熱點
疑難解答