OCP(Open-Closed Principle)について(2)

Bertrand Meyer先生のオブジェクト指向入門 (ASCII SOFTWARE SCIENCE Programming Paradigm)によると、

  • モジュールがまだ拡張可能な場合、そのモジュールは開放されているという.
  • モジュールをほかのモジュールから使用できる場合、そのモジュールは閉鎖されているという.

ということになっています.
ここで拡張可能とは、フィールドや機能(メソッド)が追加できるということ.
これはいいでしょう.
開放のほうはしごく理解しやすいのですが閉鎖のほうは微妙です.
モジュールをほかのモジュールから使用できる……って、そりゃできるよ
と突っ込んでしまいたくなります.
ただもう少し読み進めると、インターフェースが安定している、
言語モジュールの場合はほかのモジュールが使えるようにライブラリに保存される、
とあって、要はモジュールを公開するためにモジュールに対する変更を禁ずるということです
......よね?


で、一見相反する2つの要求を満たすための仕掛けが継承だったり多態だったり
すると理解してたのですが......あってるよね?


なんでこんな話をしてるかというと、今やってるプロジェクトの
顧客SEさんで、やたらとオブジェクト指向をプッシュするくせに、
ここらへんのことが全然分かってなかったりするから.
枯れたモジュールをやたらと修正したがって、それに対するリスクを説明しても、
そんなのは十分テストしてください、だとさ.


だったらテストはあんたがやれよ、と言いたくなる. 言えないけど.