0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

動的バインディング(Dynamic Binding)をTypeScriptで理解する

Posted at

はじめに

動的バインディング(Dynamic Binding)、またはレイトバインディング(Late Binding)とは、プログラムの実行時にどのメソッドや関数を呼び出すかを決定する技術です。これは、特にオブジェクト指向プログラミングにおいて重要な概念であり、ポリモーフィズムを実現するための基盤となります。

動的バインディングの概念

動的バインディングでは、メソッドの呼び出しが実行時に解決されます。これは、コンパイル時にメソッドの呼び出しを決定する静的バインディング(Static Binding)とは対照的です。動的バインディングにより、サブクラスのオーバーライドされたメソッドが適切に呼び出されることが保証されます。

動的バインディングのルール

動的バインディングのルールは次の通りです:

1. 基底クラスの参照:

メソッド呼び出しは基底クラスの型に基づいて行われます。

2. 実際のオブジェクトのメソッド:

実際に呼び出されるメソッドは、実行時にオブジェクトの実際の型に基づいて決定されます。

3. オーバーライドの優先:

サブクラスでオーバーライドされたメソッドが存在する場合、そのメソッドが呼び出されます。

TypeScriptでの動的バインディング

TypeScriptでも動的バインディングはサポートされており、オブジェクト指向プログラミングの一部として利用できます。以下に、動的バインディングを示すTypeScriptの例を示します。

基底クラスと派生クラスの定義

class Animal {
    speak(): void {
        console.log("Animal makes a sound");
    }
}

class Dog extends Animal {
    speak(): void {
        console.log("Dog barks");
    }
}

class Cat extends Animal {
    speak(): void {
        console.log("Cat meows");
    }
}

動的バインディングの例

function makeAnimalSpeak(animal: Animal): void {
    animal.speak(); // このメソッド呼び出しは動的にバインドされる
}

const myDog: Animal = new Dog();
const myCat: Animal = new Cat();

makeAnimalSpeak(myDog); // 出力: Dog barks
makeAnimalSpeak(myCat); // 出力: Cat meows

詳細な説明

1. 基底クラスの参照:

const myDog: Animal = new Dog();
const myCat: Animal = new Cat();

ここでは、myDogmyCat の型が Animal であり、基底クラスの型に基づいて参照されています。

2. 実際のオブジェクトのメソッド:

makeAnimalSpeak(myDog); // 出力: Dog barks
makeAnimalSpeak(myCat); // 出力: Cat meows

実際のオブジェクトの型(DogCat)に基づいて、適切な speak メソッドが実行されます。これが動的バインディングの核です。

3. オーバーライドの優先:

class Dog extends Animal {
    speak(): void {
        console.log("Dog barks");
    }
}

サブクラスで speak メソッドがオーバーライドされているため、DogCat のインスタンスが渡された場合、それぞれの speak メソッドが呼び出されます。

まとめ

動的バインディングは、実行時にメソッド呼び出しを解決する技術であり、ポリモーフィズムを実現するための重要な仕組みです。TypeScriptでは、クラスの継承とメソッドのオーバーライドを利用して、動的バインディングを簡単に実現できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?