Du polymorphisme sur WIkipedia
En informatique, le polymorphisme est une fonctionnalité du langage de programmation qui permet de gérer les valeurs de différents types de données à l'aide d'une interface uniforme.
De la saisie de canard sur Wikipedia
En programmation informatique avec des langages de programmation orientés objet, la frappe de canard est un style de frappe dynamique dans lequel l'ensemble actuel de méthodes et de propriétés d'un objet détermine la sémantique valide, plutôt que son héritage d'une classe particulière ou la mise en œuvre d'une interface spécifique.
Mon interprétation est que sur la base du typage canard, les méthodes / propriétés des objets déterminent la sémantique valide. Cela signifie que la forme actuelle de l'objet détermine l'interface qu'il maintient.
Du polymorphisme, vous pouvez dire qu'une fonction est polymorphe si elle accepte plusieurs types de données différents tant qu'ils maintiennent une interface.
Donc, si une fonction peut esquiver le type, elle peut accepter plusieurs types de données différents et les utiliser tant que ces types de données ont les bonnes méthodes / propriétés et maintiennent ainsi l'interface.
(L'utilisation du terme interface n'est pas conçue comme une construction de code mais plutôt comme une construction descriptive et documentée)
- Quelle est la relation correcte entre le typage de canard et le polymorphisme?
- Si un langage peut être de type canard, cela signifie-t-il qu'il peut faire du polymorphisme?
door.close()
ettiger.close()
Réponses:
Je dis que le polymorphisme est un trait générique, qui peut être mis en œuvre de plusieurs façons:
chacun d'eux permet au programmeur d'utiliser un code unique avec différents types, donc tous incarnent le concept de polymorphisme.
la source
Je pense que:
Le typage du canard et le polymorphisme sont tous deux des moyens d'indirection / abstraction. Le polymorphisme est un concept fondé sur les types et le typage tandis que le typage du canard est fondé sur des contrats.
Avec le polymorphisme, il est important de savoir ce qu'est la CHOSE et non comment elle se comporte (son comportement peut être la conséquence de ce qu'elle est).
En tapant du canard, il est important de savoir comment une chose se comporte. Le typage de canard est plus lié au concept des objets en tant qu'acteurs qui échangent des messages, plutôt que des objets qui ont des propriétés définies.
la source
La réponse est OUI .
Duck Typing est un cas particulier de typage dynamique , et même si le typage dynamique en soi ne peut pas être directement considéré comme un polymorphisme (car c'est la propriété du langage d'effectuer une vérification de type au moment de l'exécution plutôt qu'au moment de la compilation), les techniques qui habituellement sous-tendent le typage dynamique, cette liaison tardive et cette répartition dynamique sont caractéristiques du polymorphisme .
la source
Le typage de canard n'est pas tout à fait un sous-ensemble du polymorphisme, car le polymorphisme nécessite une explication, qui est perdue dans le typage de canard. Le typage canard a donc la chance de "mettre en œuvre" une "interface" non pas parce que cela a un sens sémantique mais parce que vous avez la même signature. Si le typage du canard était un sous-ensemble du polymorphisme, il aurait toutes les propriétés du polymorphisme, y compris la déclaration explicite.
Le typage canard n'est pas non plus vraiment une implémentation du polymorphisme, il fait partie d'un système de types différent. Habituellement, vous associez la frappe de canard à un langage dynamique qui va de l'avant et transmet un message à un objet sans savoir si l'objet peut le gérer - s'il le peut, il a effectivement réussi le test de frappe de canard. Habituellement, vous pensez que le polymorphisme est implémenté au moment de la compilation en configurant vtables (et itables si les interfaces sont différentes des classes). Mais il existe BEAUCOUP de langues et de nombreuses façons de mettre en œuvre ces fonctionnalités.
Dans une certaine mesure, c'est une question philosophique. Pouvez-vous considérer le typage canard comme des interfaces qui sont automatiquement déclarées implicitement? Je ne peux penser à aucune raison qui soit fausse , exactement, mais je ne pense pas que ce soit probablement la façon la plus productive de voir les choses. Je pense que le typage de canard et les interfaces sont deux caractéristiques couramment rencontrées dans les systèmes de type du langage de programmation, les deux ont des façons de se comporter assez similaires, et les deux sont importants pour les programmeurs à comprendre.
la source
Il semble presque naturel de dire "Oui, si foo a un typage canard, foo a un polymorphisme". Mais je ne peux pas dire cela à 100%, dans le sens où il est peut-être possible de trouver des exemples artificiels d'un tel système qui a la typographie du canard ("peut-il charlatan && peut-il flotter sur l'eau ==> c'est un Duck ") tout en n'ayant pas de polymorphisme (" foo, quack! "Échoue), mais ils seraient vraiment artificiels et dans un monde réel, je dirais" Oui, si le typage de canard est présent, le polymorphisme doit également être présent ".
Personnellement, je vois le typage de canard comme "un polymorphisme bien fait". Ce que je veux dire par là, les choses qui existent dans un monde de typage de canard n'ont pas besoin d'avoir de types explicites et leur comportement (polymorphe = "même accès, résultat différent") est la seule chose qui compte. Dans d'autres implémentations du polymorphisme, il est contraint aux types / interfaces / héritage, il est donc "polymorphisme implémenté et contraint" et non pas un "polymorphisme en soi".
la source
(B. Pierce et amis)
Donc, comme vous pouvez le constater, à cet égard, la frappe de canard est une frappe dynamique qui fonctionne vraiment autrement.
Il existe une méthode pour déterminer le type qui se rapporte au polymorphisme, par exemple, qui rend le code plus flexible, mais le typage canard est un autre problème dans ces cas.
Dans les détails, il y a le calcul lambda typé et le calcul lambda non typé qui aident à déterminer la propriété du calcul et d'un calcul.
Je vois également que des choses comme la frappe de canard peuvent aider si nous voulons simplement obtenir un résultat rapide, mais à d'autres occasions, je pense également que la nature dynamique le rend plus adaptable aux besoins, donc je peux calculer plus rapidement. Je suppose que c'est juste pour dire, mon cher, que si je sais déjà vraiment ce que je veux calculer, la frappe est la meilleure, mais pourquoi est-ce que je sais ce que je veux? Hehehe ...
C'est mes cinq cents et je suppose que cela peut faire un sujet de recherche intéressant.
la source