Detalla los conceptos de interfaces , métodos abstractos, atributos de una interfaz, métodos por defecto, métodos státicos en una interfaz, la herencia entre interfaces
1. Interfaces
René Guamán-Quinche
Facultad de la Energía, las Industrias y los Recursos Naturales No Renovables
Carrera de Ingeniería en Sistemas/Computación
Junio, 2022
Loja, Ecuador
2. 2
1. Interfaces
2. Método abstracto
3. Representación en UML
4. Atributos de una interfaz
5. Ejemplo
Agenda
3. 3
Interfaces
Son plantillas que permiten definir métodos abstractos
Es una colección de métodos sin implementar
Establecen el comportamiento que tendrán las clases que las implemente
Resuelven el problema de herencia simple porque una clase puede implementar
más de una interfaz
Establecen el término “able” que significa
modificable, configurable
Las clases que implementa a las interfaces pueden codificar el cuerpo de los
métodos abstractos de acuerdo a sus requerimientos.
Se pueden declarar constantes pero siempre que no sean variables de instancia
4. 4
Interfaces
La estructura es similar al de una clase, pero para diferenciarlas se utiliza la palabra
reservada interface, su sintaxis es:
public interface NombreInterfaz{
// métodos abstractos
}
Todas las interfaces son abstractas por tal razón se deben definir o declarar métodos
abstractos
5. 5
¿Qué es un método abstracto?
Es un método declarado pero no implementado
Es un método del que solo se define su cabecera y se omite su cuerpo, su sintaxis es:
modificador tipo_dato nombreMétodo(parámetros);
Al agregar el separador de instrucciones “;” al final de la cabecera del método, se
establece que carece de implementación y de forma implícita es un método abstracto
En las interfaces NO se puede declarar métodos con cuerpo o implementados
6. 6
Representación en UML
En UML las interfaces se definen a través del estereotipo <<interfaz>>
public interface InstrumentoMusical {
public void tocar();
public void afinar();
public String tipoInstrumento();
}
7. 7
Representación en UML
El siguiente paso es implementar la interfaz mediante las clases implementadora
En UML la flecha entre cortada especifica que una clase implementará los métodos
abstractos de una interfaz
Donde nace la flecha se ubica la clase implementadora y en la cabecera la interfaz, en la
siguiente figura se representa la relación de implementación:
8. 8
Representación en UML
Ahora representaremos en UML la relación de implementación entre la interfaz
“InstrumentoMusical” y la clase “InstrumentoViento”.
public interface InstrumentoMusical {
public void tocar();
public void afinar();
public String tipoInstrumento();
}
public class InstrumentoViento implements InstrumentoMusical {
public void tocar(){}
public void afinar(){}
public String tipoInstrumento(){}
}
9. 9
Representación en UML
En Java, la palabra reservada implements establece que una clase implementará los
métodos abstractos de una interfaz
La implementación de los métodos abstractos de la interfaz InstrumentoMusical
es:
public class InstrumentoViento implements InstrumentoMusical {
@Override
public void tocar() {
System.out.println("entonar");
}
@Override
public void afinar() {
System.out.println("Afinar");
}
@Override
public String tipoInstrumento() {
return "";
}
}
10. 10
Representación en UML
En el ejemplo, la implementación se establece en la cabecera de la clase agregando la
palabra reservada implements y el nombre de la interfaz
La clase InstrumentoViento está en la obligación de implementar los métodos
abstractos de la interfaz, en otras palabras, sobre escribirlos y codificar su cuerpo
A cada método implementado se suele utilizar la anotación @Override sobre la
cabecera del método, esto permite aclarar ha sido sobre escrito
En la interfaz NO es necesario utilizar la palabra reservada abstract en los métodos
porque de manera implícita los métodos son declarados como abstractos
11. 11
Atributos en una interfaz
Las interfaces puede definir constantes pero deben ser públicas o abstractas
No se pueden declarar variables de instancia
Todas las constantes incluidas en una interfaz se declaran implícitamente como public,
static y final (también se pueden omitir) y es necesario inicializarlas en la misma
sentencia de declaración
public interface Constantes {
double valorMaximo = 10000000.0;
double valorMinimo = -0.01;
int MAXIMUM_DEPTH = 100;
final static boolean UNDERWATER = true;
public static final String TYPE = "Submersible";
}
12. 12
Heredar una interfaz
1.Hereda todos los métodos abstractos como sus propios métodos abstractos
2.La primera clase concreta que implementa una interfaz, o extiende una clase abstracta
que implementa una interfaz, debe proporcionar una implementación para todas los
métodos abstractos heredadas
●
Se puede extenderse usando la palabra clave extends
●
La nueva interfaz secundaria hereda todos los métodos abstractos de la interfaz
principal
●
A diferencia de una clase abstracta, una interfaz puede extender varias interfaces
13. 13
Heredar una interfaz
public interface HasTail {
public int getTailLength();
}
public interface HasWhiskers {
public int getNumberOfWhiskers();
}
public interface Seal extends HasTail, HasWhiskers {
}
14. 14
Método predeterminado
●
Es un método con la palabra reservada default, que proporciona un cuerpo de método
●
Un método predeterminado define un método abstracto con una implementación predeterminada
●
Las clases tienen la opción de anular el método predeterminado si lo necesitan, pero no están obligadas a
hacerlo
●
Si la clase no anula el método, se utilizará la implementación predeterminada
public interface IsWarmBlooded {
public boolean hasScales();
public default double getTemperature() {
return 10.0;
}
}
public class Body implements ISWarmBlooded {
public boolean hasScales(){
return false;
}
}
15. 15
Método Estático
●
Estos métodos se definen explícitamente con la palabra reservada static
●
Funcionan de manera casi idéntica a los métodos estáticos definidos en las clases
●
Un método estático definido en una interfaz no se hereda en ninguna clase que implemente la
interfaz
public interface Hop {
public static int getJumpHeight() {
return 8;
}
}
public class ClasePrueba {
public void prueba(){
Hop.getJumpHeight();
}
}
16. 16
Ejemplo
Analicemos el siguiente ejercicio:
Existen dos interfaces, cada una ha definido métodos
abstractos, la clase implementadora
InstrumentoViento implementar las dos interfaces
Java permite la implementación de varias interfaces y las
separa a través de “,”.
Su sintaxis es:
public class NombreClase implements InterfazUna, InterfazDos, ……{
}
17. 17
Ejemplo
La codificación de la interfaz AcordesMusicales es:
public interface AcordesMusicales {
public void obtenerSonido();
public void obtenerAcorde();
}
18. 18
Ejemplo
La codificación de la clase implementadora InstrumentoViento es:
public class InstrumentoViento implements InstrumentoMusical, AcordesMusicales {
@Override
public void tocar() {
System.out.println("entonar");
}
@Override
public void afinar() {
System.out.println("Afinar");
}
@Override
public String tipoInstrumento() {
return "";
}
@Override
public void obtenerSonido() {
System.out.println("sonido devuelto");
}
@Override
public void obtenerAcorde() {
System.out.println("acorde devuelto");
}
19. 19
Ejemplo
La clase InstrumentoViento al implementar las interfaces
InstrumentoMusical y AcordesMusicales está en la obligación de
implementar todos los métodos abstractos declarados en las interfaces y para
identificarlos se utiliza la anotación @Override
20. 20
Cŕeditos
• Transparencias basadas por:
• Christopher Exposito Izquierdo & AiRam Exposito Marquez & otros
• Libro: Martina Seidl · Marion Scholz, Christian Huemer · Gerti
Kappel, UML @ Classroom, An Introduction to Object-Oriented
Modeling