Qu'est-ce que la liaison dynamique?
En informatique, la corrélation de noms est l'association d'un identifiant, tel qu'un nom de fonction ou de variable, à une section de code ou de données. Dans le scénario le plus courant, la liaison statique, ce mappage est connu au moment de la compilation. Dans la liaison dynamique, l'objet mappé par une fonction n'est pas connu au moment de la compilation et ne peut être déterminé que pendant l'exécution du programme. Pour cette raison, la liaison dynamique est également appelée liaison tardive. Bien que la liaison dynamique offre une flexibilité qui n’est pas disponible avec la liaison statique, elle entraîne également des coûts de performances plus élevés que la liaison statique.
La liaison dynamique est étroitement liée au polymorphisme, qui fait partie de la programmation orientée objet. Le polymorphisme permet au même nom de méthode d'être implémenté de différentes manières. Si le code n'est pas écrit de telle sorte que la méthode précise ne puisse pas être déterminée au moment de la compilation, vous devez utiliser la liaison dynamique.
Par exemple, une classe "Shape" peut avoir une méthode appelée "GetArea", car chaque forme a une surface. Une sous-classe "Circle" de "Shape" implémenterait toutefois "GetArea" de la même manière que la sous-classe "Square". Par conséquent, si un nouvel objet de type "Shape" est créé et si le code appelle la méthode "GetArea" sur cette forme, le compilateur n'aura aucun moyen de savoir si la forme finira par être un cercle ou un carré. il ne saura pas quelle méthode GetArea appeler. Ceci est un exemple de liaison dynamique, car la méthode GetArea appropriée ne sera mappée qu'au moment de l'exécution, une fois que le programme aura identifié le type de forme de l'objet.
La liaison dynamique offre la possibilité d'utiliser des méthodes abstraites sans savoir quelle implémentation spécifique sera utilisée. Dans l'exemple "Shape", le code peut être écrit pour éviter les liaisons dynamiques en utilisant explicitement cette logique: Si la forme est un cercle, appelez la méthode GetArea du cercle; sinon, si la forme est un carré, appelez la méthode spécifique GetArea pour les carrés. L'avantage de la liaison dynamique est que le code est plus propre et plus facile à gérer que l'alternative. Dans l'exemple de liaison statique, il y a duplication de code et le code doit être mis à jour chaque fois qu'un nouveau type de forme est ajouté.
Les inconvénients de la liaison dynamique sont la performance et la sécurité. Dans la liaison statique, le compilateur sait exactement quel code appeler et peut optimiser le code pour qu'il s'exécute plus efficacement. La sécurité de type peut poser problème car, dans certaines implémentations de liaison dynamique, une méthode peut être appelée sur un objet qui ne la prend pas en charge. Par exemple, la méthode "GetArea" peut être appelée sur un objet qui n'est pas une forme et n'a donc aucune méthode "GetArea", ce qui peut entraîner une erreur d'exécution. La liaison statique empêcherait ce scénario en générant une erreur de compilation.