カプセル化と情報隠蔽

あまぴょんさんは,「カプセル化と情報隠蔽は違う」と書かれています.
一方moneyさんは,「情報隠蔽とカプセル化って違うもの?」と書かれています(最後に「見事玉砕」となっていますが,ここでは無視(^^;させて頂きます).
このような混乱は,概念とそれに対する名前が厳密に定義されているわけではないから起こっているのだと思います.ある人が言うカプセル化と別の人が言うカプセル化は果たして全く同じ概念を表しているのか? ということです.あるいは,同じ概念が人によって違う名称で表現されているかもしれない,ということです.
実際のところ,「Dictionary of Object Technology(isbn:1884842097)」でカプセル化(encapsulation)を引いてみると,SynonymContrast withの両方に情報隠蔽(information hiding)が記述されています.面白いですねぇ.
ということで,Synonym派の代表としてオブジェクト指向という考え方がどのようなものかを深く深ーく追求したMartin/Odellによる「オブジェクト指向方法序説 基盤編(isbn:4810185923)」の用語集から,カプセル化情報隠蔽の説明を引用してみましょう.

カプセル化(Encapsulation)
特別に用意された操作のみに,オブジェクトのデータへのアクセスを許す防護的な包み込み.カプセル化では,オブジェクトのインタフェースは許された操作に関して知らされる.オブジェクトに関するその他の全ての詳細はユーザから隠される.このことがしばしば情報隠蔽といわれる理由である.
情報隠蔽(Information Hiding)
オブジェクトの実装を隠す考え方.許された操作を通じて公開のインタフェースが使える.カプセル化と同義でしばしば使われる.

一部日本語としてどうよ? っていうのはともかくとして,ここでのカプセル化情報隠蔽は,同じ概念を異なった側面から表現しているだけのように見えます.それは,Martin/Odellのカプセル化という言葉の定義が明らかに情報隠蔽の定義を含んでいるからでしょう.「防護的な包み込み」という部分ですね.これをただの「包み込み」としていないところがポイント.
一方で,あまぴょんさんが引用しているカプセル化の定義は情報隠蔽について言及していません.情報隠蔽しているカプセル化もあるし,情報隠蔽していないカプセル化もある,ということです.
まとめると,狭義のカプセル化情報隠蔽と同義,広義のカプセル化は必ずしも情報隠蔽を意味しない,ということではないでしょうか.


このような混乱を防ぐために行われるのが標準化です.この場合は,OMGによるUMLを頼るのがベターでしょう.ということでUMLの仕様書を見てみると...
うーみゅ,カプセル化情報隠蔽も避けている感じ? UML1.5の仕様書を検索しても一カ所ずつひっかかるだけで,少なくとも用語の定義はしていないっぽい.OMGの別のドキュメントで定義されている可能性もなくはありませんが...
つまり,この手の話をするのは難しいと言うことですね.(^^;