martes, 2 de febrero de 2016

Polimorfismo en POO

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.