Professional Documents
Culture Documents
de reutilización
Sobrecarga.
El término sobrecarga se refiere al uso del mismo identificador u operador en
distintos contextos y con distintos significados.
Sobre-escritura:
La sobre-escritura, se aplica a los métodos y esta directamente relacionada a la
herencia y se refiere a la re-definición de los métodos de la clase base en las
subclases, por ejemplo, en la relación de herencia del ejemplo de las figuras
aunque la clase base “Figura”tiene los
métodos “calcularArea” y “calcularPerimetro”, las
subclases “Circulo”, “Cuadrado”, “Triangulo” y “Rectangulo”redefinen estos
métodos ya que el calculo del área y el perímetro de cada uno de ellos es
diferente.
class Figura {
protected double area;
protected double perimetro;
public Figura() {
this.area=0;
this.perimetro=0;
}
public double getArea() {
return area;
}
public double getPerimetro() {
return perimetro;
}
public void calcularArea(){}
public void calcularPerimetro(){}
}
Ligadura dinámica:
Gracias a la ligadura dinámica, pueden invocarse operaciones en objetos
obviando el tipo actual del éstos hasta el momento de la ejecución del código, es
decir que me perite definir elementos como un tipo e instanciarlos como un tipo
heredado. Pero cual puede ser la utilidad de este concepto, para que me sirve
obviar el tipo de un objeto para luego tomar esta decisión?.
Gracias a que en java la definición de los tipos de objetos se puede producir por
atado posterior (late binding), no nos debe preocupar a que tipo de elemento le
paso un mensaje ya que el compilador tomara la decisión de que objeto ejecutará
que método de acuerdo a la forma de crear la instancia.
class Mamifero {
public void mover() {
System.out.println("Ahora es un mamifero el que se mueve");
}
}
for(int i=0;i<10;i++){
orquesta[i]=generarInstrumento(new java.util.Random().nextInt(3));
}
for(int i=0;i<10;i++){
afinarInstrumento(orquesta[i]);
}
for(int i=0;i<10;i++){
tocarInstrumento(orquesta[i]);
}
for(int i=0;i<10;i++){
tocarInstrumento(orquesta[i],notas[i%7]);
}
}
Resumen de polimorfismo
La palabra polimorfismo proviene del griego y significa que posee varias formas
diferentes. Este es uno de los conceptos esenciales de una programación
orientada a objetos. Así como la herencia está relacionada con las clases y su
jerarquía, el polimorfismo se relaciona con los métodos.
En general, hay tres tipos de polimorfismo:
• Polimorfismo de sobrecarga
• Polimorfismo paramétrico (también llamado polimorfismo de plantillas)
• Polimorfismo de inclusión (también llamado redefinición o subtipado)
Trataremos de describir ahora con más precisión estos tipos de polimorfismo, pero
le sugerimos prestar atención, ya que muchas personas suelen confundirse al
tratar de comprender las diferencias existentes entre estos tres tipos.
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). Por ejemplo, la clase complex, la clase image y la clase link pueden
todas tener la función "display". Esto significa que no necesitamos preocuparnos
sobre el tipo de objeto con el que estamos trabajando si todo lo que deseamos es
verlo en la pantalla.
Por lo tanto, el polimorfismo de sobrecarga nos permite definir operadores cuyos
comportamientos varían de acuerdo a los parámetros que se les aplican. Así es
posible, por ejemplo, agregar el operador + y hacer 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 addition() efectuando una suma de valores.
• El método int addition(int,int) devolvería la suma de dos números enteros.
• float addition(float, float) devolvería la suma de dos flotantes.
• char addition(char, char) daría por resultado la suma de dos caracteres definidos
por el autor.
• etc.
Una signature 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 llamaespecializació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 el 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.
Última actualización el jueves, 16 de octubre de 2008, 15:43:29 .Este documento
intitulado « OOP - Polimorfismo » de Kioskea (es.kioskea.net) esta puesto a
diposición bajo la licencia Creative Commons. Puede copiar, modificar bajo las
condiciones puestas por la licencia, siempre que esta nota sea visible.