ショートカット
ファシリテーター × あり方
コーディングの向こう側
Hello, ANOTHER world!
オブジェクト指向のはなし
プログラミングのはなし
C言語実力診断クイズ
eSkillBooks
オブジェクト指向のはなし

状態と機能の融合

導入

適切にデザインされたオブジェクトは、その内部状態について関心を持つ必要はなく、むしろ内部状態がどうなっているかなど気にしない方が良いのです。

用語
このトピックでは次の用語を覚えます:
  • カプセル化 (encapsulation)
  • メソッド (method)
解説

例えば、今あなたはコンピューターのモニターに向かっていることでしょう。モニターには電源スイッチ・ブラウン管(または液晶)表示・画質調整・音量調節・音声入力用マイクなどのインターフェイスがありますね。ちょっと画面が暗いなと思ったら、明るさ調節インターフェイス(それはボタンかも知れないし、つまみかもしれません)を使って明るめの色になるように調節することができます。その結果はもちろん画面上で確認できますが、このとき新しい明るさの設定値が内部状態として保存されるはずです。

画面の明るさ設定の内部状態は、実際にはどのような方法で記憶されているのでしょうか?これはモニターを外からみているだけではわかりません。しかし、わかる必要はないのです。実際、モニターを使うには、モニターの「使い方」だけがわかれば良いはずで、それがきちんと役割を果たしてくれさえすれば、内側の構造がどうなっていようが構うことはありません。

一般に、オブジェクトはインターフェイスと内部状態を持っています。オブジェクトの利用はインターフェイスを通して行われます。つまり、インターフェイスを通してオブジェクトへの入出力が行われます。このとき内部状態が変化する場合がありますが、オブジェクトの利用者はそれが具体的にどのような変化なのか気にする必要はありません。

また、オブジェクトの利用者はその内部状態に直接アクセスすることができません。インターフェイスに従うことが、オブジェクトを操作する唯一の方法となります。

このように、オブジェクトの「使い方」であるインターフェイスだけを公開し、内部状態については外部からインターフェイスを通さずに直接操作することができないようにすることをカプセル化と言います。また、このようなインターフェイスのことをメソッドと言います。

情報をメソッドによって隠す技法を「カプセル化」と言う

実は、オブジェクトの存在が発見されカプセル化が発明されるよりも以前から、インターフェイスによって「情報を覆い隠す」という発想はありました。今度は、カプセル化というより洗練された技法が誕生する前はいったいどうやっていたのか、考えてみましょう。

(「オブジェクト指向のはなし」は1999年2月から2000年4月にかけて作成されたコンテンツです。)