「カプセル化」の解説

capsule.gif
新人向けオブジェクト指向の説明の続き。
今日目にした IT Pro の『矢沢流 これで納得! オブジェクト指向入門』 第2回(下) という記事の中に気になる記述があった。
「カプセル化」に関して、クラスのメンバーの中のクラスを使う人に見せる必要のないものを隠すことであり、Java では private を使うのがその方法である、のように解説してあった。
うーん。それって「カプセル化」というより、「情報隠蔽」の解説ではなかろうか。
私の認識だと:

  • カプセル化 (encapsulation):
    構造と振る舞いをグループ化して1つの抽象物を定義し,異なる抽象物と互いに別物として分離すること.
  • 情報隠蔽 (information hiding):
    細かい構造を外部から隠蔽し,外部からは公開された手続きでしか操作ができないようにすることで部分の独立性を高めること.

「カプセル化」と「情報隠蔽」は、概念としては別物だと思う。
「情報隠蔽」は「カプセル化」のときにその分離の手段の一つとして使われることが多い、ってだけではなかろうか。
Java で言えば、「情報隠蔽」の一手段として用意されているものが、private などのアクセスコントロールで、「カプセル化」の一手段として用意されているものは、class だろう。
Java の class は、まさに「構造と振る舞いをグループ化して1つの抽象物を定義し,異なる抽象物と互いに別物として分離する」手段を提供するものであり、また、その中に分離の一手段としての「情報隠蔽」の仕組みも内蔵している。
矢沢氏の解説は、勿論初学者向けのぶっちゃけた解説であり、正確に伝えることより判りやすく伝えることが重要な場面、いうことは理解できるのだが、どうなんだろう。
私なら寧ろ、「『カプセル化』とは、ぶっちゃけ class のことです」のように説明するかも知れない。