カプセル化と情報隠蔽

カプセル化(encapsulation):属性と振る舞いをひとつにまとめること
情報隠蔽(information hiding):外部に公開する必要のある情報以外隠すこと


はずかしながら、カプセル化情報隠蔽という言葉の概念ごっちゃにしてました。
(追記:やっぱり再びごっちゃにすることにしました→後述)


"フィールドをprivateにして、アクセサメソッド(セッタゲッタ)をpublicにする"ようなことが、カプセル化だと思ってました。いや、たしかにそれはカプセル化の例として間違ってはいないのですが、言葉の意味を考えると

隠すこと=カプセル化

でなくて、

まとめること=カプセル化
隠すこと=情報隠蔽

ということのようです。カプセル化ってのは、フィールドとメソッドを一緒に定義する、ぶっちゃけクラスそのものの機能ですね。


んー、まぁ、今までなんとなく誤解してきたんだから、一生誤解したままでも生きてはいけたかもしれないが。あるいは、誤解解釈が主流をしめていれば、コミュニケーションにも困らないかもと。。。


あと、なんか「情報隠蔽」という日本語がイクナイ。こう談合、もみけしみたいな悪いイメージを感じる。悪いイメージなために、そんなのが重要な機能なわけないでしょ、と勝手に脳内補正が働き、カプセル化の意味が曲解される助けになっていたに違いない(言い訳)。


あと、Webサイトや本をぱらぱら見てみると、ごっちゃにしてるのもあるが、ちゃんと書いてるのもある。ちゃんと書いてるのを過去いくつも読みながらも、自分の脳内解釈が修正されなかったのは、「知ってると思って自動的に検証をパス」してたんだろーなー。正しいとなると(すでに知ってるつもりだと)人はとたんに疑わなくなる、考えなくなる、、、そんなこともふと思ったよ。


参考
http://www.nextindex.net/java/capsulate.html
http://sumim.no-ip.com:8080/wiki/490