メッセージ指向のイロハ

鈴木雄介(アークランプ)
2008-01-10 06:00:00
  • このエントリーをはてなブックマークに追加

メッセージとは何か

 メッセージとは何だろうか。まずメッセージには送り手と受け手がいるはずだ。そして送り手は受け手に対して伝えたいことがあるはずだ。そこで、受け手側に伝わるよう、しかるべき方法で何かを発することになる。その何か、というのが「メッセージ」といわれるものとなる。

 ここから転じてプログラミングの中でオブジェクト、サービスといった単位同士が通信して転送する指示のことをメッセージと称する。なお実際にメッセージが送付されることを「メッセージ・パッシング」と称する。

 メッセージの受け手には何らかの責務があり、送り手は依頼があるためにメッセージを送信する。受け手にはメッセージを受け取るためのインターフェースが用意されており、このインターフェースに従ったメッセージが届けられることを前提としている。そのため送り手は受け手が規定しているインターフェースに従ったメッセージを組み立てて送信することになる。受け手がメッセージを受け取ると、これが起動トリガーとなり何らかの処理が行われるのだ。

 オブジェクト指向であればオブジェクト間に現れるメソッド呼び出しであり、SOA(サービス指向アーキテクチャ)であればサービス間でWebサービスなどを使った呼び出しということになる。

メッセージを利用するメリット

 では、こうしたメッセージ・パッシングを利用するメリットとは何だろうか。前述のとおりメッセージ・パッシングはオブジェクト指向の基本といえる。つまりオブジェクト指向のメリットは、そのままメッセージ・パッシングを利用するメリットといって良い。オブジェクト指向のメリットはいささか旧聞に属するだろうが以下のような理解が一般的だろう。

  • オブジェクトとメッセージという概念が人間に理解しやすい
  • オブジェクトごとの責務が明確になり品質が向上する
  • オブジェクトという単位で再利用性を向上させることができる

 簡単にいえば「処理をオブジェクト単位でまとめると、分かりやすく、間違いにくく、使いやすく便利だね」ということだ。

 このように処理をある単位でまとめて扱いたいというニーズは昔からある。オブジェクト指向ができるまでは構造化プログラミングという考え方が一般的であった。

 構造化プログラミングはプログラムをツリー構造にまとめる。まず大まかな処理を記述するメインルーチンがあり、そこから詳細な処理を記述するサブルーチンへと階層化して管理した。たとえばメインルーチンには「サブルーチンAを繰り返す」であるとか「値が1であればサブルーチンB、値が2であればサブルーチンCを動かす」というように記述した。こうした構造化の考え方自体は今でも一般的なテクニックだ。たとえば1つのメソッドに処理を書きすぎないように適度に分割するというのはプログラミングの初歩である。

 こうした構造化の手法は一見すると簡単そうなのだが、ある程度以上の複雑な処理を論理的に細分化して考えていくことは簡単なことではない。読者でも論理的な思考が苦手という方もいるだろう。複雑な処理の構造化では、いわゆる数学や物理学的な独特のセンスが要求されるのだ。

 そこで、より簡単にプログラミングが可能なように、メッセージパッシングのアイデアを取り入れながら、オブジェクト指向という考え方がまとめられた。よく聞く言葉だが、次ページでは改めてその意味を考えてみたい。

  • 新着記事
  • 特集
  • ブログ