Anatra sta scrivendo un sottoinsieme di polimorfismo

15

Da Polymorphism su WIkipedia

In computer science, polymorphism is a programming language feature that allows values of different data types to be handled using a uniform interface.

Dalla digitazione anatra su Wikipedia

In computer programming with object-oriented programming languages, duck typing is a style of dynamic typing in which an object's current set of methods and properties determines the valid semantics, rather than its inheritance from a particular class or implementation of a specific interface.

La mia interpretazione è basata sulla digitazione anatra, gli oggetti metodi / proprietà determinano la semantica valida. Significa che la forma corrente degli oggetti determina l'interfaccia che mantiene.

Dal polimorfismo è possibile affermare che una funzione è polimorfica se accetta più tipi di dati diversi purché mantengano un'interfaccia.

Quindi, se una funzione può eseguire il dump, può accettare più tipi di dati diversi e operare su di essi purché tali tipi di dati abbiano i metodi / le proprietà corretti e quindi mantengano l'interfaccia.

(L'uso del termine interfaccia non è inteso come un costrutto di codice ma più come un costrutto descrittivo, documentante)

  • Qual è la relazione corretta tra ducktyping e polimorfismo?
  • Se una lingua può anatra, vuol dire che può fare il polimorfismo?
posta Raynos 25.11.2011 - 23:44
fonte

6 risposte

14

Dico che il polimorfismo è un tratto generico, che può essere implementato in diversi modi:

  • ereditarietà basata sulla classe.
  • oggetti basati su prototipi (con o senza ereditarietà)
  • digitazione anatra
  • conformità all'interfaccia (come fatto dalle interfacce di Go e implicitamente su modelli C ++)

ciascuno di essi consente al programmatore di utilizzare un singolo codice con tipi diversi, quindi tutti incarnano il concetto di polimorfismo.

    
risposta data 26.11.2011 - 12:20
fonte
7

Penso che:

Sia la tipizzazione anatra che il polimorfismo sono mezzi di indirezione / astrazione. Il polimorfismo è un concetto fondato sui tipi e sulla tipizzazione, mentre la tipizzazione delle anatre è fondata sui contratti.

Con il polimorfismo è importante cosa sia la COSA e non come si comporta (il comportamento può essere la conseguenza di ciò che è).

Nella digitazione anatra è importante come si comporta una COSA. La duck typing è più legata al concetto di oggetti come attori che scambiano messaggi, piuttosto che oggetti che hanno alcune proprietà definite.

    
risposta data 26.11.2011 - 00:26
fonte
6

La risposta è .

Duck Typing è un caso speciale di digitazione dinamica e anche se la digitazione dinamica di per sé non può essere considerato direttamente come polimorfismo (poiché è solo la proprietà del linguaggio per eseguire il controllo del tipo in fase di esecuzione piuttosto che in fase di compilazione), le tecniche che di solito sono alla base della digitazione dinamica, come late binding e invio dinamico sono caratteristici per polimorfismo .

    
risposta data 26.11.2011 - 19:45
fonte
1

La tipizzazione delle anatre non è un sottoinsieme del polimorfismo, dal momento che il polimorfismo richiede esplicitazione, che si perde nella digitazione delle anatre. Quindi la digitazione anatra ha la possibilità di "implementare" un'interfaccia, non perché abbia senso semantico ma perché si ha la stessa firma. Se la tipizzazione anatra fosse un sottoinsieme di polimorfismo, allora avrebbe tutte le proprietà del polimorfismo, inclusa la dichiarazione esplicita.

Anche la tipizzazione di anatra non è realmente un'implementazione del polimorfismo, fa parte di un diverso sistema di tipi. Solitamente si associa la digitazione anatra con un linguaggio dinamico che procede e passa un messaggio a un oggetto senza sapere se l'oggetto può gestirlo - se poi può effettivamente superare il test di digitazione anatra. Di solito si pensa al polimorfismo come implementato in fase di compilazione impostando vtables (e si può attivare se le interfacce sono diverse dalle classi). Ma ci sono molte lingue e molti modi per implementare queste funzionalità.

In una certa misura questa è una domanda filosofica. Riesci a pensare a battere a macchina come interfacce che vengono automaticamente dichiarate implicitamente? Non riesco a pensare ad alcun motivo che sia sbagliato , esattamente, ma non penso che sia probabilmente il modo più produttivo per guardarlo. Penso che la tipizzazione e le interfacce di anatra siano entrambe caratteristiche comunemente riscontrate dei sistemi di linguaggio del linguaggio di programmazione, entrambi hanno metodi di comportamento abbastanza simili, ed entrambi sono importanti per la comprensione da parte dei programmatori.

    
risposta data 26.11.2011 - 00:40
fonte
1

Sembra quasi naturale dire "Sì, se foo ha la digitazione anatra, foo ha il polimorfismo". Ma non posso dire questo sicuro al 100%, nel senso che forse è possibile trovare un esempio artificiale di tale sistema che ha la digitazione anatra ("può quack & galleggia sull'acqua == > è un'anatra ") pur non avendo il polimorfismo (" pippo, ciarlatano! "fallisce), ma sarebbero davvero artificiali e in un mondo reale, direi" Sì, se digiti anatra è presente, deve essere presente anche il polimorfismo ".

Personalmente vedo anatra che scrive come "polimorfismo fatto bene". Ciò che intendo con ciò, la cosa che esiste in un mondo di battitura a dattilo non ha bisogno di avere alcun tipo esplicito e il loro comportamento (polimorfico="stesso accesso, diverso risultato") è l'unica cosa che conta. In altre implementazioni del polimorfismo, è vincolato a tipi / interfacce / ereditarietà, quindi è "polimorfismo implementato e vincolato" non un "polimorfismo di per sé".

    
risposta data 26.11.2011 - 20:45
fonte
0

Statically typed programming languages allow earlier error checking, better enforcement of disciplined programming styles, and generation of more efficient object code than languages where all type consistency checks are performed at run time.

(B. Pierce & friends)

Quindi, come puoi notare, a questo proposito, la digitazione anatra è la digitazione dinamica di una vera corsa altrimenti di questi.

C'è un metodo per determinare il tipo che si riferisce al polimorfo, ad es. questo rende il codice più flessibile, ma in questi casi la digitazione anatra è un altro problema.

In dettaglio c'è il lambda calcolo e il calcolo lambda non tipizzato che aiutano a determinare la proprietà del calcolo e un calcolo.

Vedo anche che cose come la digitazione anatra possono aiutare se vogliamo ottenere rapidamente un risultato, ma in altre occasioni sento anche che la natura dinamica lo rende più adattabile ai bisogni, quindi posso calcolare più velocemente. Suppongo che sia giusto dire, caro, che se so davvero quello che voglio calcolare, digitato è il migliore, ma perché so cosa voglio? Hehehe ...

Questi sono i miei cinque centesimi e credo che possano fare un interessante argomento di ricerca.

    
risposta data 17.10.2018 - 11:25
fonte

Leggi altre domande sui tag