\r\n\r\n
JavaやC言語などのプログラミング言語は、オブジェクト指向プログラミング(OOP)をサポートしています。オブジェクトを使ってソフトウエアを構築することができる。ソフトウェアシステムやプログラムには、多くのオブジェクトが存在します。これらのオブジェクトは、プロパティとメソッドを持ちます。プロパティは特性を表す。メソッドは、オブジェクトが実行可能な操作を記述します。データはメソッドを使ってオブジェクトに渡されます。必要な値は、パラメータを持つメソッド呼び出しによって送信される。実際のメソッドの実装はメソッド定義にあります。メソッド呼び出しとメソッド定義の間にリンクが存在する。バインディングと呼ばれるものです。バインディングは2種類あります。静的バインディングと動的バインディングである。静的バインディングと動的バインディングの重要な違いは、静的バインディングではコンパイル時にバインディングが解決されるのに対し、動的バインディングはランタイム(つまり実際の実行時)に解決されることである。今回は、この2つの結合機構の違いについて解説する。
1. 概要と主な違い 2. 静的バインディングとは 3. 動的バインディングとは 4. 静的バインディングと動的バインディングの類似点 5. 並べて比較 - 表形式での静的バインディングと動的バインディング 6. まとめ
バインディングは、メソッド呼び出しとメソッド定義の間のリンクです。
図01:スタティックバインディングとダイナミックバインディング
Javaで書かれた次のプログラムを参照してください。
パブリックAグレード
パブリックボイドメソッド1(){。
System.out.println ("メソッド1").
}
パブリックボイドメソッド2(){。
System.out.println ("方法2").
}
public static void main(String[]args){...
A obj = new A ().
対象メソッド1()。
対象方法2()。
}
}
以上の手順で、タイプAのオブジェクトが作成されます。そして、メソッド1とメソッド2が呼ばれる。どのメソッドを呼んで実行させるかを決めることをバインディングという。obj.method1()はmethod1()を、obj.method2()はmethod2()を呼び出すと記述すること。このリンクは拘束力があります。
静的バインディングでは、コンパイル時にコンパイラによってバインディングが解決される。アーリーバインディングとも呼ばれる。バインディングは、プログラムが実際に実行される前に発生します。静的バインディングは、メソッドのオーバーロード時に発生します。Javaで書かれた次のプログラムを参照してください。
コモンボイド計算
public void amount (int x, int y) {.
System.out.println ("and is", x + y).
}
一般的な空白と (double x, double y) {。
System.out.println ("and is", x + y).
}
public static void main(String[]args){...
計算 cal = 新しい計算()。
和(2,3)を計算する。
和(5.1、6.4)を計算する。
}
}
上記のプログラムによれば、2つの整数が渡されると、両方の整数を含むメソッドが呼び出されることになる。2 つの double 値が渡されると、2 つの double 値に対応するメソッドが呼び出されます。この結合処理は、コンパイル時に行われる。コンパイラは、2つの整数値でsumメソッドを呼び出して和(2,3)を計算すべきことを認識しています。cal (5.1,6.4)の場合、倍精度値2つでsumメソッドを呼び出すことになる。必要な情報はすべて実行前にわかるので、プログラムの実行効率とスピードが向上します。
ダイナミックバインディングでは、コンパイラはコンパイル時にバインディングを解決しない。バインディングは実行時に行われる。ポストバインディングとも呼ばれる。動的バインディングはメソッドの書き換えで発生する。Javaで書かれたプログラムを指します。
パブリッククラスshape (){
Public invalid drawing (){
System.out.println ("draw").
}
}
public class Circle() extends the shape {.
Public invalid drawing (){
System.out.println ("draw circle").
}
}
public class Triangle() extends the shape {.
Public invalid drawing (){
System.out.println ("drawing triangles").
}
}
公開模擬試験
public static void main(String[]args){...
シェイプs。
s = new shape ().
s. プロット()。
s = new circle ().
s. プロット()。
s = new triangle ().
s. プロット()。
}
}
上のプログラムによると、Shapeクラスはdraw()メソッドを持っています。CircleクラスとTriangleクラスは、Shapeクラスを継承しています。円クラスと三角クラスは、Shape クラスのプロパティとメソッドを継承することができます。したがって、クラスShapeはスーパークラスまたは親クラスとなる。円形クラスと三角形クラスはサブクラスまたは派生クラスです。これらのクラスもdraw()メソッドと独自の実装を持つ。そのため、スーパークラスの draw() メソッドがオーバーライドされています。
mainメソッドでは、別のオブジェクトが呼び出されます。Shape型の参照変数があり、それがsである。そして、sは特定のクラスに応じたメソッドを呼び出す。コンパイル時、コンパイラはスーパークラスの draw メソッドのみを参照します。実際に実行が始まると、これによって異なる描画方法が実行されることになる。まず、sはShape型のオブジェクトを指すことになる。そのため、Shapeクラスのdrawメソッドを呼び出すことになります。そして、s は Circle 型のオブジェクトを指し、Circle クラスの draw メソッドを呼び出すことになる。最後に、s は Triangle 型のオブジェクトを参照し、Triangle クラスの draw メソッドを呼び出します。参照変数がShape型であっても、バインディングはたまたまオブジェクト型に依存する。この考え方は、ダイナミックバインディングと呼ばれています。実行時に情報を提供するため、静的バインディングと比較して実行速度が遅くなります。
静的バインディングと動的バインディング | |
静的バインディングは、コンパイル時に関数を呼び出すのに必要なすべての情報を収集するタイプのバインディングです。 | ダイナミックバインディングは、関数を呼び出すために必要な情報を実行時にすべて収集するタイプのバインディングである。 |
バインディングタイム | |
静的バインディングはコンパイル時に発生する。 | 動的バインディングは実行時に発生する。 |
機能 | |
スタティックバインディングは、バインディングにタイプ情報を使用します。 | ダイナミックバインディングは、バインディングを解決するためにオブジェクトを使用します。 |
実際のオブジェクト | |
静的バインディングは、バインディングに実際のオブジェクトを使用しません。 | 実際のオブジェクトを使用してバインドするダイナミックバインディング。 |
同義語 | |
スタティックバインディングは、アーリーバインディングとも呼ばれる。 | ダイナミックバインディングはポストバインディングとも呼ばれる。 |
インプリメンテーション | |
静的バインディングは非常に高速に実行されます。 | ダイナミックバインディングの実行速度は非常に低い。 |
例 | |
静的バインディングは、メソッドのオーバーロードに使用されます。 | メソッドの書き換えにはダイナミックバインディングを使用します。 |
メソッドコールとメソッド定義の間にリンクがあります。バインディングと呼ばれるものです。バインディングには、スタティックバインディングとダイナミックバインディングと呼ばれる2つのタイプがあります。静的バインディングと動的バインディングの違いは、静的バインディングはコンパイル時に解決されるのに対し、動的バインディングはランタイム、すなわち実際の実行時に解決されることである。実行前に必要な情報が提供されるため、静的バインディングは動的バインディングに比べ、実行速度が速い。
この記事のPDF版をダウンロードし、引用の仕方に従ってオフラインで使用することができます。PDF版のダウンロードはこちら:静的バインディングと動的バインディングの違いについて