2017-09-30 4 views
0

En liaison tardive, le nom d'une méthode est lié à un type lors de l'exécution. En quoi est-ce différent du typage dynamique?Le typage dynamique est-il identique à la liaison dynamique (retardée)?

+0

Eh bien, certainement pas. Vous essayez de comparer un mécanisme OOP spécifique pour lier les noms de méthodes avec des types lors de l'exécution avec une stratégie fondamentale pour vérifier les types en général. Cependant, les deux techniques ont une réduction de la sécurité de type en commun. – ftor

Répondre

0

Le typage dynamique signifie que vous n'avez pas besoin de déclarer le type d'une variable; une variable peut contenir des valeurs de n'importe quel type et le type est déterminé au moment de l'exécution lorsque la variable est utilisée. La plupart des langages de script utilisent le typage dynamique: Javascript, PHP, Python. Cela contraste avec le typage statique, qui est utilisé en C, C++ et Java. Cependant, les langages OO avec typage statique permettent une forme limitée de dynanisme, car une classe peut avoir des sous-classes. En Java, une variable déclarée comme contenant une classe peut également contenir n'importe laquelle de ses sous-classes; en C++, un pointeur vers une classe de base peut également pointer vers un objet d'une classe dérivée.

La liaison tardive fait référence à la sélection des méthodes d'une fonction polymorphe. Si vous avez une classe et une sous-classe, et liez une méthode à une instance de l'une de ces classes, utilise-t-elle la classe qui a effectué la liaison (qui pourrait être la classe parent) ou la classe réelle de l'objet. Une liaison précoce signifie qu'elle utilise la classe qui a effectué la liaison, une liaison tardive signifie qu'elle utilise la classe réelle de l'objet. Javascript n'a pas réellement de classes, donc dans ce cas il fait référence au prototype de la chaîne prototype qui contient la fonction qui a effectué la liaison de méthode.

Les deux concepts sont évidemment liés. Il n'y a aucun intérêt à une liaison tardive si une variable ne peut contenir qu'un objet d'un seul type, de sorte que la liaison tardive dépend du typage dynamique. En C++, vous obtenez une liaison anticipée lorsque vous appelez une fonction membre via une variable d'objet, par ex. var.func(). Pour obtenir une liaison tardive, la fonction membre doit être déclarée virtual et vous devez l'appeler via un pointeur, ptr->func(). En Java et Javascript, vous obtenez normalement une liaison tardive, mais il est possible d'utiliser Function.prototype.bind() pour appeler la méthode d'un prototype spécifique.

Early and Late Binding montre comment la liaison précoce et tardive peut être implémentée dans les prototypes Javascript.

EDIT:

Oops, ce lien ne fonctionne plus, et il ne semble pas avoir obtenu archivé dans la Wayback Machine .. En ce moment, la meilleure discussion que je peux trouver est au génie logiciel SE: What is early and late binding?

+0

Il s'agit d'une répartition statique et dynamique. Une liaison tardive signifie que lorsque j'appelle une méthode sur un objet, le compilateur n'a aucune idée si la méthode peut même être appelée i.e si une telle méthode existe quelque part. Ceci est reporté à l'exécution où le nom de la méthode se lie à une méthode réelle, puis la répartition dynamique est effectuée, ce qui signifie que l'implémentation de la bonne méthode est sélectionnée en fonction du type de l'objet réel. Si une telle fonction n'existe pas, vous obtenez une erreur d'exécution. Le typage dynamique implique-t-il une liaison tardive? Puis-je avoir un typage statique et une liaison tardive en même temps? – LearningMath

+0

Je pense que si vous voulez entrer dans ce niveau de détail, vous devriez demander sur cs.stackexchange.com. – Barmar

+0

@Barmar Votre lien est brisé, ce site n'existe pas et n'est pas archivé. Pouvez-vous recommander une autre ressource? – ygoe