プリンシプル

プリンシプル OCP原則

open/closed principle. 開放/閉鎖。

オブジェクト指向プログラミングにおいて、プログラムの単位(クラスなど)は、拡張でき、変更した場合も他のコードへ影響しないようにするべきである。

ソフトウェアの一部の処理を変更する場合に、拡張できない場合は、作り直すなど他の方法を検討する必要があるだろう。拡張が容易で変更できた場合も、他のコードへ影響する場合は、他のコードが正しく動作するか確認作業(テスト)が必要になる。

オブジェクト指向のプログラミング言語では、この考え方が根底にあり、豊富な知見やデザインパターン(Strategy, Observer, Template Method)などがある。

変更が行われるまで変更の内容はわからないため、必要になるまではシンプルにすべきである。つまり、OCPは適用しすぎれば、無駄なコードを書くだけになる。

OCPをどこまで適用するかは「変化しそうな部分を予測する」程度が良い。例えば、文章作成アプリで、マーカー機能(背景に色を付ける)や下線機能があるとする。二重下線やアンダーマーカーのような機能は追加されるかわからないが、文字への修飾する機能が追加されそうなことは予測できる。これがわかれば、流動的要素(変化するもの、例の場合は追加されるクラスの関数)をカプセル化できる。