ダイナミックバインディングとメッセージパッシングの主な違いは、ダイナミックバインディングが実行時にプロシージャコールを関連するコードにリンクする方法であるのに対し、メッセージパッシングはオブジェクト間でメッセージを交換する方法である点です。
オブジェクト指向プログラミング(OOP)は、コンピュータの実世界のシナリオをモデル化することができる主要なプログラミングパラダイムです。
さらに、プログラムの再利用や管理がしやすくなる。
OOPでは、オブジェクトは属性とメソッドを持つ。
属性はプロパティを定義し、メソッドは動作を定義する。
ほとんどの高級プログラミング言語がOOPの機能をサポートしており、ダイナミックバインディングとメッセージパッシングがその2つの機能です。
ダイナミックバインディングとは
ダイナミックバインディングとは、プロシージャコールとそのコードを実行時にリンクさせる方法です。
言い換えれば、実行時に発生する。
動的バインディングはレイトバインディングとも呼ばれる.以下にその例を示す。
図1: Shapeクラス
図2:Circleクラス
図3: 三角形クラス
Shapeクラスはdrawメソッドを持ち、CircleとTriangleクラスはShapeクラスを継承しています。
したがって、Shapeクラスが親クラスで、CircleとTriangleクラスが子クラスになります。
これらのクラスも、それぞれ独自の実装で draw メソッドを持っています。
mainメソッドでは、sはShape型の参照変数です。
まず、s は Shape 型のオブジェクトを指しています。
したがって、Shape クラスの draw メソッドを呼び出すことになる。
次に、s は Circle 型のオブジェクトを指している。
したがって、Circle クラスの draw メソッドが呼び出されます。
最後に、s は Triangle 型のオブジェクトを指しているので、Triangle クラスの draw メソッドを呼び出すことになる。
実行時に異なる draw メソッドが実行されます。
参照変数がShape型であっても、実行時にそれに応じてバインディングが行われる。
したがって、これをダイナミックバインディングと呼ぶ。
メッセージパッシングとは
メッセージパッシングとは、オブジェクト間でメッセージのやり取りを行う手法のことです。
オブジェクトは、人間と同じようにオブジェクト間でメッセージを送受信することができます。
プログラミングでは、関数やメソッドがメッセージの受け渡しを支援する。
OOPだけでなく、プロセス間通信や並列計算においても、プロセスや他のリソースとの間でメッセージパッシングが行われる。
メッセージパッシングには同期型と非同期型があります。
同期メッセージパッシングでは、メッセージをやり取りする際に、送信者と受信者が互いに待つ必要があります。
非同期通信では、メッセージの受け渡しの際にお互いを待つ必要はない。
メッセージの受け渡しをしながら、それぞれ独自の計算を行うことができる。
ダイナミックバインディングとメッセージパッシングの違い
定義
オブジェクト指向プログラミングでオブジェクト間のメッセージ交換を行うメッセージパッシングに対して、実行時にのみ実行されるプロシージャコールを関連するコードにリンクする方法をダイナミックバインディングという。
これが、ダイナミックバインディングとメッセージパッシングの大きな違いです。
使用方法
ダイナミックバインディングとメッセージパッシングのもう一つの違いは、ダイナミックバインディングが実行時に同じオブジェクトを使って異なるコードを実行できるのに対し、メッセージパッシングはオブジェクト間の通信を開発できることです。
結論
ダイナミックバインディングとメッセージパッシングの大きな違いは、ダイナミックバインディングが実行時にプロシージャの呼び出しと関連するコードをリンクさせる方法であるのに対し、メッセージパッシングはオブジェクト間でメッセージを交換する方法であることです。