舉乙個簡單的例子,登入功能。一般登入需要包括幾個基本的功能:
1. 登入頁面;
2. 接受使用者輸入;
3. 提交使用者輸入資料到服務端驗證;
4. 返回驗證結果並提示給使用者;
按照單一原則我們就可以將登入功能拆分成兩個類,登入頁類和網路請求類。
其實因為單一原則並不是很容易劃分,很多時候需要根據個人經驗和實際情況「因地制宜」。我覺得最主要還是要符合「低耦合,高內聚。」就好了。
開閉原則的定義:軟體中的物件(類、模組、函式等)應該對於擴充套件是開放的,但是,對於修改是封閉的。因為在軟體生命週期內,因為變化、公升級和維護等原因修改原有**時可能會將原本已經測試通過的**引入錯誤,而這種錯誤往往很容易被忽略。因此,在軟體需要變化的時候,我們應該盡量使用擴充套件的方式來實現變化,而不是通過修改原有的**。
開閉原則的乙個重要手段就是抽象。我們可以將**中容易發生變化的部分抽象出來(一般是乙個介面的形式),通過不同的抽象的實現來擴充套件功能。
黎克特制替換原則定義:如果對每乙個型別為s的物件o1,都有型別為t的物件o2,使得以t定義的所有程式p在所有的物件o1都替換成o2時,程式p的行為沒有發生變化,那麼型別s是型別t的子型別。比較讓人崩潰的定義,o(∩_∩)o哈哈~ 還有乙個讓人更容易接受的定義。
黎克特制替換定義:所有引用基類的地方必須能夠透明地使用其子類的物件。這個更好理解一些,其實黎克特制替換原則主要是應用了,oop(物件導向程式設計)三大特點(繼承、封裝、多型)中的繼承和多型。簡單的說就是我們在使用乙個類的地方,我們也可以使用這個類的子類,對於使用者而言並沒有什麼區別,或許使用者甚至不知道使用的是基類還是子類,但是反過來是不可以的,使用子類的地方基類就不一定適用了。總結來說還是兩個字:抽象。是不是很眼熟,上面開閉原則中也強調了抽象,其實開閉原則和黎克特制替換是相互依賴、互相補充的。
- 開閉原則強調的是對於擴充套件和修改的態度;
- 黎克特制替換原則強調的是通過建立抽象規範保證系統的擴充套件性和靈活性。
依賴倒置原則:定義比較難懂,簡單的說就是模組間的依賴通過抽象發生,實現類之間不發生依賴關係,其抽象關係是通過介面或者抽象類產生的。上面的定義還是有點難懂,其實一句話就可以概括:面向介面程式設計,或者說面向抽象程式設計。這裡的抽象指的是介面或者抽象類,面向介面程式設計是物件導向的精髓之一,也是以上兩個原則強調的——抽象。
如果兩個類互相依賴的話,他們之間就是直接耦合的,當乙個類變化時,往往就會影響到依賴它的類。這樣限制了系統的擴充套件性。
通常我們可以使用抽象出介面的形式,讓類之間通過介面依賴,進行解耦。這也就是依賴倒置的核心思想。通過上面3個原則,我們發現,想讓系統更靈活,抽象似乎成了唯一的手段。
介面隔離原則:客戶端不應該依賴它不需要的介面。還有乙個定義:類間的依賴關係應該建立在最小的介面上。
迪公尺特原則也稱最少知識原則:乙個物件應該對其他物件有更少的了解。通俗的講就是乙個類應該對自己需要耦合或者呼叫的類知道得最少,只需要知道呼叫的方法即可,其他一概不知道。
迪公尺特原則還有乙個更簡短的解釋,「只與直接朋友通訊。」什麼是直接朋友呢?我理解為直接耦合和關聯的類,舉個例子,讀取sd卡上的檔案,我們自己封裝乙個工具類sdfileutil,在sdfileutil總我們可能用到了其他工具類,比如file、fileoutputstream等。而我們直接關聯的就是sdfileutil其他的file、fileoutputstream等我們並不關心。這就是迪公尺特原則。迪公尺特原則可以使系統耦合性更低,有更好的擴充套件性。
以上就是物件導向的六大原則,它們是系統保持高科擴充套件性、高內聚、低耦合的保證,也是我們走向靈活軟體開發的第一步。
物件導向六大原則
先來看物件導向的六大原則吧 一 單一職責原則 二 開閉原則 三 黎克特制替換原則 四 依賴倒置原則 五 介面隔離原則 六 迪公尺特原則class imageloader 就像上面的 一樣我們把所有功能寫到乙個類中,隨著我們專案越來越大功能也越來越大,會導致這個類很龐大也很脆弱。這時候可以拆分出來每個...
物件導向六大原則
引用一段經典的話,武學的最高境界是無招勝有招 在程式設計領域,設計模式就可以認為是招數,而真正的內功心法是設計原則 下面講述一下程式設計中應該遵循的基本原則 乙個類只負責一種職責,只有這種職責的改變會導致這個類的變更。繞口一點的正統說法 不要存在多於乙個原因導致類變更 假如 類t 負責有兩種職責 p...
物件導向六大原則
韓夢飛沙 韓亞飛 313134555 qq.com yue31313 han meng fei sha 常見的物件導向設計原則 單一職責原則 srp 乙個類應該僅有乙個引起它變化的原因。開放關閉原則 ocp 乙個類應該對外擴充套件開放,對修改關閉。黎克特制替換原則 lsp 子型別能夠替換掉它們的父型...