1. 4 Unidad Polimorfismo
4.1 Definición.
4.2 Clases abstractas: definición, métodos abstractos, implementación de clases abstractas,
modelado de clases abstractas.
4.3 Interfaces: definición, implementación de interfaces, herencia de interfaces.
4.4 Variables polimórficas (plantillas): definición, uso y aplicaciones.
2. 4.1 Polimorfismo
Es la habilidad que poseen los objetos para reaccionar de modo diferente ante los mismos
mensajes.
El polimorfismo se refiere a la posibilidad de definir múltiples clases con funcionalidad
diferente, pero con métodos o propiedades denominados de forma idéntica, que pueden
utilizarse de manera intercambiable mediante código cliente en tiempo de ejecución.
Conceptos relacionados con polimorfismo
Sobrecarga (overload).
Herencia.
Sobre-escritura (override).
Sobrecarga [Overload]
La sobrecarga representa diferentes maneras de realizar una misma acción.
En los programas se usa el mismo nombre en diferentes métodos con diferentes
firmas [número, orden y tipo de los parámetros].
El código de programación asociado a cada sobrecarga puede variar.
Ejemplos:
miEmpleado.Contratar (“Juan”, “Ventas”, 2500)
miEmpleado.Contratar (“Juan”)
miEmpleado.Contratar (“Juan”, 2500)
Ejemplo de sobrecarga [Overload]
Mipuerta.Abrir(Adentro,Afuera) Mipuerta.Abrir(Afuera,Adentro)
3. Mipuerta.Abrir ()
Herencia
Vehículo
CaballosDeFuerza :
int
Arrancar() : void
Detener() : void
Herencia
Sobreescritura [Overriding]
Sucede cuando una clase “B” hereda características de una clase “A”, pero la clase
“B” re-define las características heredadas de “A”.
Propiedades y métodos pueden heredarse de una superclase. Si estas propiedades y
métodos son re-definidos en la clase derivada, se dice que han sido “Sobrescritos”.
Ejemplo de polimorfismo paramétrico
Una clase define varios métodos con el mismo nombre pero diferente firma
(sobrecarga)
Se elige el método de acuerdo a la firma aplicada.
La sobrecarga del constructor es un ejemplo de ello.
Figura
+ Figura()
+ Figura(ValorInicial:
int)
Superclase
Clase Base
Clase padre
Clase madre
Subclases
(Clases
Derivadas)
(Clases Hijas)
Automóvil
CantidadDePuertas : int
Acelerar (int Cuanto) :
void
PalaMecanica
PesoMaximoDeLevante : int
MoverPala(string direccion) :
void
4. Ejemplo de polimorfismo de sobrecarga (Overload)
Diferentes clases tienen un método con el mismo nombre, pero comportamiento
diferente.
Se aplica el método de acuerdo al objeto en que se trabaje.
Cuadrado
+ Dibujar() : void
Ejemplo de polimorfismo de subtipo (override)
Circunferencia
+ Dibujar() : void
Triangulo
+ Dibujar() : void
InstrumentoMusical
+ Afinar() : void
Guitarra
+ Afinar() : void
Piano
+ Afinar() : void
Violín
+ Afinar() : void
5. 4.2 Clases Abstractas
Este Tipo de Clases nos permiten crear “método generales”, que recrean un
comportamiento común, pero sin especificar cómo lo hacen. A nivel de código tienen por
particularidad que algunos de sus métodos no tienen “cuerpo de declaración”, ¿qué quiere
decir esto? no tienen las llaves { } ni código dentro de ellos y deben estar precedidos por la
palabra clave abstract. Si unas clases contiene uno o más métodos abstractos está clase
debe ser abstracta. Estas clases como son generalidades no pueden ser instanciadas por
ningún objeto (se dice que su nivel de abstracción es demasiado alto), entonces su único fin
es ser heredado/extendido por otras clases.
Ejemplo
public abstract class Figura {
// Atributos:
public int numeroLados;
public int area;
public int volumen;
// Métodos:
abstract public void calcularArea();
abstract public void calcularVolumen();
}
6. Las clases que hereden de la clase Abstracta deben implementar todos los métodos
abstractos.
Se debe tener presente que las clases abstractas sí pueden heredar de otras clases.
La firma o parámetros de los métodos así como el tipo de dato deben respetarse, de
lo contrario se está hablando de otro método totalmente diferente.
Si una clase abstracta está compuesta sólo por métodos abstractos y constantes
entonces podemos hablar de una interface.
4.3 Interfaces
Las interfaces, tal como las clases abstractas. No se pueden instanciar. Sus métodos deben
ser re-escritos por la clase que implemente.
Ejemplo:
public interface MatematicaVectorial {
public static double pi = 3.1415;
Public static double e = 2.71828;
Public double[] sumar(int[][] vectores);
public double[] restar(int[][] vectores);
public double productoPunto(int[][] vectores);
}
una interface es una clase abstracta pura, es decir, una clase donde todos los métodos son
abstractos (no se implementa ninguno). Esto permite al diseñador de clases establecer la
forma que tendrá una clase, los nombres de los métodos sus argumentos o bien los tipos de
retorno, pero no cómo será el desarrollo del bloque de código. Los interfaces realmente
establecen un protocolo entre las clases.
Para crear una interface se utiliza la palabra clave “interface” en lugar de class. La interfaz
puede definirse public o sin modificador de acceso, y tiene el mismo significado que para
las clases aunque todos los métodos que se declaran en una interfaz son públicos.
7. Para indicar que una clase implementa los métodos de una interface se utiliza la palabra
clave “implements”. Una clase puede implementar más de una interface.
El interfaces se diferencia de la clase abstracta en lo siguiente:
En la interface todo método es abstracto y público sin necesidad de declararlo, por lo tanto
no implementará ningún método que declara.
Las variables declaradas en una interface serán variables de clase y nunca de instancia por
lo que su valor será constante en todas las instancias que se creen de la clase que
implementa una interface. Actuarán como constantes.
Una interface se implementa (implements) no se extiende (extends) por sus subclases. Una
clase puede implementar más de un interfaz, pero sólo puede extender de una clase (es lo
más parecido que tiene Java a la herencia múltiple)
Las variables definidas como de tipo de clase de un interface se tendrán que crear a partir
de una clase que implemente ese interface Gráficamente la herencia múltiple podría
representarse mediante el siguiente gráfico:
4.4 Variables polimórficas
Polimorfismo: es la capacidad que tiene los objetos de comportarse de múltiples formas.
Polimorfismo: Upcasting Únicamente tienen sentido por la existencia de la herencia.
¨El polimorfismo (o upcasting) consiste en la posibilidad de que una referencia a objetos de
una clase pueda conectarse también con objetos de descendientes de ésta.
Polimorfismo estátic 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.