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

2021-04-13 12:15:01 字數 967 閱讀 3712

名思義,既開放又封閉,對擴充套件是開放的,對更改是封閉的!

擴充套件即擴充套件現行的模組,當我們軟體的實際應用發生改變時,出現新的需求,就需要我們對模組進行擴充套件,使其能夠滿足新的需求!

更改封閉即是在我們對模組進行擴充套件時,勿需對源有程式**和dll進行修改或重新編譯檔案!

這個原則對我們在設計類的時候很有幫助,堅持這個原則就必須盡量考慮介面封裝,抽象機制和多型技術!

舉個典型的例子,現在我們要寫乙個機動車類,機動車有汽車,電單車,電動車等多種車型

如果我們不堅持ocp,直接寫乙個類封裝機動車的開車,剎車,停車等基本方法

而每種車型對這些方法的具體實現細節是不盡相同的!

如果我們允許修改,即把現在所能想到的所能看見的車型都放在乙個類裡實現(通過方法過載或者方法內判斷),誰也不能保證未來會否出現新的機動車型,一旦出現新的機型,而在軟體中必須要實現這種車型,這個時候我們能做的只有找出這個類檔案

在每個方法裡加上這種車型的實現細節並重新編譯成dll!雖然在.net的執行環境中,我們只要將新的dll覆蓋到原有的dll即可,

並不影響現有程式的正常執行,但每次出現新情況都要找出類檔案,新增新的實現細節,這個類檔案不斷擴大,以後維護起來

就變的越來越困難,也並不滿足我們以前說的單一職責原則(sap),因為每一種車型的變化都會引起對這個類的改變動機!

如果我們在設計這個類的時候堅持了ocp的話,把機動車型的公共方法抽象出來做成乙個介面,封閉修改,在客戶端(使用該介面的類物件)只依賴這個介面來

實現對自己所需要的車型,以後在新的功能模組中需要新的車型,只要擴充套件乙個具體車型實現我們先前定義的介面,就可以正常使用,而不比

重新修改原有類檔案!

這也是我們注重在設計類的時候堅持開放封閉的原則! 

下面是我用rose畫出我上面所舉例子的uml圖

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

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

設計模式原則 開放 封閉原則

定義 軟體實體應該是可以擴充套件,但是不可修改,對擴充套件開放,對更改封閉 場景 某公司需要招聘3類員工,分別是 主管,程式設計師,銷售。公司根據不同的員工的需求,配置不同的資源。比如程式設計師應該配台電腦。首先定義乙個 員工型別 列舉 using system using system.colle...

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

對修改關閉 軟體實體 類,模組,方法等 應該是可以擴充套件的,但是是不可修改的 為了使程式的擴充套件性好,易於維護和公升級 滿足ocp軟體的優點 其它important 原始設計 class graphiceditor public void drawcircle circle r public v...