面向對象三要素(即面向對象三大特性)
封裝(Encapsulation)
繼承(Inheritance)
多態(Polymorphism)
面向對象五原則
單一職責原則(SRP)
開放-封閉原則(OCP)
Liskov替換原則(LSP)
依賴倒置原則(DIP)
接口隔離原則(ISP)
面向對象六視點
復用(Reusibility)
擴展(Extensibility)
分離(Separability)
變化(Change)
簡約(Simplicity)
一致(Coherance)
封裝、繼承、多態是面向對象的三大特性,在設計程序的時候並不是說類的結構體現出了這三個特性就是面向對象,其實真正的面向對象設計是要符合下面的五大原則:
單一職責原則(SRP)
開放封閉原則(OCP)
里氏替換原則(LSP)
依賴倒置原則(DIP)
接口隔離原則(ISP)
此處簡單解說一下這五大原則:
單一職責原則(SRP)
最簡單、最容易理解卻最不容易做到的一個設計原則,所謂的單一職責原則是指一個類應該僅有一個引起它變化的原因
例:
在職員類里,將工程師、銷售人員、銷售經理這些情況都放在職員類里考慮,在這個假設下,職員類里的每個方法都要if else判斷是哪種情況,從類結構上來說將會十分臃腫,並且上述三種的職員類型,不論哪一種發生需求變化,都會改變職員類,其結果將會非常混亂,這個是大家所不願意看到的!
參考資料:http://www.cnblogs.com/seacryfly/archive/2011/12/29/blog1.html
開放封閉原則(OCP)
既開放又封閉,對擴展是開放的,對更改是封閉的!
擴展即擴展現行的模塊,當我們軟件的實際應用發生改變時,出現新的需求,就需要我們對模塊進行擴展,使其能夠滿足新的需求;更改封閉即是在我們對模塊進行擴展時,勿需對原有程序代碼和DLL進行修改或重新編譯文件!這個原則對我們在設計類的時候很有幫助,堅持這個原則就必須盡量考慮接口封裝、抽象機制和多態技術!
參考資料:http://www.cnblogs.com/seacryfly/archive/2011/12/29/blog2.html
里氏替換原則(LSP)
子類可以替換父類並且出現在父類能夠出現的任何地方,這個原則也是在貫徹GOF倡導的面向接口編程,在這個原則中父類應盡可能使用接口或者抽象類來實現,子類通過實現父類接口,能夠替換父類的使用地方。
依賴倒置原則(DIP)
傳統的結構化編程中,最上層的模塊通常都要依賴下面的子模塊來實現,也稱為高層依賴低層!
所以依賴倒置原則就是要逆轉這種依賴關系,讓高層模塊不要依賴低層模塊,所以稱之為依賴倒置原則!
接口隔離原則(ISP)
這個原則的意思是:使用多個專門的接口比使用單個接口要好的多!
這個我有體會,在我實際編程中,為了減少接口的定義,將許多類似的方法都放在一個接口中,最后發現,實現和維護接口的時候花了太多精力,實際上接口所定義的操作相當於對客戶端的一種承諾,這種承諾當然是越少越好,越精練越好,過多的承諾帶來的就是你的大量精力和時間去維護!