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

Made with Slides.com