開閉原則是指什麼?

藏色散人
發布: 2023-04-05 20:26:01
轉載
7656 人瀏覽過

開閉原則

開閉原則(OCP)是物件導向設計中「可重複使用設計」的基石,是物件導向設計中最重要的原則之一,其它很多的設計原則都是實現開閉原則的一種手段。

1988年,布蘭特‧梅耶(Bertrand Meyer)在他的著作《物件導向軟體建構(Object Oriented Software Construction)》中提出了開閉原則,它的原文是這樣:「Software entities should be open for extension,but closed for modification」。翻譯過來就是:「軟體實體應對擴充開放,對修改關閉」。這句話說得略微有點專業,我們把它講得更通俗一點,也就是:軟體系統中包含的各種元件,例如模組(Modules)、類別(Classes)以及功能(Functions)等等,應該在不修改現有程式碼的基礎上,引進新功能。開閉原則中“開”,是指對於組件功能的擴展是開放的,是允許對其進行功能擴展的;開閉原則中“閉”,是指對於原有代碼的修改是封閉的,即不應該修改原有的程式碼。

遵循開閉原則設計出來的模組具有兩個主要特徵:

(1)對於擴充功能是開放的(Open for extension)。這意味著模組的行為是可以擴展的。當應用的需求改變時,我們可以對模組進行擴展,使其具有滿足那些改變的新行為。也就是說,我們可以改變模組的功能。

(2)對於修改是關閉的(Closed for modification)。對模組行為進行擴充時,不必改動模組的原始碼或二進位代碼。模組的二進位可執行版本,無論是可連結的函式庫、DLL或.EXE文件,都無需改動。

實作方法

實作開閉原則的關鍵就在於「抽象」。把系統的所有可能的行為抽象化成一個抽象底層,這個抽象底層規定出所有的具體實作必須提供的方法的特徵。作為系統設計的抽象層,要預見所有可能的擴展,從而使得在任何擴展情況下,系統的抽象底層不需修改;同時,由於可以從抽象底層導出一個或多個新的具體實現,可以改變系統的行為,因此系統設計對擴展是開放的。

我們在軟體開發的過程中,一直都是提倡需求導向的。這就要求我們在設計的時候,要非常清楚地了解使用者需求,判斷需求中包含的可能的變化,以便明確在什麼情況下使用開閉原則。

關於系統可變的部分,還有一個更具體的對可變性封裝原則(Principle of Encapsulation of Variation, EVP),它從軟體工程實現的角度對開閉原則進行了進一步的解釋。 EVP要求在做系統設計的時候,對系統所有可能發生變化的部分進行評估和分類,每一個可變的因素都單獨進行封裝。

我們在實際開發過程的設計開始階段,就要羅列出來系統所有可能的行為,並把這些行為加入到抽象底層,根本就是不可能的,這麼做也是不經濟的。因此我們應該現實的接受修改擁抱變化,使我們的程式碼可以對擴展開放,對修改關閉。

好處

如果一個軟體系統符合開閉原則的,那麼從軟體工程的角度來看,它至少具有這樣的好處:

#可重複使用性好。

我們可以在軟體完成以後,仍然可以對軟體進行擴展,加入新的功能,非常靈活。因此,這個軟體系統可以透過不斷增加新的元件,來滿足不斷變化的需求。

可維護性好。

由於對於現有的軟體系統的元件,特別是它的抽象底層不去修改,因此,我們不用擔心軟體系統中原有元件的穩定性,這就使變化中的軟體系統有一定的穩定性和延續性。

以上是開閉原則是指什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:hcoder.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!