En informática, el polimorfismo es una característica del lenguaje de programación que permite manejar valores de diferentes tipos de datos utilizando una interfaz uniforme.
De pato escribiendo en Wikipedia
En la programación de computadoras con lenguajes de programación orientados a objetos, la escritura de pato es un estilo de escritura dinámica en el que el conjunto actual de métodos y propiedades de un objeto determina la semántica válida, en lugar de su herencia de una clase particular o implementación de una interfaz específica.
Mi interpretación es que, basándose en el tipeo de los patos, los métodos / propiedades de los objetos determinan la semántica válida. Lo que significa que la forma actual de los objetos determina la interfaz que mantiene.
A partir del polimorfismo, puede decir que una función es polimórfica si acepta múltiples tipos de datos diferentes siempre que mantengan una interfaz.
Entonces, si una función puede eludir el tipo, puede aceptar múltiples tipos de datos diferentes y operar en ellos siempre y cuando esos tipos de datos tengan los métodos / propiedades correctos y así mantener la interfaz.
(El uso del término interfaz no se entiende como una construcción de código sino más bien como una construcción descriptiva y documentadora)
- ¿Cuál es la relación correcta entre ducktyping y polimorfismo?
- Si un idioma puede esquivar el tipo, ¿significa que puede hacer polimorfismo?
door.close()
ytiger.close()
Respuestas:
Digo que el polimorfismo es un rasgo genérico, que se puede implementar de varias maneras:
cada uno de ellos permite al programador usar un solo código con diferentes tipos, por lo que todos encarnan el concepto de polimorfismo.
fuente
Creo que:
Tanto la tipificación de patos como el polimorfismo son medios de indirección / abstracción. El polimorfismo es un concepto basado en tipos y tipificación, mientras que la tipificación de pato se basa en contratos.
Con el polimorfismo es importante qué es la COSA y no cómo se comporta (su comportamiento puede ser la consecuencia de lo que es).
En la escritura de patos es importante cómo se comporta una COSA. La escritura de pato está más ligada al concepto de objetos como actores que intercambian mensajes, en lugar de objetos que tienen algunas propiedades definidas.
fuente
La respuesta es SÍ .
Duck Typing es un caso especial de tipeo dinámico , e incluso si el tipeo dinámico per se no puede considerarse directamente como polimorfismo (ya que es solo la propiedad del lenguaje realizar una verificación de tipo en tiempo de ejecución en lugar de en tiempo de compilación), las técnicas que generalmente subyacente a la tipificación dinámica, tal enlace tardío y despacho dinámico son característicos del polimorfismo .
fuente
La tipificación de patos no es un subconjunto del polimorfismo, ya que el polimorfismo requiere de forma explícita, que se pierde en la tipificación de patos. Por lo tanto, la escritura de pato tiene la posibilidad de "implementar" una "interfaz" no porque tenga sentido semántico sino porque tiene la misma firma. Si la tipificación de patos fuera un subconjunto de polimorfismo, entonces tendría todas las propiedades del polimorfismo, incluida la declaración explícita.
La escritura de pato tampoco es realmente una implementación del polimorfismo, es parte de un sistema de tipos diferente. Por lo general, asocia la escritura de pato con un lenguaje dinámico que sigue adelante y pasa un mensaje a un objeto sin saber si el objeto puede manejarlo; si puede, ha pasado efectivamente la prueba de escritura de pato. Por lo general, piensa que el polimorfismo se implementa en tiempo de compilación configurando vtables (y que se puede hacer funcionar si las interfaces son diferentes a las clases). Pero hay MUCHOS idiomas por ahí y muchas formas de implementar estas características.
Hasta cierto punto, esta es una pregunta filosófica. ¿Puedes pensar en la escritura de pato como interfaces que se declaran automáticamente implícitamente? No puedo pensar en ninguna razón que esté mal , exactamente, pero no creo que sea probablemente la forma más productiva de verlo. Creo que la escritura y las interfaces de pato son características comunes de los sistemas de tipos de lenguaje de programación, ambas tienen formas de comportamiento bastante similares, y ambas son importantes para que los programadores las entiendan.
fuente
Se siente casi natural decir "Sí, si el foo tiene tipeo de pato, el foo tiene polimorfismo". Pero no puedo decir esto 100% seguro, en el sentido de que tal vez sea posible encontrar ejemplos artificiales de dicho sistema que tenga tipificación de pato ("puede graznar && puede flotar en el agua ==> es un Duck ") mientras no tiene polimorfismo (" foo, quack! "Falla), pero realmente serían artificiales y en un mundo real, diría" Sí, si la tipificación de patos está presente, el polimorfismo también debe estar presente ".
Personalmente, veo a los patos escribiendo como "polimorfismo bien hecho". Lo que quiero decir con eso es que lo que existe en un mundo de tipeo de pato no necesita tener ningún tipo explícito y su comportamiento (polimórfico = "mismo acceso, diferente resultado") es lo único que cuenta. En otras implementaciones de polimorfismo, está restringido a tipos / interfaces / herencia, por lo que es "polimorfismo implementado y restringido", no un "polimorfismo per se".
fuente
(B. Pierce y amigos)
Entonces, como puede observar, a este respecto, la escritura de pato es una escritura dinámica que, de lo contrario, realmente se ejecuta.
Hay algún método para determinar el tipo que se relaciona con el polimorfismo, por ejemplo, que hace que el código sea más flexible, pero la tipificación de pato es otro problema en estos casos.
En detalles, hay cálculo lambda con tipo y cálculo lambda sin tipo que ayudan a determinar la propiedad de cálculo y cálculo.
También veo que cosas como escribir pato pueden ayudar si solo queremos obtener un resultado rápido, pero en otras ocasiones también siento que la naturaleza dinámica lo hace más ajustable a las necesidades, por lo que puedo calcular más rápido. Supongo que eso es solo para decir, querida, que si realmente sé lo que quiero calcular, escribir es lo mejor, pero ¿por qué sé lo que quiero? Jejeje ...
Esos son mis cinco centavos y supongo que eso puede ser un tema de investigación interesante.
fuente