現在有許多設計原則,但是最基本的,就是solid(縮寫),這五項原則。
s = 單一責任原則
o = 開閉原則
l = liscov替換原則
i = 介面隔離原則
d = 依賴倒置原則
1.單一責任原則(srp 原則):
它的意思是:「如果你可以在乙個裝置中實現所有的功能,你卻不能這樣做」。為什麼呢?因為
從長遠來看
它增加了很多的可管理性問題。
從物件導向角度解釋是:"導致類變化的因素永遠不要多於乙個。"或者換行個說法:"乙個類有且只有乙個職責"。
如果有多於乙個原因會導致你的類改變(或者它的職責多餘乙個),你就需要根據其職責把這個類拆分為多個類。
為什麼拆分很重要的?
那是因為:
2.開閉原則:(抽象是關鍵)
設計規則如下:
「軟體實體(類,模組,函式等)應該對擴充套件開放,對修改關閉。」
這意味著在最基本的層面上,你可以擴充套件乙個類的行為,而無需修改。這就像我能夠穿上衣服,而對我的身體
不做任何改變。
擴充套件開放意味著模組/類的行為可以被擴充套件,那麼當需求變化時我們可以用各種各樣的方法制定功能來滿足需求變更或者新需求
你要對系統的核心業務進行抽象, 如果你抽象化做的比較好, 很可能, 在擴充套件功能的時候它們不必做任何改變 (比如server就是乙個抽象的概念). 你所定義的抽象的實現 (比如, iis伺服器 實現了 server) 和 抽象的** (server) 要盡可能的多. 這樣在客戶端**中不需要做任何修改就會允許你定義乙個新的實現(比如, apacheserver) .
3.黎克特制替換原則:(多型性)lsp原則
原則描述了:
"子型別必須能夠替換它們的基類."
或者, 換句話說:
"使用基類引用的函式必須能夠使用派生類而無須了解派生類."
在基本的物件導向原則中, "繼承" 通常被描述成 "is a" 的關係. 如果乙個 "開發者" 是"軟體專業人員", 那麼 "開發者" 類 應該 繼承 "軟體開發人員" 類. 這樣的 "is a" 關係 在類設計階段非常重要, 但是這也很容易讓設計者得意忘形從而以乙個糟糕的繼承設計告終.
"黎克特制替換原則" 僅僅是一種確保繼承被正確使用的手段.
「高層次的模組不應該依賴於低層次的模組,而是,都應該依賴於抽象。」
如果**不遵循依賴倒置,就有下面的風險:
除 solid 原則外還有很多別的物件導向原則。比如:
物件導向設計 OOD
乙個類有且只有乙個職責 為了同乙個目的 把東西分到不能再分。對擴充套件開放,對修改關閉。要修改外觀,只需要換件衣服就可以了,不需要把自己的 給弄掉 關鍵是把不變的東西抽象出來 子型別必須能夠替換他們的基類 鳥類,大雁繼承ok,鴕鳥繼承no,no fly。違反替換規則,應該將鳥類分為飛鳥和不飛鳥,然後...
物件導向分析(OOD)
object oriented design 是一種軟體設計方法,是一種工程化規範。軟體系統的邏輯模型。它界定了系統完成其功能的邏輯 設計物件導向的軟體是困難的,設計可復用的物件導向的軟體更加困難。1 你必須找到適當的物件 以適當的粒度將它們轉化為類的因子 定義類介面和繼承層次以及建立它們之間的關鍵...
OOD之物件導向設計原則
一 概述 物件導向有七大設計原則 單一職責原則 開閉原則 黎克特制代換原則 依賴倒轉原則 介面隔離原則 合成復用原則 迪公尺特法則。最主要的是 solid s 單一職責原則 o 開閉原則 l 黎克特制替換原則 i 介面隔離原則 d 依賴倒轉原則 二 物件導向設計原則 1 單一職責原則 上面這個圖,有...