對物件導向設計的基石 開閉原則

2021-04-13 23:36:34 字數 1205 閱讀 6705

「開-閉」原則(open-closed principle,ocp)的定義及優點

定義:乙個軟體實體應當對擴充套件開放,對修改關閉( software entities should be open for extension,but closed for modification.)。即在設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件。

滿足「開-閉」原則的系統的優點:

a)通過擴充套件已有的軟體系統,可以提供新的行為,以滿足對軟體的新需求,使變化中的軟體系統有一定的適應性和靈活性。

b)已有的軟體模組,特別是最重要的抽象層模組不能再修改,這就使變化中的軟體系統有一定的穩定性和延續性。

c)這樣的系統同時滿足了可復用性與可維護性。

如何實現「開-閉」原則

在物件導向設計中,不允許更改的是系統的抽象層,而允許擴充套件的是系統的實現層。換言之,定義乙個一勞永逸的抽象設計層,允許盡可能多的行為在實現層被實現。

解決問題關鍵在於抽象化,抽象化是物件導向設計的第乙個核心本質。

對乙個事物抽象化,實質上是在概括歸納總結它的本質。抽象讓我們抓住最最重要的東西,從更高一層去思考。這降低了思考的複雜度,我們不用同時考慮那麼多的東西。換言之,我們封裝了事物的本質,看不到任何細節。

在物件導向程式設計中,通過抽象類及介面,規定了具體類的特徵作為抽象層,相對穩定,不需更改,從而滿足「對修改關閉」;而從抽象類匯出的具體類可以改變系統的行為,從而滿足「對擴充套件開放」。

對實體進行擴充套件時,不必改動軟體的源**或者二進位制**。關鍵在於抽象。

對可變性的封裝原則

「開-閉」原則也就是「對可變性的封裝原則」(principle of encapsulation of variation ,evp)。即找到乙個系統的可變因素,將之封裝起來。換言之,在你的設計中什麼可能會發生變化,應使之成為抽象層而封裝,而不是什麼會導致設計改變才封裝。

「對可變性的封裝原則」意味著:

a)一種可變性不應當散落在**的許多角落,而應當被封裝到乙個物件裡面。同一可變性的不同表象意味著同乙個繼承等級結構中的具體子類。因此,此處可以期待繼承關係的出現。繼承是封裝變化的方法,而不僅僅是從一般的物件生成特殊的物件。

b)一種可變性不應當與另一種可變性混合在一起。作者認為類圖的繼承結構如果超過兩層,很可能意味著兩種不同的可變性混合在了一起。

使用「可變性封裝原則」來進行設計可以使系統遵守「開-閉」原則。即使無法百分之百的做到「開-閉」原則,但朝這個方向努力,可以顯著改善乙個系統的結構。

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

在軟體開發中,為了提高軟體系統的可維護性和可復用性,增加軟體的可擴充套件性和靈活性,程式設計師要盡量根據 7條原則來開發程式,從而提高軟體開發效率 節約軟體開發成本和維護成本。我們將在下面的幾節中依次來介紹這 7 條原則,本節首先介紹開閉原則。開閉原則 open closed principle,o...

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

軟體實體應當對擴充套件開放,對修改關閉 這裡的軟體實體包括以下幾個部分 專案中劃分出的模組 類與介面方法 開閉原則的含義是 當應用的需求改變時,在不修改軟體實體的源 或者二進位制 的前提下,可以擴充套件模組的功能,使其滿足新的需求。具體來說就是你應該通過擴充套件來實現變化,而不是通過修改原有的 來實...

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

唯一不變的是不斷的變化,在軟體開發中應該對需求的變化持開放態度,我們要做的就是如何將這種變化對我們現有的成果帶來最小的衝擊。開閉原則直接面對物件導向程式的目標擴充套件性和可維護性,要求對擴充套件開放,對修改關閉 即在不修改原有 的情況下改變模組的行為。該原則是物件導向程式設計的總原則,也是度量程式設...