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

要するに、オブジェクトとは何か

導入

まとめをしましょう。

「オブジェクトとは何か」という問いへの答えを一言でいうのは簡単ではありません。どうしてもというなら、オブジェクトとは「実体や概念として確かに存在するもの」のことです。でも、これではいまいちよくわかりませんね。

オブジェクトの性質を列挙するという手段が、おそらくオブジェクトを理解するための近道だと思います。そこで、ここまでのまとめとして、オブジェクトの性質はどのようなものだったのか確認していきましょう。

解説
オブジェクトは、
状態と振る舞いをもつ

オブジェクトは状態機械の一種です。その状態はカプセル化によって隠蔽されていて、状態がどのように実装されているのか知ることは無意味です。つまりブラックボックスです。

オブジェクトは振る舞い(=メソッド)によってその状態を変えます。それ以外の方法でオブジェクトの状態を変える方法は(オブジェクト自身が許可しない限り)ありません。

オブジェクトは、
メッセージによって起動される

オブジェクトのメソッドを起動する引き金はメッセージです。メッセージには、

  • 対象となるオブジェクトはどれか
  • 起動するメソッドはどれか
  • メソッドに与えるパラメータは何か

という情報が含まれます。オブジェクトはメッセージを受け取ったときに該当するメソッドを実行することによって動作し、その状態を変えていきます。

オブジェクトは受け身であるという点に注意してください。一番はじめにメッセージを起動するのは通常のオブジェクトではありません。それは普通、main 関数かイベントループか、またはイベントループを内包したオブジェクトです。

オブジェクトは、
協調動作する

システムはオブジェクトの集合体です。メッセージを受けたオブジェクトは、普通、起動されたメソッドの中から別のオブジェクトへメッセージを再送信します。システム中では、メッセージが連鎖反応を起こすのです。

オブジェクトは、
クラスに属するインスタンスである

オブジェクトは、必ずそのひな形であるクラスに属しています。つまり、オブジェクトはクラスの定義通りに生成された実体(=インスタンス)です。同じ種類のオブジェクト、つまり同じクラスに属するインスタンスはいくつでも作り出すことができます。

オブジェクトは、
クラス階層による多様性をもつ

クラスをたくさん集めてその共通点で分類すると、階層構造になります。階層構造はオブジェクトの多様性(=ポリモーフィズム)を表現しています。

オブジェクトは、
より単純なオブジェクトで構成される

複雑なオブジェクトは、より単純なオブジェクトの集合体です。つまり、複雑なオブジェクトはそれ自体がシステムです。

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