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

オブジェクトの連携

導入

システムはオブジェクトの集合体です。オブジェクト同士が協調して動作することによって、結局システム全体が動作しています。では、オブジェクト同士はどのような仕組みで協調しあっているのでしょうか。

用語
このトピックでは次の用語を覚えます:
  • メッセージ (message)
  • アクターモデル (actor model)
解説

オブジェクト指向では、システムはオブジェクトの組み合わせとして実現されます。いくつものオブジェクトが集まって1つのシステムを形作るのです。

オブジェクト同士が協調動作する必要があります。そのためには、オブジェクト同士の情報交換が必要になります。あるときは、あるオブジェクトが別のオブジェクトに対して何かの動作を依頼するでしょう。あるいは、あるオブジェクトが別のオブジェクトに対して何らかの通知をするかも知れません。とにかく、オブジェクトからオブジェクトへの情報の受け渡しが必要です。

このように、オブジェクト間で受け渡される情報のことをメッセージと呼びます。そして、オブジェクト同士がメッセージの交換によって協調動作するようなシステムの形態をアクターモデルと言います。そう言われると、オブジェクト1つ1つがアクター(actor=役者)に見えてきません?役者同士が台詞を交換したり、相手にあわせて演技したりしながら舞台というシステムが進行していくイメージです。

アクターモデルでは、オブジェクトは独立しています。それぞれのオブジェクトは並列動作が可能です。マルチプロセッサ環境なら、オブジェクト毎に CPU を割り当てても構いません。受け取ったメッセージを適切に処理することさえできれば良いのです。メッセージを処理するときに他のオブジェクトの助けが必要なら、「助けて!」とメッセージすることもできます。

さて、オブジェクトはメッセージを受け取ると、そのメッセージを処理するためのメソッドを起動します。しかし実際のプログラミングでは、オブジェクトにメッセージを送るという動作は相手のオブジェクトのメソッドを実行するという動作で代用されます。メソッドの実装は関数なので、戻り値を持つ場合もあります。このときは、戻り値は相手のオブジェクトからこちらのオブジェクトへ送られるメッセージです。つまり、戻り値のあるメソッドではメッセージが往復します。

オブジェクトは受け身です。どのオブジェクトも、ほかのオブジェクトからのメッセージを待っています。この堂々巡りを解決するためには、どこかで引き金が引かれなければなりません。

1つの方法は、メイン関数が最初のメッセージを送信することです。そのメッセージを受け取った最初のオブジェクトは、それを自分で処理するか、他のオブジェクトの助けを借りるためにメッセージを送ります。システムの中をたくさんのメッセージが駆けめぐった後、最後にはメイン関数に実行完了のメッセージが(メソッドの戻り値として)戻ってきます。

もう1つの方法は、イベントループを使うことです。GUI 環境用のプログラムはこれに当たります。ユーザーによる操作(クリックとかキー入力とか)をイベントループで受け取り、これらを処理することができるオブジェクトにメッセージで知らせます。

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