設計模式主要是一種松耦合設計思想
每一種設計模式,其實是針對某個重複出現的問題,提出的解決方案
在程式設計過程中,向下是底層思維,向上是抽象思維
在程式設計過程中,向下是底層思維,向上是抽象思維
1.底層思維:
語言構造、編譯轉換、記憶體模型、執行時機制
2.抽象思維
物件導向、元件封裝、設計模式、架構模式
對於問題,人們常用兩種解決方法:
1.分解
將問題分解成乙個乙個的步驟
建立乙個類a類b
如果類c需要使用類a的資訊,就包含類a類b作為成員
如果類c需要列印類a的資訊,就在類c中撰寫列印類a類b的函式
2.抽象
由於不能掌握全部的複雜物件,選擇忽視它的非本質細節,而去處理泛化和理想化的模型
類c並不知道需要為哪個類服務,需要它選擇為類a類b的基類服務
類a類b各自實現功能,可以通過虛函式去呼叫
如果類c需要列印類a,就通過虛函式,動態呼叫類a的列印函式;
如果類c需要列印類a,就通過虛函式,動態呼叫類b的列印函式;
軟體設計的目標是:復用
在**不出現變化的時候,設計模式的優勢看不出來,而一旦出現變化,好的設計模式的作用就體現出來了。
物件導向的最大優勢是:抵禦變化
重新認識物件導向:
1、巨集觀角度。隔離變化
2、微觀角度(具體實現角度)。各個部分各司其職,完成各自的功能。
3、物件是什麼?
從語言實現角度,物件就是**和資料的集合
從規格層面,物件是一系列可被使用的公共介面
從概念角度,物件是擁有責任的抽象
物件導向設計模型的8大原則
1.依賴倒置原則(dip)
高層模組(穩定)不應該依賴於低層模組(變化),二者都依賴於抽象(穩定)
抽象(穩定)不應該依賴於實現細節(變化),實現細節應該依賴於抽象(穩定)
穩定不能依賴變化
2.開放封閉原則(ocp)
對擴充套件開放,對更改封閉
類模組應該是可擴充套件的,但不可修改
(對於「變化」,用「增加」去應對)
3.單一職責原則(srp)
乙個類應該僅有乙個引起它變化的原因
(變化的方向隱含類的責任)
4.liskov替換原則(lsp)
子類必須能夠替換它們的基類(反映的是is-a的關係)
5.介面隔離原則(isp)
不應該強迫客戶程式依賴它們不用的方法
介面要小而完備
6.優先使用物件組合,而不是類繼承
類繼承通常是「白箱復用」,物件組合通常為「黑箱復用」
繼承在某種程度上破壞了封裝性,子類父類的耦合度高
而物件組合只要求物件有良好定義的介面
7.封裝變化點
使用封裝來建立物件之間的分界層,讓設計者可以只對一側進行修改,而不影響另外一側
8.針對介面程式設計,而不是針對實現程式設計
不將變數型別宣告為某個特定的具體類,而是宣告為某個介面
客戶程式無需知道物件的具體型別,只需要知道介面
(老師提到,產業強盛的標誌是「介面標準化」)
紙上學來終覺淺,絕知此事要躬行。
設計模式,還需要多體會。
python第一周心得 Python第一周總結
變數 不能為系統自帶的內建函式,如def,help,sum等等 變數不能已下劃線數字來開頭,對大小寫敏感 變數後直接接數字,則被賦值為整型,如何加引號則賦值型別為字串str型別 a 1 整型 int b 2 字串 str 用print 直接輸出 a hello print a 在 使用者想要同時輸出...
第一周周記
下面是整個文章的第二部分,日常的安利 這周的話,除了整體恢復正常,週末我也購置了我的第一塊外接鍵盤,這裡的話我選擇的是國產的靜電容鍵盤niz的plum 87鍵鍵盤。今天拿到這個鍵盤第一天,整體使用了一下,尺寸配合著15寸的蘋果macbook pro可以說恰到好處,除此以外,整個鍵盤還是給我不少驚喜的...
寒假第一周
寫了這個標題,感覺有點像寫周記的味道.那就盡量堅持這個寒假裡至少每週一篇吧。這幾天學校裡真的好清靜了,實驗室和寢室都沒人了。其實說起來這周算是我們寒假的第二週了吧,14號就全部考完了,從放假的基本定義來看,那時候就算是寒假了。只不過上週這邊人還比較多,而且本科生也都沒考完,校歷上也是這週才算開始放假...