開閉原則ocp(open-close principle)被稱作是ood的基石,是ood最重要的原則之一。
這個原則由大師bertrand meyer在2023年提出(汗,那個時候恐怕國內還很少人知道oo,甚至計算機為何物):software entities should be open for extension,but closed for modification。多簡單啊?!這個原則的意思大概是說:軟體對擴充套件應該是開發的,對修改應該是關閉的。說的更通俗點兒,就是說我們開發了乙個軟體,應該可以對它進行功能擴充套件(開放),而在進行這些擴充套件的時候,不需要對原來的程式進行修改(關閉)!
為什麼會有這樣的要求呢?如果乙個軟體是符合ocp原則的,那麼至少,我們有兩個極大的好處:
1.在軟體可用性上,非常靈活。你可以在軟體完成對軟體進行擴充套件,加入新的功能。這樣,這個軟體就可以通過不斷的增加新模組滿足不斷變化的新需求!
2.由於對軟體原來的模組不能修改,因此不用擔心軟體的穩定性。
目前,對ocp的實現,主要的一條就是抽象,就是我們常常掛在嘴邊的要面向抽象(介面)。把系統的所有可能的行為抽象成乙個抽象底層,這個抽象底層規定出所有的具體類必須提供的方法的特徵作為系統設計的抽象層,這個抽象層要預見所有可能的擴充套件,從而使得在任何擴充套件情況下,系統的抽象層不需修改;同時由於可以從抽象層匯出乙個或多個新的具體類可改變系統的行為,因此對於可變的部分,系統設計對擴充套件是開放的。
關於系統可變的部分,還有乙個更具體的對可變性封裝原則(principle of encapsulation of variation, evp),從工程實現的角度對開閉原則進行了進一步的解釋。evp要求在做系統設計的時候,對系統所有可能(或允許)發生變化的部分進行評估和分類,每乙個可變的因素都單獨進行封裝。
我們很容易就可以想到,在設計的開始就羅列系統所有可能的行為加入到抽象底層是不可能的(實際上也是不合算的),對所有的可變因素進行預計和封裝也不太現實,因此,開閉原則很難被完全實現,只能在某些模組、某種程度上、某個限度內符合ocp的要求。所以可以說,ocp具有理想主義的色彩,是ood的終極目標。因此,針對ocp的實現方法,許多ood的大師都費盡心機,研究ocp的實現方式。後面要提到的黎克特制代換原則、合成復用原則,依賴倒轉原則,介面隔離原則,抽象類,迪公尺特法則等,都可以看作是ocp的實現方法。
OOD設計原則之開閉原則(OCP)
開閉原則ocp open close principle 在維基百科的定義 在物件導向程式設計中,開閉原則規定 軟體中的物件 類,模組,函式等等 應該對擴充套件是開放的,但是對於修改是封閉的 這意味著乙個實體是允許在不改變他的源 的前提下變更他的行為。勃蘭特丶梅耶一般被認為是最早提出開閉原則這一術語...
OOD設計原則之開放封閉原則(OCP)
size medium 開閉原則ocp open close principle 被稱作是ood的基石,是ood最重要的原則之一。這個原則由大師bertrand meyer在1988年提出 汗,那個時候恐怕國內還很少人知道oo,甚至計算機為何物 software entities should be...
OCP開閉原則
bertrand meyer提出此原則 模組應對擴充套件開放,對更改關閉 遵循開 閉原則的設計有兩個主要特性 1 對擴充套件開放 這意味著模組的行為可擴充套件。當需求改變時,可對模組進行擴充套件,使其具有滿足那些改變的新行為,使軟體具有適應性和靈活性。2 對更改關閉 對模組行為進行擴充套件時,不應改...