開放閉鎖原則とは
ソフトウェアの実体は、拡張に対して開いていなければならず、しかし一方で、変更に対しては閉じていなければならない。
Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.
A module should be open for extension but closed for modification.[by Martin]
内容
1988年にBertrand Meyerが提唱したオブジェクト指向の最も基本的で重要な原則
- 拡張に対して開いているとは、「モジュールが拡張可能な状態にあること」
- 変更に対して閉じているとは、「モジュール自体は不可侵で、何人たりとも変更できないこと」
つまり、ソフトウェアの実体に対する機能追加は、既存コードの修正ではなく、コードの追加により機能を拡張可能であり、機能の追加による変更が、他のモジュールに影響を与えてはならないという基本的規則。
OOP においては、継承や多様性による差分プログラムによりこの原則を実現するが、現実的には、機能追加による影響を完全に無くすことはできないため、適切な抽象化やインターフェースベースのプログラミングなどにより、変更に対する柔軟性(変更容易性と影響範囲の局在化)を考慮した設計とすることが重要であることを示している。
参考文献
より詳細なレポートは以下
http://www.objectmentor.com/resources/articles/ocp.pdf