Interfaces
UML - Veterinaria
Animal
Rinoceronte
Canino
Felino
Object
Gato
Tigre
Leon
Lobo
Perro
¿Comportamiento de mascota?
void serAmigable() {...}
void traerPelota() {...}
Solución 1
Animal
Rinoceronte
Canino
Felino
Gato
Tigre
Leon
Lobo
Perro
void sermigable() {...}
void traerPelota() {...}
● Todos los animales heredan el comportamiento de mascota.
● No hay que tocar el comportamiento de las subclases existentes.
● Las futuras clases implementadas podrán hacer uso de los nuevos métodos.
● Animal puede ser utilizado como tipo polimórfico.
Resultado ?
Claramente el lobo no es amigable...
Solución 2
Animal
Rinoceronte
Canino
Felino
Gato
Tigre
Leon
Lobo
Perro
void sermigable() {...}
void traerPelota() {...}
● Todos los beneficios de la solución anterior.
● Se pueden implementar métodos que no hagan nada para los animales que no se consideran mascotas.
¿Métodos abstractos en la superclase?
Resultado ?
Querés que te lleve la pelota?
Tengo el método,
sé cómo hacerlo...
Solución 3
Animal
Rinoceronte
Canino
Felino
Gato
Tigre
Leon
Lobo
Perro
void serAmigable() {...}
void traerPelota() {...}
¿Implementar los métodos en las clases necesarias?
Solución 3
Pros:
● No nos tenemos que preocupar por los rinocerontes o los lobos.
● Los métodos están en las clases a las que pertenecen.
● El gato y el perro implementan su comportamiento sin que los demás animales se enteren.
Contras:
● Hay que definir un contrato sobre las acciones que una mascota puede realizar.
● No estamos usando polimorfismo. No podemos usar Animal como tipo polimórfico. Porque no vamos a poder llamar un método de una mascota en un Animal.
¿Y Ahora?
● Una forma de tener el comportamiento de mascotas solo en las clases necesarias.
● Una forma de tomar ventaja del polimorfismo.
● Una forma de garantizar que todos los métodos definidos poseen la misma signatura, un “contrato”.
Animal
Rinoceronte
Canino
Felino
Gato
Tigre
Leon
Lobo
Perro
Mascota
¿Herencia Multiple?
No! Java no lo permite
Interfaces!!
Mascota
<<Interface>>
abstract void serAmigable();
abstract void traerPelota();
Todos los métodos dentro de una interfaz son públicos y abstractos por defecto.
De esta forma la clase que implemente dicha interfaz DEBE implementar los métodos.
Animal
Rinoceronte
Canino
Felino
Gato
Tigre
Leon
Lobo
Perro
<<Mascota>>
UML - Completo
Interfaces
By Henry
Interfaces
- 86