ソフトな情報隠蔽

インターフェイスには記述されていないけど、実装クラスには存在するpublicメソッド。例えば、あるクラスライブラリで、Factoryを使ってインスタンスを得て、インターフェイスでそれを受け取るケース。インスタンス的にはpublicメソッドを持っていても、インターフェイスには持っていない。

こうすることにより、そのメソッドへのアクセスパスを隠すコトができます。いざ、ライブラリ内で使用したくなったら、実装型にキャストするなり何なりで、使う事ができるようになります。

http://d.hatena.ne.jp/daisuke-m/20081009/1223553945

なるほど、おもしろいなー。
通常使用する経路で触る限りは特定のメソッドのみしか触れないけど、そうでない経路で触れば全部触れると。


jQueryUI 1.6でやっている情報隠蔽も形は違えどソフトな情報隠蔽なのかもしれない。
そもそもハードな情報隠蔽をやりにくい言語だけど。
jQuery UI1.5→1.6での変更点(1.6RC2時点) - 文殊堂
jQueryUI 1.6でのメソッドprivate化回避コード - 文殊堂
面白いのでJava等と違ってハードな情報隠蔽をやりにくい言語で
情報隠蔽をしているようなものの実装についてみてみようかと思う。
ぱっと思いつく所ではPerlMooseだけどそんなにPerlは得意でないので、
とりあえずJavaScript版のJooseのコードを読んでみるとする。

割とすぐ追記

あれ、Mooseってprivateみたいなメソッドの隠蔽ない?