對象的六大原則:
1.單一職責原則(Single Responsibility Principle SRP)
2.開閉原則(Open Close Principle OCP)
3.里氏替換原則(Liskov Substitution Principle LSP)
4.依賴倒轉原則(Dependence Inversion Principle DIP)
5. 接口隔離原則(Interface Segregation Principle ISP)
6.迪米特原則 (Least Knowledge Principle LKP)
單一職責原則:
就一個類而言,應該僅有一個引起它變化的原因,簡而言之:一個類應該是一組相關性很高的函數、數據的封裝。
一個類盡量只有一個職責(相關),兩個完全不一樣的功能就不應該放在一個類中,通過不斷審視自己的代碼,根據具體的業務,功能對類進行相應的拆分。
開閉原則:
軟件中的對象(類、模塊、函數等)應該對於擴展開放,對於修改是封閉的。
程序一旦開發完成,程序中的一個類的實現只因錯誤而被修改,新的或者改變的特性應該通過新建不同的類來實現,新建的類可以通過繼承的方式來重用原類的代碼。
eg:抽象為接口,對於擴展,新增類來實現。
里氏替換原則:
1.如果對每一個類型為S的對象O1,都有類型為T的對象O2,是的以T定義的所有程序P在所有的獨享O1都換成O2,程序P的行為沒有發生變化,那么類型S是類型T的子類型。
2.所有引用積累的地方必須能透明地使用其子類的對象。
面向對象語言的三大特點:數據抽象(封裝)、繼承、多態
里氏替換原則依賴於繼承、多態。通俗來說:只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任何錯誤或者異常,但反過來就未必能行,有子類出現的地方,父類未必就能適應。將父類使用的地方替換為子類,事項多態。這就是里氏替換原則。
依賴倒轉原則:
指代一種特定的解耦形式,使高層次的模塊不依賴於低層次的模塊的實現細節的目的。
1.高層模塊不應該依賴底層模塊,兩者都應該依賴其抽象。
2.抽象不應該依賴細節。
3.細節應該依賴抽象。
抽象:指接口或者抽象類
細節:實現類,實現接口或者繼承抽象類而產生的類就是細節,特點:可以直接被實例化
也就是說,模塊間的依賴通過抽象發生,實現類之間不發生直接的依賴關系,其依賴關系是通過接口或者抽象類來實現,依賴抽象而不依賴具體實現,這就是依賴倒轉原則。
接口隔離原則:
顧名思義,在設計類時,我們需要將各種接口隔離,使用最少的接口,類間的依賴關系應該建立在最小的接口上。他的目的就是:系統解開耦合,從而容易重構,更改和重新部署。
迪米特原則:
一個對象應該對其他對象有最少了解,這個原則的提出也是為了降低耦合度的,便於整個系統維護,升級等等。
類與類之間的關系越密切,耦合度越大,一個類發生改變時,對另一個類的影響也就越大, Only Talk To Your Immedate Friends 只於直接的朋友通信。
其實這六大原則,總的來說,目的都是一樣:降低耦合性,便於維護,擴展。
當然,我們在編程的時候不能老是想着這六大原則,從而限制了我們的思維。需要通過大量實踐讓我們來把這六大原則融會貫通。