En informática, el polimorfismo paramétrico es una forma de hacer un lenguaje más expresivo y conciso. Es un estilo de programación en el que se pueden escribir funciones o tipos sin especificar todos los detalles, lo que permite una mayor flexibilidad y reutilización del código.
El polimorfismo paramétrico también se conoce a veces como programación genérica, ya que se puede utilizar para crear tipos de datos genéricos y algoritmos que pueden trabajar con cualquier tipo de datos.
¿Es el polimorfismo y la sobrecarga lo mismo?
No, el polimorfismo y la sobrecarga no son lo mismo. La sobrecarga se produce cuando dos o más métodos de la misma clase tienen el mismo nombre pero diferentes firmas. El polimorfismo, en cambio, se produce cuando una clase tiene varios métodos con la misma firma pero diferentes implementaciones.
¿Cuáles son los dos tipos de polimorfismo?
Hay dos tipos principales de polimorfismo en programación: polimorfismo en tiempo de compilación y polimorfismo en tiempo de ejecución.
El polimorfismo en tiempo de compilación también se conoce como polimorfismo estático, y ocurre cuando el tipo de un objeto se determina en tiempo de compilación. Esto se consigue normalmente mediante el uso de la sobrecarga de funciones, donde se definen múltiples funciones con el mismo nombre pero con diferentes firmas. La firma de una función incluye el número, tipo y orden de sus parámetros.
El polimorfismo en tiempo de ejecución también se conoce como polimorfismo dinámico, y ocurre cuando el tipo de un objeto se determina en tiempo de ejecución. Esto se logra generalmente a través del uso de la herencia y las funciones virtuales. La herencia permite que una clase derive de otra clase, y las funciones virtuales permiten que una clase derivada anule el comportamiento de una función en la clase base.
¿Cuáles son los 4 tipos de polimorfismo?
1. Polimorfismo ad-hoc: Esto también se llama sobrecarga de funciones, y se refiere a la capacidad de definir múltiples funciones con el mismo nombre pero con diferentes firmas. Esto permite al programador llamar a la misma función con diferentes tipos de argumentos, y la función correcta será seleccionada en tiempo de compilación basada en los tipos de los argumentos.
2. Polimorfismo paramétrico: Esto también se llama programación genérica, y se refiere a la capacidad de definir funciones o tipos que pueden trabajar con argumentos de diferentes tipos. Esto permite al programador escribir código que no está atado a ningún tipo específico, y la función o tipo correcto será seleccionado en tiempo de compilación basado en los tipos reales de los argumentos.
3. Polimorfismo de subtipo: Esto también se llama herencia, y se refiere a la capacidad de definir un nuevo tipo que es un subtipo de un tipo existente. Esto permite al programador escribir código que no está atado a ningún tipo específico, y el tipo correcto será seleccionado en tiempo de ejecución basado en el tipo real del objeto.
4. polimorfismo de coerción: Se refiere a la capacidad de convertir implícitamente entre valores de diferentes tipos. Esto permite al programador escribir código que no está atado a ningún tipo específico, y el tipo correcto será seleccionado en tiempo de compilación o de ejecución basado en los tipos reales de los valores.
¿De dónde viene el término polimorfismo?
El término "polimorfismo" viene de las palabras griegas "poly" (que significa "muchos") y "morph" (que significa "forma"). En programación, el polimorfismo se refiere a la capacidad de un objeto de adoptar múltiples formas. Por ejemplo, un solo objeto puede ser utilizado para representar múltiples tipos de datos, como un número entero, un número de punto flotante, o un carácter.
Hay dos tipos de polimorfismo: estático y dinámico. El polimorfismo estático también se conoce como vinculación temprana, porque el tipo de un objeto se determina en tiempo de compilación. El polimorfismo dinámico también se conoce como vinculación tardía, porque el tipo de un objeto no se determina hasta el tiempo de ejecución.
En la programación orientada a objetos, el polimorfismo se consigue a menudo mediante la herencia y las funciones virtuales. La herencia permite que una clase hija herede las propiedades de una clase padre, mientras que las funciones virtuales permiten que una clase tenga diferentes implementaciones de un método, dependiendo del tipo de objeto.