物件導向程式設計強調的是可擴充套件性,那麼我們要怎麼設計才具有更好的擴充套件性呢?
solid原則是類級別的,物件導向的設計理念,它們與測試工具一起幫你改進腐壞的**。solid由程式設計師們最喜歡的大叔 robert c. martin(bob大叔)提出,它其實是五個其他縮略詞的組合——srp, ocp, lsp, isp, dip。
從物件導向角度解釋這個原則為:」引起類變化的因素永遠不要多於乙個。」 或者說 「乙個類有且僅有乙個職責」。從**開發的角度就是「高內聚」,即乙個類只完成它應該完成的職責。
面向修改封閉,面向擴充套件開放。「對擴充套件開放」指的是設計類時要考慮到新需求提出時類可以增加新的功能。「對修改關閉」指的是一旦乙個類開發完成,除了改正bug就不再修改它。
開閉原則的最佳實踐是採用介面實現,如果提出了新功能,如有必要,定義在新的介面中,並讓當前的類實現該介面,這樣舊的功能和**都不需要修改。但是在需求的迭代開發中往往發現需要基於原有功能去新增新功能,這個時候就需要根據affected areas來保證「對修改封閉」,即保持原有的功能邏輯不變。
所有使用子類的地方都可以用父類替換。適用於繼承層次結構。
常見的違反lsp原則的類設計就是rectangle和square
public class rectangle
public void setheight(double height)
public double getheight()
public double getwidth()
public double getperimeter()
public double getarea()
} public class square extends rectangle
public void setheight(double height)
square繼承rectangle是不合理的。
介面隔離原則(inte***ce segregation principle)指出客戶不應該被強迫依賴於他們不使用的介面。當我們使用非內聚的介面時,isp指導我們建立多個較小的內聚度高的介面。
當你應用isp時,類和他們的依賴使用緊密集中的介面通訊,最大限度地減少了對未使用成員的依賴,並相應地降低耦合度。小介面更容易實現,提公升了靈活性和重用的可能性。由於很少的類共享這些介面,為響應介面的變化而需要變化的類數量降低,增加了魯棒性。
這裡說的比較抽象,我覺得這篇文章的例子舉得好。讓我對isp理解得更清晰。
高層模組不應該依賴底層模組,二是依賴低層模組的抽象(介面)
面向介面程式設計,不要面向實現程式設計。
參考:
物件導向設計原則和建立solid應用的5個方法
怎樣設計rectangle和square類才能使之滿足oop的liskov substitution原則
物件導向的設計的SOLID原則
s.o.l.i.d是物件導向設計和程式設計中5個重要編碼規則的首字母的縮寫。srpthe single responsibility principle 單一責任原則 當需要修改某個類的時候原因有且只有乙個。換句話說就是讓乙個類只做一種型別的責任,當這個類需要承擔其他型別的責任的時候,就需要分解這個...
物件導向的設計的SOLID原則
s.o.l.i.d是物件導向設計和程式設計中5個重要編碼規則的首字母的縮寫。srpthe single responsibility principle 單一責任原則 當需要修改某個類的時候原因有且只有乙個。換句話說就是讓乙個類只做一種型別的責任,當這個類需要承擔其他型別的責任的時候,就需要分解這個...
物件導向設計的重要原則 SOLID
solid是物件導向設計5大重要原則的首字母縮寫 1 單一職責原則 srp 2 開放封閉原則 ocp 3 黎克特制替換原則 lsp 4 介面隔離原則 isp 5 依賴倒置原則 dip 下面具體解釋一下每個原則 1 單一職責原則 srp 表明乙個類只有乙個職責,乙個類就像容器一樣。它能新增任意數量的屬...