軟件設計七大原則

軟件設計七大原則

 

一、 開閉原則

定義:一個軟件實體,如類、模塊和函數應該對擴展開放,對修改關閉。
中心思想:用抽象構建框架,用實現擴展細節。即面向抽象編程。
優勢:提升軟件系統的可複用性和可維護性。
舉例:不少互聯網公司實行彈性制考勤,天天上班8小時,這是不可修改的,可是什麼時間上班和下班,是開放的。

由於越低層次的模塊,越基礎的模塊,變化後影響的範圍是越大的。越高層次的模塊變化後影響的範圍則越小。故面向對象編程中,必定要強調開閉原則。
編程

 

二、 依賴倒置原則

定義:高層模塊不該該依賴底層模塊,兩者都應該依賴其抽象。
抽象不該該依賴細節,細節應該依賴抽象。
針對接口編程,不要針對實現編程。
優勢:能夠減小類間的耦合性、提升系統穩定性,提升代碼的可讀性和可維護性,可下降修改程序所形成的的風險。

程序應依賴於接口,不該該依賴具體的實現類。

相對於細節的多變性,抽象的東西要穩定得多,以抽象爲基礎搭建起來的架構比 以細節爲基礎搭建起來的架構要穩定得多。
架構

 

三、 單一職責原則

定義:不要存在多於一個致使類變動的緣由。
一個類/接口/方法只負責一項職責。
優勢:下降類的複雜度、提升類的可讀性,提升系統的可維護性,下降變動引發的風險。
框架

 

四、 接口隔離原則

接口是設計時,對外部約定的契約。
定義:用多個專門的接口,而不使用單一的總接口,客戶端不該該依賴它不須要的接口。
一個類對一個類的依賴應該創建在最小的接口上。
創建單一接口,不要創建臃腫龐大的接口。
儘可能細化接口,接口中的方法儘可能少。
注意適度原則,必定要適度。不要多大不要多小。
優勢:符合咱們常說的高內聚低耦合的設計思想,從而使得類具備很好的可讀性,可擴展性和可維護性。

與單一職責原則的區別:
單一職責原則:指的是類、接口和方法的職責是單一的,強調的是職責,也就是說在接口裏,只要是職責是單一的,有多個方法也能夠,針對的是程序中的實現和細節。
接口隔離原則:注重的是對接口依賴的隔離,主要約束的是接口,針對抽象、程序總體框架的構建。
函數

 

五、 迪米特法則(最少知道原則)

定義:一個對象應該對其餘的對象保持最少的瞭解,又叫最少知道原則。
儘可能下降類與類之間的耦合。
優勢:下降類之間的耦合。

強調只和朋友交流,不和陌生人說話。
朋友:出如今成員變量、方法的輸入、輸出參數中的類稱爲成員朋友類,而出如今方法體內部的類不屬於朋友類。

減小每一個類之間沒必要要的依賴,從而達到下降耦合。但凡是都要有個度,若是過度的使用迪米特原則,可能會產生大量的中介類,致使系統變複雜,爲維護帶來難度。因此在使用迪米特的時候,須要反覆權衡,既要作到結構清晰,又要作到低耦合高內聚。
若是一個方法放在本類中,既不增長類間關係,也對本類不產生負面影響,就能夠放在本類中。
設計

 

六、 里氏替換原則

定義:若是對每個類型爲T1的對象o1,都有類型爲T2的對象02,使得以T1定義的全部程序P在全部的對象o1都替換成o2時,程序P的行爲沒有發生變化,那麼類型T2是類型T1的子類型。
定義擴展:一個軟件實體若是適用一個父類的話,那必定適用於其子類,全部引用父類的地方必須能透明地使用其子類的對象,子類對象可以替換父類對象,而程序邏輯不變。

引伸意義:子類能夠擴展父類的功能,但不能改變父類原有的功能。
含義1:子類能夠實現父類的抽象方法,但不能覆蓋父類的非抽象方法。
含義2:子類中能夠增長本身特有的方法。
含義3:當子類的方法重載父類的方法時,方法的前置條件(即方法的輸入/入參)要比父類方法的輸入參數更寬鬆。
含義4:當子類的方法實現父類的方法時(重寫/重載或實現抽象方法),方法的後置條件(即方法的輸出/返回值)要比父類更嚴格或相等。

優勢1:約束繼承氾濫,開閉原則的一種體現。
優勢2:增強程序的健壯性,同時變動時也能夠作到很是好的兼容性提升程序的維護性、擴展性。下降需求變動時引入的風險。
對象

 

七、 合成複用原則(組合複用原則)

定義:儘可能使用對象組合/聚合,而不是繼承關係達到軟件複用的目的。
聚合has-A和組合contains-A。
優勢:可使系統更加靈活,下降類與類之間的耦合度,一個類的變化對其餘類形成的影響相對較少。
繼承

相關文章
相關標籤/搜索