Quelle est la différence entre le Début et la Fin de la Liaison?
Quelle est la différence entre le début et la fin de la liaison?
- la Fin et au début de liaison
- Serais-je tort de dire au début de l' = direct, appel de fonction, tandis que la fin = appel de la fonction par le biais d'un pointeur de fonction? Il ne cesse jamais de me stupéfier comment les programmeurs ont un moyen de prendre des concepts simples et en les faisant paraître plus complexe que ce qu'ils sont (comme un spectacle de l'intelligence?). La programmation est intrinsèquement très facile domaine de l'étude jusqu'à ce que vous arriviez à des choses comme la façon dont un type float ou du développement de compilateurs.
- Double Possible de Début et à la fin de liaison
Vous devez vous connecter pour publier un commentaire.
La réponse courte est que le début (ou statique) de liaison se réfère au moment de la compilation de liaison et de fin (ou dynamique) de liaison se réfère à l'exécution de liaison (par exemple, lorsque vous utilisez de la réflexion).
Dans les langages compilés, la différence est frappante.
Java:
Dans le premier exemple, le compilateur peut faire toutes sortes de trucs sympa au moment de la compilation. Dans le second, vous avez juste à espérer que celui qui utilise la méthode ne fait de façon responsable. (Bien sûr, les nouveaux Jvm soutenir le
Class<? extends Foo> klass
de la structure, ce qui peut réduire considérablement ce risque).Un autre avantage est que les Ide peuvent hotlink à la définition de la classe, puisqu'il est déclaré dans la méthode. L'appel à create_something(Foo) peut être très loin de la définition de la méthode, et si vous êtes à la recherche à la définition de la méthode, il pourrait être sympa de voir la mise en œuvre.
Le principal avantage de la liaison tardive est qu'il fait des choses comme l'inversion de contrôle plus facile, ainsi que certaines autres utilisations de polymorphisme et le canard de frappe (si votre langue prend en charge de telles choses).
Prises directement à partir de http://word.mvps.org/fAQs/InterDev/EarlyvsLateBinding.htm
Similaire, mais plus détaillée de la réponse de Herbert Schildt C++ livre:-
Début de liaison se réfère à des événements qui se produisent au moment de la compilation. En essence, au début de liaison se produit lorsque toutes les informations nécessaires à l'appel d'une fonction est connue au moment de la compilation. (Autrement dit, la liaison anticipée signifie qu'un objet et un appel de fonction sont liés lors de la compilation.) Exemples de début de la liaison normale des appels de fonction (y compris les fonctions de bibliothèque standard), surchargé d'appels de fonction, et les opérateurs surchargés. Le principal avantage de la liaison anticipée est l'efficacité. Parce que toute l'information nécessaire à l'appel d'une fonction est déterminée au moment de la compilation, ces types d'appels de fonction sont très rapides.
À l'opposé de la liaison anticipée est la liaison tardive. La liaison tardive se réfère
pour les appels de fonction qui ne sont pas résolues jusqu'à l'exécution. Les fonctions virtuelles sont utilisées pour réaliser la liaison tardive. Comme vous le savez, lorsque l'accès se fait via une base de pointeur ou de référence, la fonction virtuelle appelle en réalité est déterminée par le type de l'objet pointé par le pointeur. Parce que dans la plupart des cas, cela ne peut pas être déterminé au moment de la compilation, l'objet et la fonction ne sont pas liés jusqu'à l'exécution. Le principal avantage de la liaison tardive est la flexibilité. Contrairement au début de la liaison, la liaison tardive permet de créer des programmes qui peuvent répondre à des événements qui se produisent pendant que le programme s'exécute sans avoir à créer une
grande quantité de la "contingence code." Gardez à l'esprit qu'en raison d'un appel de fonction n'est pas résolu jusqu'à l'exécution, la liaison tardive peut le rendre un peu plus lent, le temps d'exécution.
Cependant, aujourd'hui, des ordinateurs rapides ont réduit de façon significative les temps d'exécution liées à la liaison tardive.
Dans des langages interprétés, la différence est un peu plus subtil.
Ruby:
Parce que Ruby est (généralement) pas compilé, il n'y a pas un compilateur de faire la chouette avant de trucs. La croissance de JRuby signifie que plus de Ruby est compilé ces jours-ci, cependant, faire agir plus comme Java, ci-dessus.
Le problème avec IDEs tient toujours: une plate-forme comme Eclipse peut rechercher des définitions de classe si vous-code, mais ne peut pas si vous les laissez à l'appelant.
Inversion de contrôle n'est pas très populaire en Ruby, probablement en raison de son extrême souplesse d'exécution, mais les Rails de la liaison tardive pour réduire la quantité de configuration nécessaires pour obtenir votre application.
Ce sera imprimée
Au début de la liaison, le compilateur aura accès à toutes les méthodes
l'enfant et de l'adolescent
mais à la fin de la liaison (à l'exécution), il va vérifier pour des méthodes qui sont remplacées
au moment de l'exécution.
Donc method1(de l'enfant -- début de la liaison) sera remplacée par la method1 de l'adulte au moment de l'exécution(liaison tardive)
Puis il va mettre en place method1 de l'enfant puisqu'il n'est pas method1 dans method1 dans l'adolescence.
Noter que si l'enfant n'a pas une method1 ensuite le code dans le main ne serait pas de la compilation.
Le temps de compilation polymorphisme aussi appelée la surcharge ou la liaison anticipée ou statique de la liaison lorsque nous avons le même nom de méthode avec des comportements différents. Par la mise en œuvre de multiples prototype de la même méthode et le comportement différent se produit en elle. Début de la liaison se réfère première compilation du programme .
Mais à la fin de la liaison de l'objet est l'exécution se passe dans le programme. Aussi appelé liaison Dynamique ou de la substitution ou de polymorphisme d'Exécution.