軟體設計的7大原則

2021-09-12 17:34:28 字數 2970 閱讀 3775

對模組、類、函式擴充套件開發、對修改關閉。強調使用抽象構建框架,用實現擴充套件細節,從而提高軟體系統的復用性和擴充套件性。開閉原則是物件導向設計中最基礎的設計原則,指導我們如何構建穩定靈活的系統。

例如:在版本更新的時候,盡可能的不修改已有源**,通過新增類來擴充套件功能。

/**

* 支付

*/public inte***ce payment

public class alipay implements payment

}public class discountalipay extends alipay

}

設計**結構時,高層模組不應該依賴底層的模組,二者應該依賴其抽象,讓細節依賴抽象。通過依賴倒置原則,可以減少類與類之間的耦合性,提高系統的穩定性,可讀性和可維護性,降低修改給程式帶來的風險。

public class wechatpay implements payment

}public class user

public void setpayment(payment payment)

public string pay(int amount)

}}

指乙個類或乙個方法,只負責乙個職責,避免修改其中乙個類或乙個方法邏輯,造成另外乙個類或方法功能故障。

職責劃分可以對功能解耦,降低系統複雜度,提高維護性性、可讀性。

例如:上面的例子中,alipay和wechatpay,支付的實現細節不同,對支付方式的不同,劃分了不同的類。

使用多個專門的總介面,而不使用乙個總的介面,客戶端不應該依賴不需要的介面。設計介面是應該遵循的幾個點:

(1)類一對一的依賴應該建立在最小的介面之上

(2)建立單一介面,不要建立臃腫的介面

(3)盡量細化介面,介面中的方法數量要適度。

介面隔離原則復合高類聚,低耦合的設計思想,類具有良好的可讀性、可擴充套件性、可維護性。介面設計的時候要多花時間思考業務模型,對可能發生的變更提前預判,所以抽象對模型的理解非常重要。

public inte***ce animal 

public class bird implements animal

public void fly()

public void swing()

}public class dog implements animal

public void fly()

public void swing()

}public class cat implements animal

public void fly()

public void swing()

}

每個類都有空著的方法,dog和cat顯然是不要fly方法的,通過設計不同功能的介面進行改糙,如下:

public inte***ce flyable 

public inte***ce eatable

public inte***ce swimming

public class bird implements flyable,eatable

public void fly()

}public class dog implements eatable,swimming

public void swing()

}public class cat implements eatable

}

乙個類對其他類應該有最少的了解,又叫最少知道原則,降低累於類之間的耦合性。迪公尺特法則強調只和朋友交流,不和陌生人說話,類的成員變數、方法的輸入輸出引數稱為朋友,方法體內部的類不屬於朋友。

例如:boss需要季度,年度報表,只需要找到資料部門的主管,主管讓下面擅長做報表的員工製作報表,然後主管反饋報表給boss,boss不需要自己去了解報表是怎麼做的。

**編寫中適用於父類的地方,那麼一定適用子類。所以引用父類方法的地方必須可以透明底適用子類,子類物件可以替換父類物件,而程式邏輯不變。

引申意思:子類可以擴充套件父類的功能,但不能改變父類原有功能。

(1)子類可以實現父類的抽象方法,不能覆蓋父類的非抽象方法

(2)子類可以增加自己特有的方法

(3)當子類過載父類的方法時,方法的前置條件(方法輸入引數)比父類更寬鬆

(4)子類實現父類方法時,方法的後置新增(方法輸出值)比父類更嚴格或相等。

(3)和(4)指方法的的開發程度,父類是protected,子類至少應該是protectd,寬鬆就是public; 引數如果是string,那麼子類實現和過載的方法至少應該是string,寬鬆是object;返回值父類是string,嚴格就是string的子類,相等就是string。

裡式替換的有點:

(1)約束繼承氾濫,開閉原則的一種體現

(2)增強程式的健壯性,同時變更做的非常好的相容性,提高程式維護性,擴充套件性

盡量使用物件組合、聚合,而不是繼承達到軟體復用的目的。可以降低類與類之間的耦合度,讓程式更加靈活。

繼承叫做白箱復用,父類把所有的細節暴露給子類。

組合/聚合叫做黑箱復用,對類以外的物件無法獲取到實現細節。

例如:以connection連線為例

public class productserviceimplservice最開始功能只有從資料庫查詢時,現在需要使用http連線從第三方查詢是,增加httpconnection的物件持有,就可以實現功能的擴充套件,而不是使用繼承。

總結:設計原則是學習設計模式的基礎,實際開發過程中不一定要求所有的**都遵循設計規則,考慮到人力、時間、成本、質量等多方面的因素,適當遵循設計原則。

軟體設計原則(七大原則)

本片是自己在工作閒餘時間學習軟體設計模式所獲,在這裡歸納總結,如有不足請多多指教 說到軟體設計原則,可能很多人都會和軟體設計模式混淆,尤其是對剛工作不久的童鞋,其實軟體設計原則只是我們在軟體設計中對軟體架構,各模組之間松耦合,可重用性的一種總結的抽象。而軟體設計模式傾向於軟體架構方面,是站在全域性看...

軟體設計六大原則

單一職責原則,srp 功能職責單一,只能擁抱一種變化。黎克特制替換原則,lsp 所有在使用父類的情況,都可以用子類替換。繼承的子類不能改動父類已實現的功能。依賴倒置原則,dip 高層通過抽象依賴低層,細節應該依賴抽象,抽象不應該依賴於細節。介面隔離原則,sip 從某種程度上看,介面隔離原則就是介面版...

軟體設計七大原則

軟體設計的七大原則 設計模式遵循的一般原則 1.開 閉原則 open closed principle,ocp 乙個軟體實體應當對擴充套件開發,對修改關閉.說的是,再設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件.換言之,應當可以在不必修改源 的情況下改變這個模組的行為,在保持系...