開放-封閉原則(The Open-Closed Principle 、OCP)
阿新 • • 發佈:2018-12-23
一、概念
軟體實體(模組、類、函式等)應該可以擴充套件,但是不可以修改。也就是說軟體對擴充套件開放,對修改封閉。
需要說明的是,對修改關閉不是說軟體設計不能做修改,只是儘量不要做不必要的修改。怎麼才能做到呢?那就是有相應的擴充套件性。其實,軟體有相應的擴充套件性是好處,但是不能說每個地方都有擴充套件。反而造成了程式碼的臃腫。所以這裡的擴充套件與修改關閉是有限制的。開閉原則,可以說是其他五大原則的實現,也是面向物件設計的終極目標。我們也可以說成開閉原則是其他原則的核心。
二、例子
開始需求是做一個加法的操作。後來繼續加入減法、乘法、除法。
開始我們想加法以後可能會做一個需求變更:加入其它的演算法法則。所以我們要有一個預判性,這個預判性會導致我們專案以後的擴充套件性,也會導致如果需求發生變更,程式修改的難易程度。
所以,我們要做一個演算法法則的操作類,加減乘除法都繼承此操作介面。再加一個演算法法則的客戶端類類操作此演算法。
面對需求,對程式的改動是通過增加新程式碼進行的,而不是更改現有的程式碼。
我們希望的是在開發工作展開不久就可以知道能發生的變化。查明可能發生的變化所等待的時間越長,要建立正確的抽象就越困難。(在上面例子中,如果加法運算在很多地方都應用了,再考慮抽象、考慮分離,就很困難。)
開放封閉原則是面向物件設計的核心所在。遵循這個原則可以帶來面向物件技術所聲稱的巨大好處,也就是可維護、可擴充套件、可複用、靈活性好。開發人員應該僅對程式中呈現出頻繁變化的那些部分做出抽象,然而,對於應用程式中的每個部分都刻意地進行抽象同樣不是一個好主意。拒絕不成熟的抽象和抽象本身一樣重要。