第一講
課程目標
理解松耦合設計思想
掌握面向對象設計原則
掌握重構技法改善設計
掌握GOF核心設計模式
GOF設計模式
歷史性著作《設計模式:可復用面向對象軟件的基礎》,介紹了23種設計模式。
通常看過這本書的人都知道書的正標題,但是少有人會在意輸的副標題:可復用面向對象軟件的基礎。可復用是設計模式的目標,面向對象是一種技術手法。
通常所說的設計模式隱含是面向對象設計模式,但是不等于說設計模式就是面向對象設計模式。
從面向對象談起
面向對象隱含著兩種思維模型,底層思維和抽象思維。
底層思維是指:向下,如何把握機器底層,從微觀理解對象構造。如語言構造、編譯轉換(李老師在這里吐槽c++難學的一點就是c++的編譯器在背后會做很多工作),內存模型,運行時機制。
抽象思維是指:向上,如何將我們的周圍世界抽象為代碼程序。如面向對象,組件封裝,設計模式,架構模式。
深入理解面向對象
向下:深入理解三大main相對象機制
封裝,隱藏內部實現
繼承,復用現有代碼
多態,改寫對象行為
向上:深刻把握面向對象機制所帶來的抽象意義,理解如何使用這些機制來表達現實世界,掌握什么是“好的面向對象設計”。
個人感觸是多態的功能比繼承來的更為強大,在代碼解耦和、復用方面都更強大。同時,封裝、繼承、多態是面向對象的核心,要時刻記住這三點,面向對象設計模式也是圍繞這三點展開的。
軟件復雜的根本原因
變
軟件復雜的根本原因是變,如果加上一個修定,就是頻繁的變,特別容易就變。很多外行人會覺得寫代碼的人就是坐在電腦前,敲敲鍵盤就能解決問題,覺得很簡答啊、沒什么難的,但其實這是個誤解。寫代碼很難,寫好代碼、沒有錯誤的代碼,是一種極高的技藝,的確不是那么簡單的。
如何解決復雜性?
分解:人們面對復雜性有一個常見的做法,即分而治之