Dans les langages compilés, la différence est flagrante.
Java :
//early binding:
public create_a_foo(*args) {
return new Foo(args)
}
my_foo = create_a_foo();
//late binding:
public create_something(Class klass, *args) {
klass.new_instance(args)
}
my_foo = create_something(Foo);
Dans le premier exemple, le compilateur peut faire toutes sortes de choses intéressantes au moment de la compilation. Dans le second, il faut juste espérer que celui qui utilise la méthode le fasse de manière responsable. (Bien entendu, les JVM les plus récentes prennent en charge la fonction Class<? extends Foo> klass
structure, ce qui peut réduire considérablement ce risque).
Un autre avantage est que les IDE peuvent établir un lien direct avec la définition de la classe, puisqu'elle est déclarée directement dans la méthode. L'appel à la création de quelque chose (Foo) pourrait être _très loin de la définition de la méthode, et si vous regardez la définition de la méthode, il pourrait être agréable de voir l'implémentation.
Le principal avantage de la liaison tardive est qu'elle facilite des choses comme l'inversion de contrôle, ainsi que certaines autres utilisations du polymorphisme et du duck-typing (si votre langage supporte ces choses).
0 votes
Reliure tardive et précoce
6 votes
Aurais-je tort de dire que early = appel direct à une fonction et late = appel à une fonction via un pointeur de fonction ? Je ne cesse de m'étonner de la façon dont les programmeurs ont la capacité de prendre des concepts simples et de les faire paraître beaucoup plus complexes qu'ils ne le sont (pour montrer leur intelligence ?). La programmation est par nature un domaine d'étude très facile jusqu'à ce que vous arriviez à des choses comme la création d'un type de flottant ou le développement de compilateurs.
0 votes
Duplicata possible de Reliure précoce et tardive