¿Qué es el enlace dinámico?
En informática, el enlace de nombre es la asociación de un identificador, como una función o nombre de variable, a una sección de código o datos. En el escenario más común, el enlace estático, esta asignación se conoce en tiempo de compilación. En el enlace dinámico, el objeto asignado 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, el enlace dinámico también se llama enlace tardío. Aunque el enlace dinámico ofrece flexibilidad no disponible con el enlace estático, también conlleva más costos de rendimiento que el enlace estático.
El enlace dinámico está estrechamente relacionado con el polimorfismo, que forma 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 no se pueda determinar el método preciso en tiempo de compilación, entonces se debe usar el enlace dinámico.
Por ejemplo, una clase "Forma" podría tener un método llamado "GetArea", porque cada forma tiene un área. Sin embargo, una subclase "Circle" de "Shape" implementaría "GetArea" de forma diferente a como lo haría una subclase "Square". Por lo tanto, si se crea un nuevo objeto del 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 es 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 mediante el uso explícito de esta lógica: si la forma es un círculo, 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 de la unión dinámica 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 invocar un método en un objeto que no lo admite. Por ejemplo, el método "GetArea" se puede invocar en un objeto que no es una forma y, por lo tanto, no tiene el método "GetArea", lo que podría provocar un error en tiempo de ejecución. El enlace estático evitaría este escenario al generar un error de compilación.