OO設計原則 — The Open-Closed Principle:開放/封閉原則(OCP)
對於一個軟體的實體(類,模組,函式等)應該是可以擴充套件的,但是不可被修改。
一、概要
開放/封閉原則(The Open-Closed Principle:OCP)是在面向物件設計中,類和模組等必須遵循以下規則:
◇ 對於功能的擴充套件因該是開放的,即可以追加機能。
◇ 對於修改是封閉的,即既存的機能的實體是不可以修改的。
以上兩條規則就是說“軟體實體應當在不修改的前提下擴充套件”
開放/封閉原則(OCP)是面向物件設計的最基本的原則。也是之後的面向物件設計原則,
Package設計原則以及設計模式的基礎。
二、OCP的優點
◇ 很好的擴充套件性。OCP的對於擴充套件的開發原則,當系統要擴充套件或者新增新的行為的時候
只需要新增 另外實現的模組即可。
◇ 提供軟體的安定性、穩定性。OCP的修改封閉原則,要在不修改既存程式碼的基礎上
進行機能的追加,對原機能影響很小,確保了安全性,同時也保證了原有機能的穩定性。
◇ 再利用性。根據OCP原則設計的類和模組,一般都是可以設計出可重用的機能的抽象和介面等。
同時,軟體的各部分的耦合度也會很低,,使程式模組互換成為可能;
三、OCP實現的手法
實現OCP關鍵在於抽象,抽象出來的東西是不變的,具體的實現繼承於抽象,所以保證了對修改的Close,
而抽象的實現方式有多種,可以隨需新增,當然這也就是對擴充套件的Open。 另外要求的是技術包括,
多型 Polymorphism,介面 Interface,繼承 Inheritance. 一般的抽象步驟如下:
◇ 分析機能。
◇ 定義出不需要修改的可以被再利用的Interface。
◇ 通過繼承Interface類,來實現機能的擴充套件和追加。
另外在對可變性進行封裝的時候也應該注意以下幾點:
◇ 識別系統有可能變化的地方。
◇ 不要將一種可變形散佈在多處程式碼,而應該封裝起來。
◇ 不要將一種可變性與另外一種可變性混在一起。
◇ 兩種安全的實現開閉原則的設計模式是:Strategy pattern(策略模式),
Template Methord(模版方法模式)。
◇
狀況,這時可以採用幾個類進行組合來完成。
◇ 將可能發生變化的部分封裝成一個物件,如: 狀態, 訊息,,演算法,資料結構等等,
封裝變化是實現"開閉原則"的一個重要手段,如經常發生變化的狀態值,如溫度,氣壓,顏色,積分,
排名等等,可以將這些作為獨立的屬性,如果引數之間有關係,有必要進行抽象。
對於行為,如果是基本不變的,則可以直接作為物件的方法,否則考慮抽象或者封裝這些行為。
但是,由於軟體的不確定性等原因,要想100%的按照OCP原則來進行軟體設計是很困難的,
所以,我們實際過程中應該是儘可能的遵守OCP原則,而不是一味必須所有的都要遵守。