Domanda

Capisco come funziona l'implementazione del binding dinamico e anche la differenza tra il binding statico e dinamico, sto solo avendo problemi ad avvolgere il mio cervello attorno alla definizione di binding dinamico. Fondamentalmente diverso da quello che è un tipo di associazione runtime.

È stato utile?

Soluzione

Fondamentalmente, l'associazione dinamica significa che l'indirizzo per una chiamata di funzione non è hardcoded nel segmento di codice del programma quando viene tradotto in linguaggio assembly, e viene invece ottenuto da altrove, ad esempio variabili di stack, ricerche di array, ecc.

A un livello superiore, se si dispone di una riga di codice:

foo(bar) //Calls a funciton

Se è possibile sapere al momento della compilazione esattamente quale funzione verrà chiamata, si tratta di un'associazione statica. Se foo potrebbe significare più funzioni a seconda di cose non conoscibili in fase di compilazione, questo è un legame dinamico.

Altri suggerimenti

Capisco che è evidente nel polimorfismo. In genere quando si creano più classi che derivano da una classe base. Se ognuna delle classi derivate contiene una funzione che ognuna usa. La classe base può essere utilizzata per eseguire una funzione delle classi derivate e verrà chiamata correttamente la funzione corretta.

Ad esempio:

class Animal
{
void talk();
}

class Dog extends Animal
{
public void talk() { System.out.println("woof"); }
}

class Cat extends Animal
{
public void talk() { System.out.println("meow"); }
}

....
Animal zoo[2];
zoo[0] = new Dog();
zoo[1] = new Cat();

for(Animal animalToggle: zoo)
{
animalToggle.talk();
}

stamperà: trama meow

Spero che la mia interpretazione sia di aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top