定義:乙個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。用抽象構建框架,用實現擴充套件細節。
優點:提高軟體系統的可復用性及可維護性
我的理解:原來的程式功能不能夠去改變,如果要修改一些資料,就繼承這個類對其進行修改。不能修改原來的**,如果修改可能會造成其他引用這個類的功能出現錯誤。
定義:高層模組不應該依賴低層模組,二者都應該依賴其抽象,抽象不應該依賴細節;細節應該依賴抽象,對介面程式設計,不要針對實現程式設計
優點:可以減少類間的耦合性、提高系統穩定性,提高**可讀性和可維護性,可降低修改程式所造成的風險。(構造方法)
我的理解:高層(應用層),比如本來查詢資料庫用的是mysql,但是我有兩個庫,客戶想自由切換oracle和mysql,但是我現在的程式都是基於mysql編寫的沒有辦法改,所以我們初始的時候,傳入資料庫連線的檔案,讓高層自己選擇底層依賴什麼去實現。這樣的話底層寫好之後基本不修改。
定義:不要存在多於乙個導致類變更的原因。乙個類 、介面、方法只負責一項職責
優點:降低類的複雜度、提高類的可讀性、提高系統的可維護性、 降低變更引起的風險
定義:用多個專門的介面,而不是使用單一的總介面,客戶端不應該依賴它不需要的介面
注意:乙個類對應乙個類的依賴應該建立在最小的介面上
建立單一介面,不要建立龐大臃腫的解耦
盡量細化介面,介面中的方法盡量少
注意適度原則,一定要適度
優點:符合高內聚、低耦合的設計思想,從而使得類具有很好的可讀性,可擴充套件性
我的理解:差不多是乙個整體的功能的放在乙個介面裡,乙個類可以去實現多個介面,另外一各類也能去實現這個介面,不能出現這個類不能實現的。比如這個介面是動物的介面包括手和頭的方法,三個動物類(豬、蛇和猴),蛇這個類就沒有手這個方法,這個介面就可拆成兩個。當然具體情況要看專案分析。
定義:乙個物件應該對其他物件保持最少的了解。又叫最少知道原則盡量降低類與類之間的耦合
優點:降低類之間的耦合
強調只和朋友交流,不和陌生人說話
朋友:出現在成員變數、方法的輸入、輸出引數中的類成為成員朋友類,而出現在方法體內部的類不屬於朋友。
定義:如果對每乙個型別為t1的物件o1,都有型別t2的物件o2,使得以t1定義的所有程式p在所有的物件o1都替換成o2時,程式p的行為沒有發生變化,那麼型別t2是型別t1的子型別。
定義擴充套件:乙個軟體實體如果適用乙個父類的話,那一定適用於其子類,所有引用父類的地方必須能透明地使用其子類的物件,子類物件能夠替父類物件,而程式邏輯不變。
引申意義:子類可以擴充套件父類的功能,但不能改變父類原有的功能。
含義1:子類可以實現父類的抽象方法,但是不能覆蓋父類的非抽象方法。
含義2:子類中可以增加自己特有的方法。
含義3:當子類的方法過載父類的方法時,方法的前置條件(即方法的輸入、入參)要比父類方法的輸入引數更寬鬆。
含義4:當子類的方法實現父類的方法時(重寫、過載或者實現抽象方法),方法的後置條件(即方法的輸出、返回值)要比父類更加嚴格或者相等。
優點1:約束繼承氾濫,開閉原則的一種體現。
優點2:加強程式的健壯性,同時變更時也可以做到非常好的相容性;提高程式的維護性,擴充套件性。降低需求變更時引入的風險。
定義:盡量使用物件組合、聚合、而不是繼承關係達到軟體復用的目的 聚合has-a和組合contains-a,繼承is-a.
優點:可以使系統更加靈活,降低類與類之間的耦合度,乙個類的變化對其他類造成的影響相對較少。
七大軟體設計原則
1 開閉原則定義 乙個軟體實體,如類 模組和函式應該對擴充套件開放,對修改關閉用抽象構建框架,用實現擴充套件細節 優點 提高軟體系統的可復用性及可維護性 核心就是物件導向程式設計,我們盡量進行擴充套件,而不是去修改。2 依賴倒置原則定義 定義 高層模組不應該依賴底層模組,二者都應該依賴其抽象,抽象不...
菜鳥的架構學習之路 七大軟體設計原則
對於個人而言 無外乎使自己的 高內聚低耦合 冗餘低 可復用,開發效率高,別人用半個小時寫完的東西,你十分鐘就搞定。公升職加薪 對於公司架構而言 縮短開發周期,可維護性強,可擴充套件性強。概括一句話就是使用最少的錢,得到最優質的產品。提高軟體系統的可維護性和可復用性,增加軟體的可擴充套件性和靈活性,從...
軟體設計原則(七大原則)
本片是自己在工作閒餘時間學習軟體設計模式所獲,在這裡歸納總結,如有不足請多多指教 說到軟體設計原則,可能很多人都會和軟體設計模式混淆,尤其是對剛工作不久的童鞋,其實軟體設計原則只是我們在軟體設計中對軟體架構,各模組之間松耦合,可重用性的一種總結的抽象。而軟體設計模式傾向於軟體架構方面,是站在全域性看...