Pato escribiendo

Style of dynamic typing in object-oriented programming

En programación informática , el tipado de pato es una aplicación de la prueba del pato —"Si camina como un pato y grazna como un pato, entonces debe ser un pato"— para determinar si un objeto puede usarse para un propósito particular. Con el tipado nominativo , un objeto es de un tipo dado si se declara como tal (o si la asociación de un tipo con el objeto se infiere a través de mecanismos como la herencia de objetos ). Con el tipado de pato, un objeto es de un tipo dado si tiene todos los métodos y propiedades requeridos por ese tipo. [1] [2] El tipado de pato puede verse como una equivalencia estructural basada en el uso entre un objeto dado y los requisitos de un tipo.

Ejemplo

Este sencillo ejemplo en Python 3 demuestra cómo cualquier objeto puede usarse en cualquier contexto hasta que se utilice de una manera que no admite.

Clase  Pato : def  nadar ( yo mismo ): imprimir ( "Pato nadando" ) def  volar ( yo mismo ): imprimir ( "Pato volando" )clase  Ballena : def  nadar ( yo mismo ): imprimir ( "Ballena nadando" )para  animal  en  [ Pato (),  Ballena ()]: animal . nadar () animal . volar ()

Producción:

Pato nadando Pato volando Ballena nadando AttributeError: el objeto 'Ballena' no tiene el atributo 'volar'

Si se puede asumir que todo lo que puede nadar es un pato porque los patos pueden nadar, una ballena podría considerarse un pato; sin embargo, si también se asume que un pato debe ser capaz de volar, la ballena no se considerará un pato.

En lenguajes tipados estáticamente

En algunos lenguajes tipados estáticamente como Boo [3] y D , [4] [5] se puede especificar que la verificación de tipo de clase se realice en tiempo de ejecución en lugar de en tiempo de compilación.

Comparación con otros sistemas de tipos

Sistemas de tipo estructural

El tipado pato es similar al tipado estructural , pero distinto . El tipado estructural es un sistema de tipado estático que determina la compatibilidad y equivalencia de tipos mediante la estructura de un tipo, mientras que el tipado pato es dinámico y determina la compatibilidad de tipos únicamente mediante la parte de la estructura de un tipo a la que se accede durante el tiempo de ejecución .

Los lenguajes TypeScript , [6] Elm [7] y Python [8] admiten la tipificación estructural en distintos grados.

Protocolos e interfaces

Los protocolos e interfaces proporcionan una forma de declarar explícitamente que algunos métodos, operadores o comportamientos deben definirse. Si una biblioteca de terceros implementa una clase que no se puede modificar, un cliente no puede usar una instancia de ella con una interfaz desconocida para esa biblioteca, incluso si la clase satisface los requisitos de la interfaz. Una solución común a este problema es el patrón adaptador . Por el contrario, con el tipado de pato, el objeto se aceptaría directamente sin la necesidad de un adaptador.

Plantillas o tipos genéricos

Las funciones o métodos de plantilla (también llamados genéricos ) aplican la prueba duck en un contexto de tipado estático ; esto aporta todas las ventajas y desventajas de la comprobación de tipos estática frente a la dinámica . La tipificación duck también puede ser más flexible, ya que solo se deben implementar los métodos realmente llamados en tiempo de ejecución, mientras que las plantillas requieren implementaciones de todos los métodos que no se puede demostrar que son inalcanzables en tiempo de compilación.

En lenguajes como Java, Scala y Objective-C, se puede emplear la reflexión para inspeccionar si los objetos implementan métodos o agregan los métodos necesarios en tiempo de ejecución. Por ejemplo, la API MethodHandle de Java se puede utilizar de esta manera. [9]

Véase también

Referencias

  1. ^ "Glosario — Documentación de Python 3.7.1". docs.python.org . Consultado el 8 de noviembre de 2018 .
  2. ^ "Ejemplo de tipeo de Duck en Python". Techie Hours . 28 de junio de 2020. Archivado desde el original el 31 de marzo de 2022 . Consultado el 26 de julio de 2020 .
  3. ^ Boo: Duck TypingArchivado el 6 de octubre de 2008 en Wayback Machine
  4. ^ "Clases dinámicas y mecanografía de pato".
  5. ^ "Metaprogramación - tipeo de pato en D".
  6. ^ "SE Radio Episodio 384: Boris Cherny en TypeScript". se-radio.net . Consultado el 25 de octubre de 2019 .
  7. ^ Czaplicki, Evan. "Lenguaje central · Introducción a Elm" . Consultado el 30 de enero de 2017 .
  8. ^ "PEP 544 – Protocolos: Subtipificación estructural (tipificación estática de pato)".
  9. ^ "StackOverflow: Implementar tipado de pato usando Java MethodHandles" . Consultado el 13 de junio de 2020 .
Retrieved from "https://en.wikipedia.org/w/index.php?title=Duck_typing&oldid=1240047622"