Polimorfismo
El Polimorfismo es uno de los 4 pilares de la programación
orientada a objetos (POO) junto con la Abstracción, Encapsulación y Herencia.
"Polimorfismo" es una palabra de origen griego que
significa "muchasformas". Este termino se utiliza en la POO para
"referirse a la propiedad por la que es posible enviar mensajes
sintácticamente iguales a objetos de tipos distintos".
En programación orientada a objetos, el polimorfismo o
poliformismo se refiere a la propiedad por la que es posible enviar mensajes
sintácticamente iguales a objetos de tiposdistintos. El único requisito que
deben cumplir los objetos que se utilizan de manera polimórfica es saber
responder al mensaje que se les envía.
Algunos tipos de polimorfismo: el polimorfismo paramétrico (también llamado polimorfismo de plantillas) y el polimorfismo de inclusión (también llamado redefinición o subtipado).
-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.
-Poliformulismo 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).
Ejempo:
La clase forma define los métodos dibujar y borrar. En la definición de estos métodos se implementará el código común a todos los objetos de la clase. Sin embargo cuando definamos las clases hijas, círculo y cuadrado, será necesario modificar estos métodos para adaptarlos a las nuevas subclases. El método de la clase padre implementa aquellas acciones comunes. Las clases hijas añaden las operaciones particulares que necesiten. Cuando utilicemos los métodos de la clase forma no tendremos que hacer distinción entre cuadrados y círculos. Gracias al polimorfismo se ejecutará el método adecuado en función de la subclase a la que pertenezca el objeto.
Polimorfismo en la sobrecarga
Si para cada funcionalidad necesitada fuese necesario
escribir un método, el código resultante sería inmanejable, imagínense, por
ejemplo que los desarrolladores de java hubiesen creado un método para escribir
en pantalla una cadena de texto, otro diferente para escribir un entero, otro
para escribir un doble, otro para escribir un carácter, otro para una cadena y
un entero y así para todas las combinaciones posibles, seria casi imposible
conocer dichos métodos en totalidad; en cambio sabemos que con
“System.out.print()” o “System.out.println()” podemos escribir cualquier
mensaje en pantalla.
Este tipo de codificación nos es permitido gracias a la
sobrecarga, la cual se aplica a métodos y constructores.
Dos funciones, procedimientos u operadores que se llaman
igual se distinguen por el tipo de sus argumentos o por el número de sus
argumentos.
"SumaGenerica" que aglutinara las sumas de todos
los tipos primitivos:
class SumaGenerica {
int suma (int a, int b) {
return a+b; }
double suma (double a, double b) {
return a+b; } }
En este caso se dice que el método está sobrecargado y el
proceso de definir un método así se conoce como sobrecarga del método. La
sobrecarga de métodos es una de las maneras en que Java implementa el
polimorfismo.
Polimorfismo en el reemplazo
El poliformulismo en el reemplazo, también conocido como
enlace tardío o enlace dinámico tendrá un texto que será diferente de acuerdo a
una serie de enlaces. Por consiguiente, estos enlaces dinámicos cambiarán de
forma aleatoria. En el tipo de enlace
dinámico, entonces se establece una biblioteca de código, que esta entrelaza
cuando se ejecuta una aplicación o un programa.
El reemplazo ocurre
cuando un método en una clase tiene el mismo prototipo (nombre, tipo y orden de
los parámetros) que un método de una clase madre (o superclase). En caso de que
los métodos tengan el mismo prototipo, el método de la clase derivada, siempre
reemplaza al de la clase madre.
Los
objetos pueden venir de cualquier sitio, el sitio
indicado se enlaza en tiempo
de ejecución.
Ejemplo:
si tienes la clase A y la clase B extends A, y en ambas
clases tienes el método imprimeClase(); donde imprimen A y B respectivamente:
Si haces A primera = new A(); primera.imprimeClase(); ->
imprimirá A (está llamando al método de la clase A)
Si haces B segunda = new B(); segunda.imprimeClase(); ->
imprimirá B (está llamando al método de la clase B)
Si haces A tercera = new B(); tercera.imprimeClase(); ->
imprimirá B (está llamando al método de la clase B, ya que es la original,
aunque la variable donde está metido sea A, el supertipo)
Conclusión, el enlace dinámico lo que hace es
llamar al método original de la clase, da igual si lo has metido en una
variable supertipo (véase la tercera opción
Comentarios
Publicar un comentario