El significado de polimorfismo es, la cualidad de ser capaz de asumir diferentes formas. En orientación a objetos, es la habilidad de vincular objetos de diferentes tipos a un solo identificador en tiempo de ejecución.
Se refiere a la capacidad de acceder a múltiples funciones a través del mismo interfaz. Es decir que un mismo identificador, o función puede tener diferentes comportamientos con respecto al contexto en el que sea ejecutado.[1]
Tipos de Polimorfismo
Polimorfismo de sobrecarga
El polimorfismo de sobrecarga ocurre cuando las funciones del mismo nombre existen, con funcionalidad similar, en clases que son completamente independientes una de otra (éstas no tienen que ser clases secundarias de la clase objeto).
El polimorfismo de sobrecarga, también nos permite definir operadores cuyos comportamientos varían de acuerdo a los parámetros que se les aplican. Así es posible, por ejemplo, utilizar el operador +
para que se comporte de manera distinta cuando está haciendo referencia a una operación entre dos números enteros (suma) o bien cuando se encuentra entre dos cadenas de caracteres (concatenación).
Polimorfismo paramétrico
El polimorfismo paramétrico es la capacidad para definir varias funciones utilizando el mismo nombre, pero usando parámetros diferentes (nombre y/o tipo). El polimorfismo paramétrico selecciona automáticamente el método correcto a aplicar en función del tipo de datos pasados en el parámetro.
Por lo tanto, podemos por ejemplo, definir varios métodos homónimos de suma() efectuando una suma de valores.
El método int suma(int,int)
devolvería la suma de dos números enteros.float suma(float, float)
devolvería la suma de dos flotantes.char suma(char, char)
daría por resultado la suma de dos caracteres definidos por el autor.
Una firma es el nombre y tipo (estático) que se da a los argumentos de una función. Por esto, una firma de método determina qué elemento se va a llamar.
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).
Imagine un juego de ajedrez con los objetos rey, reina, alfil, caballo, torre y peón, cada uno heredando del objeto pieza.
El método movimiento podría, usando polimorfismo de subtipado, hacer el movimiento correspondiente de acuerdo a la clase objeto que se llama. Esto permite al programa realizar el movimiento.de_pieza
sin tener que verse conectado con cada tipo de pieza en particular.
Ejemplo
<?php | |
abstract class Auto | |
{ | |
abstract public function consumir(); | |
} | |
class AutoGasolina extends Auto | |
{ | |
public function consumir() { | |
return ‘El ‘ . __CLASS__ . ‘ consume Gasolina’; | |
} | |
} | |
class AutoDiesel extends Auto | |
{ | |
public function consumir() | |
{ | |
return ‘El ‘ . __CLASS__ . ‘ consume Diesel’; | |
} | |
} | |
// Prueba de polimorfismo: La función mostrar() usa un objeto Auto como parámetro. | |
// Sin embargo, en tiempo de ejecución decidirá cuál función consumir() es apta. | |
function mostrar(Auto $auto) | |
{ | |
echo $auto->consumir(), PHP_EOL; | |
} | |
// Prueba de los objetos y las funciones | |
$carroGasolina = new AutoGasolina(); | |
$carroDiesel = new AutoDiesel(); | |
mostrar($carroGasolina); | |
mostrar($carroDiesel); |
Bibliografía: https://objetosweb.wordpress.com/2017/03/07/polimorfismo
Copiar URL