OO設計的開閉原則

2021-05-27 10:05:48 字數 1521 閱讀 1481

the open-closed principle (ocp) - oo設計的開閉原則

software entities (classes, modules, function, etc.) should be open for extension, but closed for modification.

軟體實體(模組,類,方法等)應該對擴充套件開放,對修改關閉。

開閉原則(ocp:open-closed principle)是指在進行物件導向設計(ood:object oriented design)中,設計類或其他程式單位時,應該遵循:

-對擴充套件開放(open)

-對修改關閉(closed)

的設計原則。

開閉原則是判斷物件導向設計是否正確的最基本的原理之一。

根據開閉原則,在設計乙個軟體系統模組(類,方法)的時候

,應該可以在不修改原有的模組(修改關閉)的基礎上,能擴充套件其功能(擴充套件開放)。

- 擴充套件開放:某模組的功能是可擴充套件的,則該模組是擴充套件開放的。軟體系統的功能上的可擴充套件性要求模組是擴充套件開放的。

- 修改關閉:某模組被其他模組呼叫,如果該模組的源**不允許修改,則該模組修改關閉的。軟體系統的功能上的穩定性,持續性要求是修改關閉的。

這也是系統設計需要遵循開閉原則的原因

1)穩定性。開閉原則要求擴充套件功能不修改原來的**,這可以讓軟體系統在變化中保持穩定。

2)擴充套件性。開閉原則要求對擴充套件開放,通過擴充套件提供新的或改變原有的功能,讓軟體系統具有靈活的可擴充套件性。

遵循開閉原則的系統設計,可以讓軟體系統可復用,並且易於維護。

開閉原則的實現方法

為了滿足開閉原則的 對修改關閉(closed for modification) 原則以及擴充套件開放(open for extension) 原則,

應該對軟體系統中的不變的部分加以抽象,在物件導向的設計中,

- 可以把這些不變的部分加以抽象成不變的介面,這些不變的介面可以應對未來的擴充套件;

- 介面的最小功能設計原則。根據這個原則,原有的介面要麼可以應對未來的擴充套件;不足的部分可以通過定義新的介面來實現;

- 模組之間的呼叫通過抽象介面進行,這樣即使實現層發生變化,也無需修改呼叫方的**。

介面可以被復用,但介面的實現卻不一定能被復用。介面是穩定的,關閉的,但介面的實現是可變的,開放的。可以通過對介面的不同實現以及類的繼承行為等為系統增加新的或改變系統原來的功能,實現軟體系統的柔軟擴充套件。

簡單地說,軟體系統是否有良好的介面(抽象)設計是判斷軟體系統是否滿足開閉原則的一種重要的判斷基準。現在多把開閉原則等同於面向介面的軟體設計。

開閉原則的相對性

軟體系統的構建是乙個需要不斷重構的過程,在這個過程中,模組的功能抽象,模組與模組間的關係,都不會從一開始就非常清晰明了,所以構建100%滿足開閉原則的軟體系統是相當困難的,這就是開閉原則的相對性。但在設計過程中,通過對模組功能的抽象(介面定義),模組之間的關係的抽象(通過介面呼叫),抽象與實現的分離(面向介面的程式設計)等,可以盡量接近滿足開閉原則。

設計原則 開閉原則

開閉原則的含義是對擴充套件開放,對修改關閉。意思就是在遇到新的需求或者變動的時候,提倡對原 擴充套件使其滿足新的需求,不提倡修改原 來達到目的。乙個專案不可能在開發完畢後就一成不變了,它總會有新的需求或者對老的需求進行更新。這樣就要盡可能的遵從設計原則中的開閉原則,這個原則告訴我們,要盡量避免對原 ...

設計原則 開閉原則

怎樣的 改動才能被定義為 擴充套件 怎樣的 改動才定義為 修改 怎樣才算滿足或者違反開閉原則?修改 意味著違反開閉原則嗎?開閉原則是最難理解,也是最難掌握,同時也是最有用的一條原則。這條原則並不是看幾篇文章,理解了其概念就能掌握和靈活應用的。要想深入理解,掌握這條原則,需要大量的實戰。開閉原則,英文...

OO 設計原則

msil msil是.net framework中最重要的概念之一。通過msil可以預知不同.net語言的執行效率應該是接近的。通過msil匯程式設計序 ilasm.exe 和msil反匯程式設計序 dilasm.exe 可以觀察.net應用的內部構造,因此也可以用於.net應用 元件的破解。ild...