Open Closed Principle (OCP)
Software entities such as class, modules, functions should be open for extension, but closed for modification.
直接英翻中就是「對擴展開放,對修改關閉。」
換句話說,允許擴展但不允許修改原有的 code。在現有程式運作得好好、通過測試的狀況下,應該以擴展的方式新增系統功能,而非修改原有的 code。OCP 著重於軟體彈性,遵守這原則能在增加新功能時確保原本行為不會被更動,減少在原本運作良好的部分產生 bug 的風險。不過遵循 OCP 可能會引入新的抽象層、增加 code 的複雜度,所以並不是整個系統所有地方都該遵守,而是找出最有可能改變的地方才使用 OCP,沒必要的地方使用也是種浪費。
OCP 是設計層次上的原則。
舉個例子:較 high level 的 class 應該以 interface 使用較 low level 的 class,而非直接使用 low level 的 class。如此需要支援其他種 low level 實作時,便能直接實作 interface 並修改產生 instance 的地方,即可做到「不修改原本 high level 的 code,而能擴充 low level 實作」。
另外像瀏覽器的 plugin、Linux kernel 的 module(即使 C 語言不是所謂的物件導向語言,依然能以物件導向的概念撰寫)同樣都運用了 OCP。