軟體實體(類、模組、函式等等)應該是可以擴充套件的,但是應該是不可修改的。說明:開放封閉原則是指對擴充套件開放,當應用的需求更改時,可以對模組進行擴充套件;封閉是指對更改是封閉的,不改動原有的列庫。
關鍵:抽象
建立出固定卻能夠描述一組任意個可能行為的抽象體,抽象體為抽象基類。模組操作乙個抽象體,由於模組依賴於乙個特定的抽象體,所以對於它的更改是可以關閉的,同時,通過此抽象體派生,可以擴充套件模組行為。
比如:
下圖展示了乙個簡單不遵循ocp原則的設計,person和rose都是具體類,person類使用具體類。如果我們現在希望person能夠使用其他flower類,就必須把person中使用rose的地方換成其他類。
現在將設計進行重新設計成如下,person類使用flowerinte***ce介面,不同的flower類可以實現該介面,這種情況下就不用修改person類。flowerinte***ce描述行為,由具體類去實現它們。
接下來會通過具體的**示例進行描述開放封閉原則:
現在需要在乙個標準的gui上繪製圓和正方形,下面對它違反ocp原則以及遵循ocp原則的部分核心**進行展示。
違反ocp原則:
case square:
drawsquare();
break;
case
circle:
drawcircle();
break;
在應用程式中通過switch語句去選擇繪製圖形的操作,現在若是新增乙個新型別,如何更改此應用程式。
遵循ocp原則:
void draw(vectorshapes)
}
在這裡增加乙個其他形狀,不需要修改此函式。
ocp原則的關鍵在於尋找合適的抽象,乙個應用程式可能做不到完全封閉,所以需要有選擇性地進行抽象。
開放封閉原則(OCP)
開放封閉原則 軟體實體 類,模板,函式等 應該是可以擴充套件的,但是不可以修改。舉個栗子,加入我們要設計乙個系統,在專案啟動的時候我們不可能一下子把所有的需求全部考慮到。我們所需要做的就是多擴充套件,少修改!在我們最初編寫 的時候,假設變化不會發生。當變化發生的時候,我們就建立抽象來隔離以後發生的同...
OCP開放封閉原則
軟體實體 類 模組 函式等 應該是可以擴充套件的,但是不可修改。如果正確的應用了ocp原則,那麼 以後在進行同樣的改動時,就只需要新增新的 不必修改已經正常執行的 1.對於擴充套件是開放的 這意味著模組的行為是可以擴充套件的。當應用的需求改變時,我們可以對模組進行擴充套件,使其具有滿足那些改變的新行...
開放 封閉原則(OCP)
幾乎所有的系統,都不可能一成不變,只要是需求,就一定是會變化的。如何在面對需求的變化的時候,設計的軟體可以相對容易修改,不至於新的需求一來,就把程式推到重來。怎麼樣的設計才能面對需求的改變卻可以保持相對穩定,從而使得系統可以在第乙個版本以後不斷推出新的版本。這就是ocp原則要告訴我們的東西。面對需求...