Leng Aptec101
Leng Aptec101
Leng Aptec101
Polimorfismo
1. INTRODUCCIÓN……………………………………………………………………………………
2
2.HERENCIA……………………………………………………………………………………………
3
3
2.1. ¿En qué situaciones se aplica Herencia en la POO?.........................................
2.2. Otros conceptos asociados a la herencia……………………………………………………..…….. 6
- SOBRE ESCRITURA DE MÉTODOS…………………………………………………………………… 6
- CLASE ABSTRACTA………………………………………………………………………………………….9
- INTERFACE……………………………………………………………………………………………………..12
2.3. ¿Cómo programar la Herencia?: Caso Vivienda…………………………………………………… 14
3. POLIMORFISMO…………………………………………………………………………………21
21
3.1. ¿En qué situaciones se aplica Polimorfismo?...................................................
3.2. ¿Cómo programar el Polimorfismo?: Caso Vivienda……………………………………………. 22
23
4. CASO PROPUESTO: Aplicación administrar salas de cine……………………………
1
Aplicación de herencia y
polimorfismo
1. INTRODUCCIÓN
Herencia tiene que ver con las características y comportamientos que se heredan a
otras clases; y polimorfismo dice relación con realizar una misma acción (o
comportamiento) que aparentemente es la misma, pero en realidad se efectúa de
varias formas distintas (depende de quién recibe la orden de ejecutar esa acción).
2. HERENCIA
Peor aún, si tuviéramos que programar el objeto Chalet, entonces tendríamos que
hacer exactamente el mismo trabajo tres veces.
Figura 2.1: Ejemplo Diagrama de Clases que representa Herencia donde la clase principal
es Vivienda y las clases derivadas de ella son Casa, Departamento y Chalet.
Finalmente, la herencia puede ser simple o múltiple, simple si una clase se hereda
de una sola clase y múltiple si hereda de varias clases.
Bueno, en ambos casos se ejecuta el método sobre escrito en cada subclase, como
lo indica la salida siguiente al ejecutar el main:
Aquí se ejecutó el
método toString() de la
superclase Vivienda.
CLASES ABSTRACTAS 9
Características:
• Los métodos abstractos contienen solo su declaración o prototipo (nombre y
parámetros). La responsabilidad de implementar su código se delega a las
clases derivadas o subclases.
• Una clase que declare al menos un método abstracto es considerada como
clase abstracta, siendo esa clase abstracta una superclase.
• No es posible crear instancias (objetos) de una clase abstracta. Sin embargo,
es posible crear referencias.
Aplicación de herencia y
polimorfismo
Imaginemos una clase llamada MedioTransporte, que es una clase muy general ya
que existen demasiados tipos de medios de transporte y, además, el método
avanzar() no es posible implementarlo si no pienso en algún medio de transporte
específico. Por lo tanto, sabemos que el método avanzar() debe existir en esta clase,
pero no sabemos cómo implementarlo. Por otro lado, imagina que esta clase tiene
las clases derivadas Avión y Terrestre donde cada una tiene su propio método
avanzar(). El medio de transporte Avión sí sabemos cómo avanza así que es posible
implementarlo, no así Terrestre, ya que siguen existiendo muchos medios de este
tipo así que no puedo saber cómo implementar el método avanzar, por lo tanto,
Terrestre la definimos abstracta y debo seguir derivando clases hasta implementar
los métodos abstractos definidos en las superclases.
10
En la figura las clases que pueden ser abstractas son aquellas que tienen subclases
y que, además, existe al menos un método abstracto. Esto se da en MedioTransporte
y Terrestre. La implementación quedaría algo como lo siguiente:
Aplicación de herencia y
polimorfismo
11
Aplicación de herencia y
polimorfismo
INTERFACES
Las interfaces son unas clases completamente abstractas que contienen solo una
colección de métodos abstractos y propiedades constantes. Al igual que en las clases
abstractas, en una interface se especifica qué se debe hacer, pero no su
implementación. Serán las clases que implementen estas interfaces las que describen
las acciones que puede llevar a cabo un determinado objeto.
En una clase abstracta, además de aparecer los métodos, aparecía el código para
dichos métodos, en cambio, en un interfaz solo existe el prototipo de una función, no
su código. Aquí la diferencia.
La interfaz no es una clase. Las interfaces tan solo pueden contener: métodos
abstractos y constantes. No pueden contener métodos con códigos, constructores o
variables, y por supuesto, no es posible crear objetos de una interfaz.
Aplicación de herencia y
polimorfismo
La sintaxis es la siguiente:
public interface nombre_interface {
//.....
}
dentro de la interfaz se pueden definir constantes, ejemplo:
public static final int maximo = 100;
En la definición de una clase, se utiliza la palabra implements para indicar qué interfaz
se ha de implementar:
public class nombre_clase implements nombre_interfaz {
//.....
}
• Cuando una clase implementa una interfaz, está obligada a definir el código
(implementar) de todos los métodos existentes en la misma. De no ser así, la
clase debe declararse como abstracta.
• Una clase puede implementar más de una interfaz. En cuyo caso debe
implementar los métodos existentes en todas las interfaces.
public class NombreClase implements Interface1, Interface2,…{
} 13
• Una clase puede heredar otra clase e implementar al mismo tiempo una o
varias interfaces
public class ClaseB extends ClaseA implements Interface1, Interface2{
}
• Una interfaz puede heredar de otras interfaces.
public interface MiInterfaz extends Interface1, Interface2 { }
• Una de las diferencias entre clase abstracta e interface es que todos los
métodos de la interface no tienen definición de su código, mientras que en la
clase abstracta al menos un método es abstracto sin definición de código; eso
implica que otros métodos de la clase sí implementan código.
• Los métodos de una interface son públicos y abstractos por defecto, en el caso
de no indicarse explícitamente. Los datos solo pueden ser constantes públicas,
estáticas y finales.
• Las interfaces no declaran métodos constructores, debido a que solo se
declaran constantes.
Aplicación de herencia y
polimorfismo
• Una clase puede tener herencia múltiple de interfaces, no así con superclases
en que solo es posible herencia simple.
• Las interfaces se usan para publicar el comportamiento común de clases de
distinta jerarquía. También es posible aplicar el polimorfismo de forma similar
a como se aplica en herencia de clases.
Para programar el ejemplo de la vivienda (ver figura 2.1) donde consideraremos los
siguientes requerimientos de usuario:
• Una vez que se ingrese una vivienda al sistema, inicialmente la situación de
la vivienda será disponible y número de habitantes cero. 14
• El valor del atributo número de habitantes no puede ser menor que cero. El
cero es válido cuando se crea una vivienda, ya que aún nadie la habita.
• La situación de la vivienda solo puede tomar los siguientes valores: ‘D’ (de
disponible), ‘H’ (de habitada y ‘R’ (de reservada).
• Al ejecutar el método habitar una vivienda se debe indicar el número de
habitantes mayor que cero. Retorne verdadero cuando el proceso se genere
exitosamente.
• Al crear un chalet el número de piscinas no puede ser menor que cero. Este
número de piscinas puede aumentar uno en uno según lo que indique el
usuario.
Primero se debe programar la clase principal (o superclase) Vivienda tal como lo has
aprendido hasta ahora:
Aplicación de herencia y
polimorfismo
A continuación, agregue los customers y los métodos que validan los atributos,
considerando las especificaciones del usuario:
16
Para probar la clase Vivienda anterior puede usar el siguiente main que fue
programado dentro de la clase AppVivienda.
17
Con la instrucción
super(num, col) se invoca
al constructor de la
superclase para enviar los
valores iniciales
requeridos por ésta. Los
constructores se
implementan en la
subclase ya que no se
heredan.
18
19
El ejemplo de aplicación anterior es la forma que tiene Java para manejar la herencia,
en otros lenguajes de programación, a diferencia de Java, es posible que una subclase
sea derivada de varias superclases. Para suplir esta necesidad, Java utiliza
Interfaces (se verá en el siguiente apartado).
Aplicación de herencia y
polimorfismo
Finalmente, para probar esta implementación de herencia, los objetos que se crean
son de las subclases Casa y Chalet, y a partir de estas se pueden invocar a los
métodos de las mismas y los de la superclase Vivienda. Les dejo un ejemplo de main
de prueba:
Se crea un objeto de la
subclase Casa y a partir de
este objeto se interactúa
(relación) con la superclase
vivienda.
20
Aplicación de herencia y
polimorfismo
Es su turno ahora programar este ejemplo agregando además la subclase que nos
faltó: Departamento. Recuerda también probar los métodos de esta en el main.
Cualquier duda que tengas no olvides preguntar en el foro habilitado en la plataforma
de la asignatura.
3. POLIMORFISMO
Como sabemos, esta clase Vivienda tiene tres subclases: Casa, Departamento y
Chalet, por lo tanto, aquí existe una relación de herencia que es determinante para
aplicar polimorfismo. También sabemos que el método mostrarDatos en Vivienda
se hereda a las subclases.
Aplicación de herencia y
polimorfismo
Aparte de que las subclases heredan el método mostrarDatos, cada una de ellas
sobrescribe este mismo método. Como se muestra en la figura siguiente:
Para este caso (redactado el apunte de la unidad uno) aplica herencia y polimorfismos
en la siguiente situación.
• Las salas de cines se definen en una clase general. Defina atributos que
caractericen a las salas de cine en general (número, cantidad de butacas y
ubicación) y un método abstracto para que se implemente en las subclases.
El método debe ser: agregar persona a la sala.
• Indique al menos 3 subclases con atributos propios y el método que debe ser
implementado para las tres subclases.
aparentemente es igual) debe ser diferente para los 3 tipos de salas que
definas.
24