開放/閉鎖原則(OCP)
開放/閉鎖原則は
オブジェクト指向プログラミングにおける重要な設計指針であり、ソフトウェア要素(クラスや
モジュール、関数など)が拡張には開かれ、修正には閉ざされるべきだと提唱しています。この原則に従うことで、ソフトウェアの動作を変更することなく、新しい機能を追加することが簡単になります。
1. 開放/閉鎖原則の背景
この原則は1988年に
バートランド・メイヤーによって提案され、後にロバート・C・マーチンらによっても取り上げられました。メイヤーの視点では、
モジュールは新しいフィールドや関数を追加できるため「開かれている」とされ、一方で情報隠蔽が施され、安定した仕様が提供されることで「閉じられている」となります。これにより、親クラスの不変の仕様を継承しつつ、新しい機能を各子クラスで実装することが可能になります。
2. メイヤーの開放/閉鎖原則
メイヤーは、親クラスが共通の仕様を定義し、それを基にして子孫クラスで特定の実装を行うべきであると主張しました。これにより、親クラスの変数を通して様々な子クラスのインスタンスを扱うことができるため、クライアントは変更を意識せずに利用できます。このアプローチは実装の継承(具象メソッドの継承)を重要視し、これにより深い継承構造を形成します。
3. マーチンの開放/閉鎖原則
一方でマーチンは1990年代に入ると、インターフェース中心の設計にシフトしました。マーチンの原則では、抽象メソッドのみで構成された不変のインターフェースを定義し、それに従った様々な兄弟クラスを用意します。このアプローチにより、実行時にインターフェースの異なるインスタンスを切り替えることで、動的な
ポリモーフィズムを実現します。彼の原則は、クラスの継承をしないインターフェースの実装に重きを置いています。
4. 開放/閉鎖原則の重要性
この開放/閉鎖原則は、稼働中のソフトウェアにおいて特に重要視されます。
ソースコードを変更することなく機能を追加できるため、変更後に必要な品質検査(コードレビューやユニットテストなど)を再実施する負担が軽減されます。これにより、多くのソフトウェアがより堅牢なものとなり、メンテナンスの容易さを享受することができます。
5. 関連項目と参考資料
開放/閉鎖原則は
SOLID原則の一部として知られ、
GRASPや継承、
ポリモーフィズム、インターフェースなど多岐にわたる関連項目と結びついています。メイヤーの著作『Object-Oriented Software Construction』やマーチンの論文『The Open-Closed Principle』などが、これらの概念を深く理解するための良い教材です。
開放/閉鎖原則を理解し実践することは、ソフトウェア開発者にとって、堅牢でメンテナンスしやすいシステムを構築するために欠かせないスキルと言えるでしょう。