¿Qué es el enlace dinámico?

En informática, la vinculación de nombres es la asociación de un identificador, como un nombre de función o variable, a una sección de código o datos. En el escenario más común, el enlace estático, este mapeo se conoce en el momento de la compilación. En el enlace dinámico, el objeto mapeado por una función no se conoce en tiempo de compilación y solo se puede determinar durante el tiempo de ejecución del programa. Por esta razón, también se denomina enlace tardío. Aunque ofrece una flexibilidad que no está disponible con la unión estática, también implica más costos de rendimiento que la unión estática.

El enlace dinámico está estrechamente relacionado con el polimorfismo, que es parte de la programación orientada a objetos. El polimorfismo permite implementar el mismo nombre de método de diferentes maneras. Si el código no está escrito de tal manera que el método preciso no se pueda determinar en tiempo de compilación, entonces se debe usar el enlace dinámico.

Por ejemplo, una clase «Forma» puede tener un método llamado «GetArea», porque cada forma tiene un área. Sin embargo, una subclase de “Círculo” de “Forma” implementaría “GetArea” de manera diferente a como lo haría una subclase de “Cuadrado”. Por lo tanto, si se crea un nuevo objeto de tipo «Forma» y si el código llama al método «GetArea» en esa forma, el compilador no tendrá forma de saber si la forma terminará siendo un círculo o un cuadrado, y por lo tanto no sabrá a qué método GetArea llamar. Este es un ejemplo de enlace dinámico, porque el método GetArea correcto se asignará solo en tiempo de ejecución, después de que el programa sepa qué tipo de forma tiene el objeto.

El enlace dinámico permite la flexibilidad de usar métodos abstractos sin saber qué implementación específica se usará. En el ejemplo de «Forma», el código podría escribirse para evitar el enlace dinámico utilizando explícitamente esta lógica: si la forma es un círculo, entonces llame al método GetArea del círculo; de lo contrario, si la forma es un cuadrado, llame al método GetArea específico para cuadrados. El beneficio del enlace dinámico es que el código es más limpio y más fácil de mantener que la alternativa. En el ejemplo de enlace estático, hay duplicación de código y el código debe actualizarse cada vez que se agrega un nuevo tipo de forma.

Las desventajas son el rendimiento y la seguridad. En el enlace estático, el compilador sabe exactamente qué código llamar y puede optimizar el código para que se ejecute de manera más eficiente. La seguridad de tipos puede ser un problema porque, en algunas implementaciones de enlace dinámico, se puede llamar a un método en un objeto que no admite el método. Por ejemplo, el método «GetArea» se puede llamar en un objeto que no es una forma y, por lo tanto, no tiene el método «GetArea», lo que podría generar un error en tiempo de ejecución. El enlace estático evitaría este escenario al generar un error de compilación.