The Open-Closed Principle (OCP) 開放閉鎖原則


開放閉鎖原則とは

ソフトウェアの実体は、拡張に対して開いていなければならず、しかし一方で、変更に対しては閉じていなければならない。

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