OCP(Open-Closed Principle)について(2)
Bertrand Meyer先生のオブジェクト指向入門 (ASCII SOFTWARE SCIENCE Programming Paradigm)によると、
- モジュールがまだ拡張可能な場合、そのモジュールは開放されているという.
- モジュールをほかのモジュールから使用できる場合、そのモジュールは閉鎖されているという.
ということになっています.
ここで拡張可能とは、フィールドや機能(メソッド)が追加できるということ.
これはいいでしょう.
開放のほうはしごく理解しやすいのですが閉鎖のほうは微妙です.
モジュールをほかのモジュールから使用できる……って、そりゃできるよ
と突っ込んでしまいたくなります.
ただもう少し読み進めると、インターフェースが安定している、
言語モジュールの場合はほかのモジュールが使えるようにライブラリに保存される、
とあって、要はモジュールを公開するためにモジュールに対する変更を禁ずるということです
......よね?
で、一見相反する2つの要求を満たすための仕掛けが継承だったり多態だったり
すると理解してたのですが......あってるよね?
なんでこんな話をしてるかというと、今やってるプロジェクトの
顧客SEさんで、やたらとオブジェクト指向をプッシュするくせに、
ここらへんのことが全然分かってなかったりするから.
枯れたモジュールをやたらと修正したがって、それに対するリスクを説明しても、
そんなのは十分テストしてください、だとさ.
だったらテストはあんたがやれよ、と言いたくなる. 言えないけど.