Entendiendo la vinculación dinámica
-
05-07-2019 - |
Pregunta
Entiendo cómo funciona la implementación del enlace dinámico y también la diferencia entre el enlace estático y el dinámico, simplemente estoy teniendo problemas para envolver mi cerebro en torno a la definición de enlace dinámico. Básicamente, aparte de que es un tipo de enlace en tiempo de ejecución.
Solución
Básicamente, el enlace dinámico significa que la dirección para una llamada de función no está codificada en el segmento de código de su programa cuando se traduce al lenguaje ensamblador, y en su lugar se obtiene de otra parte, es decir, las variables de la pila, las búsquedas de matrices, etc.
En un nivel superior, si tiene una línea de código:
foo(bar) //Calls a funciton
Si se puede saber en tiempo de compilación exactamente a qué función llamará, esto es un enlace estático. Si foo podría significar múltiples funciones dependiendo de cosas que no se pueden conocer en el momento de la compilación, esto es un enlace dinámico.
Otros consejos
Entiendo que es evidente en el polimorfismo. Normalmente cuando se crean varias clases que derivan de una clase base. Si cada una de las clases derivadas contiene una función que cada una usa. La clase base se puede usar para ejecutar una función de las clases derivadas y se llamará correctamente a la función correcta.
Por ejemplo:
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();
}
imprimirá: guau miau
Espero que mi interpretación ayude.