Article de reference

Temps de liaison

En programmation informatique , le moment de la liaison décrit l'établissement d'une association entre deux entités de données ou de code . Cette association peut avoir lieu ava...

En programmation informatique , le moment de la liaison décrit l'établissement d'une association entre deux entités de données ou de code . Cette association peut avoir lieu avant ou après le début de l'exécution . La liaison statique (ou liaison anticipée) se produit avant le démarrage du programme et ne peut être modifiée pendant son exécution. La liaison dynamique (ou liaison virtuelle) se produit pendant l'exécution du programme. Le moment de la liaison s'applique à tout type de liaison, y compris les liaisons de noms , de mémoire (par exemple, via `malloc` ) et de types (par exemple, pour les littéraux ).

Exemples

Le code Java suivant illustre les deux types de liaison de données. La méthode fooest liée de manière anticipée au bloc de code qui suit la déclaration de fonction à la ligne 3. L'appel à ` addis` est lié de manière tardive car ` Listis` est une interface ; `is` doit donc listfaire référence à un sous-type de celle-ci. ` listis` peut faire référence à un `T` LinkedList, un `T` ArrayListou un autre sous-type de ` ListI`. La méthode référencée par ` addis` n'est connue qu'à l'exécution.

import java.util.List ;public void foo ( List < String > list ) {liste.ajouter ( "bar " ) ;}

En rapport

Statique tardive

La liaison statique tardive est une variante de liaison intermédiaire entre la liaison statique et la liaison dynamique. Prenons l' exemple PHP suivant :

classe A { public static $word = "bonjour" ; public static function bonjour () { print self :: $word ; } }classe B étend A { public static $word = "bye" ; }B :: bonjour ();

Dans cet exemple, l'interpréteur PHP associe le mot-clé ` selfthis` A::hello()à la classe `class` A, et l'appel à `this` B::hello()produit donc la chaîne « hello ». Si la sémantique de `this` self::$wordavait reposé sur une liaison statique tardive, le résultat aurait été « bye ».

À partir de la version 5.3 de PHP, la liaison statique tardive est prise en charge. Plus précisément, si self::$wordle code ci-dessus était modifié static::$wordcomme indiqué dans le bloc suivant, où le mot-clé staticne serait lié qu'à l'exécution, alors le résultat de l'appel B::hello()serait « bye » :

classe A { public static $word = "bonjour" ; public static function bonjour () { print static :: $word ; } }classe B étend A { public static $word = "bye" ; }B :: bonjour ();