En programación informática , el tiempo de enlace describe cuándo se establece una asociación en el software entre dos entidades de datos o código . Esto puede ocurrir antes o después de que comience la ejecución . El enlace temprano (también llamado enlace estático) ocurre antes de que el programa comience a ejecutarse y no puede cambiar durante el tiempo de ejecución. El enlace tardío (también llamado enlace dinámico o virtual) ocurre mientras el programa se está ejecutando. [ 1 ] El tiempo de enlace se aplica a cualquier tipo de enlace, incluyendo nombre , memoria (es decir, a través de malloc ) y tipo (es decir, para literales ).
Ejemplos
El siguiente código Java demuestra ambos tiempos de enlace. El método foose enlaza tempranamente al bloque de código que sigue a la declaración de la función en la línea 3. La llamada a addse enlaza tardíamente ya que Listes una interfaz , por lo que listdebe referirse a un subtipo de ella. listpuede hacer referencia a un LinkedList, un ArrayList, o algún otro subtipo de List. El método al que hace referencia addno se conoce hasta el tiempo de ejecución.
import java.util.List ;public void foo ( List < String > list ) {lista.agregar ( "bar " ) ;}
Relacionado
Estática tardía
El enlace estático tardío es una variante de enlace que se sitúa entre el enlace estático y el dinámico. Considere el siguiente ejemplo de PHP :
clase A { public static $word = "hola" ; public static function hola () { print self :: $word ; } }clase B extiende A { public static $word = "adiós" ; }B :: hola ();En este ejemplo, el intérprete de PHP vincula la palabra clave selfdentro A::hello()de la clase A, y por lo tanto la llamada B::hello()produce la cadena "hello". Si la semántica de self::$wordse hubiera basado en la vinculación estática tardía, el resultado habría sido "bye".
A partir de la versión 5.3 de PHP, se admite el enlace estático tardío. [ 2 ] Específicamente, si self::$worden lo anterior se cambiara a static::$wordcomo se muestra en el siguiente bloque, donde la palabra clave staticsolo se enlazaría en tiempo de ejecución, entonces el resultado de la llamada a B::hello()sería "bye":
clase A { public static $word = "hola" ; public static function hola () { print static :: $word ; } }clase B extiende A { public static $word = "adiós" ; }B :: hola ();Véase también
Referencias
- ↑ Ingeniería de sistemas y software — Vocabulario ISO/IEC/IEEE 24765:2010(E) , IEEE, 15 de diciembre de 2010
- ↑ "Enlaces estáticos tardíos" . Consultado el 3 de julio de 2013 .
- conceptos de lenguajes de programación