POLIMORFISMO UNIVERSAL
Paramétrico:
O
polimorfismo dinámico es aquel en el que el código no influye ningún tipo de especificación
sobre el tipo de datos sobre el que se trabaja. Así, puede
ser utilizado a todo tipo de datos compatible.
El
polimorfismo dinámico me permite tener varios códigos para una misma signatura
y que el código que se ejecute al final depende del contexto en el que me
encuentre.
Inclusión:
También
llamado redefinición o subtipado, es un polimorfismo utilizado por modelos de
subtipos y herencia. En este tipo de polimorfismo un objeto puede pertenecer a clases
diferentes que no necesariamente son disjuntas.
Polimorfismo
de subtipado la habilidad para redefinir un método en clases que se hereda de
una clase base se llama especialización. Por lo tanto, se puede llamar un
método de objeto sin tener que conocer su tipo intrínseco: esto es polimorfismo
de subtipado. Permite no tomar en cuenta detalles de las clases especializadas
de una familia de objetos, enmascarándolos con una interfaz común (siendo esta
la clase básica).
POLIMORFISMO
AD-HOC
Polimorfismo
estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se
aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de
poder ser utilizados.
Overloading:
O
denominado polimorfismo de sobrecarga, en este caso el mismo nombre de la
variable se utiliza para denotar diferentes funciones, y el contexto se utiliza
para decidir cuál función se debería ejecutar para una invocación particular
del nombre. Puede imaginarse que para el procesamiento de un programa
eliminemos el overloading por asignación de nombres distintos a las funciones
diferentes, en este caso tendríamos programas con muchos nombres de funciones.
El overloading es justamente una abreviación sintáctica conveniente, que
permite poseer diferentes funciones con un mismo nombre.
Coerción:
Es
una operación semántica que convierte argumentos a los tipos esperados por una
función, en una situación que de otra forma resultaría en un tipo de error. La
coerción puede estar dada estáticamente, insertándose automáticamente entre
argumentos y funciones a tiempo de compilación o pueden tener que determinarse
dinámicamente, con pruebas a tiempos de ejecución sobre los argumentos.