物件導向設計原則 開放關閉原則

2021-04-15 06:18:16 字數 1200 閱讀 1927

在前天寫的bolg中裡面講了設計中的一些臭味, 那什麼才是乙個好的設計!

乙個好的系統設計應該具有如下的性質:可擴充套件性、靈活性、可插入性。

1、可擴充套件性(extensibility)  容易新增新的功能

2、靈活性(fiexibility)           **修改平穩地發生

3、可插入性(pluggability)  容易將乙個類抽出去,同時將另乙個同樣介面的類加進赤!

然而要得到這樣的性質就要通過物件導向設計原則去實現:

可擴充套件性:ocp原則,lsp原則,dip原則,carp原則。

靈活性:    ocp原則,lod原則,isp原則。

可插入性:ocp原則,lsp原則,dip原則,carp原則。

物件導向設計原則之一-----ocp

1、「開——閉原則」(open-closed   principle)               簡稱ocp

定義:軟體實體(類、模組、函式等)應該是可以擴充套件的,但是是不可修改的。

特徵:(1)、可擴充套件(對擴充套件是開放的)

模組的行為功能可以被擴充套件,在應用需求改變或需要滿足新的應用需求時,我們可以讓模組以不同的方式工作。

(2)、不可更改(對更改是封閉的)

這些模組的源**是不可以改動的。任何都不許修改模組的源**。

理解: 在設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件。

其實這裡所說的不被修改是指的重要的抽象層的模組不會被修改,這也就是使變化中的軟 系統有一定的穩定性。當系統要擴充套件或者新增新的行為的時候只需要新增 另外實現的模組即可。由於新新增的模組繼承於抽象層,所以實現了其不變性。

比如在策略模式中,ocp就得到了很好的體現,演算法的不同實現其實就是對擴充套件的支援,而演算法抽象類是對系統的不變性的支援,環境類包裝了對於環境變化的控制與所採用演算法的選擇,當採用其他演算法的時候只需要擴充套件演算法類即可。 

也就是說關鍵在於抽象,抽象出來的東西是不變的,具體的實 現繼承於抽象,所以保證了對修改的close,而抽象的實現方式有多種,可以隨需新增,當然這也就是對擴充套件的open。 另外要求的是技術包括:多型 polymorphi**,介面 inte***ce,繼承 inheritance.

注:另外在對可變性進行封裝的時候也應該注意以下幾點:

1.識別系統有可能變化的地方。

2.不要將一種可變形散布在多處**,而應該封裝起來。

3.不要將一種可變性與另外一種可變性混在一起。

物件導向的設計原則一 開放 關閉原則

動機 乙個設計良好的應用程式應該充分考慮到開發和維護階段需求的頻繁變化,通常情況下,新增乙個新的功能需要做出很多修改,我們應該使對已有 的修改最小化,因為他們已經經過了測試。對現有 做出修改將會以一種不可預料的方式影響它們的已有功能。開放 關閉原則 以下簡稱開閉原則 開 閉原則 乙個軟體實體應該對擴...

物件導向設計原則 開放封閉原則 OCP

顧 名思義,既開放又封閉,對擴充套件是開放的,對更改是封閉的!擴充套件即擴充套件現行的模組,當我們軟體的實際應用發生改變時,出現新的需求,就需要我們對模組進行擴充套件,使其能夠滿足新的需求!更改封閉即是在我們對模組進行擴充套件時,勿需對源有程式 和dll進行修改或重新編譯檔案!這個原則對我們在設計類...

物件導向設計原則詳解 開放封閉原則

定義 軟體實體 類 模組 函式等 應該是可以擴充套件的,但是不可修改。對於擴充套件是開放的,對於更改是封閉的。關鍵是抽象,將乙個功能的通用部分和實現細節部分清晰的分離開來。這裡要求我們寫 要有抽象的概念。什麼是抽象?指由實體抽離出概念的思考過程。就是從眾多的物件中抽離出共同的本質的特徵。在寫 的過程...