¿Qué es una interface en Java?
Una
interfaz en java se puede definir como un conjunto de métodos abstractos
y propiedades. En donde se indica que se debe hacer pero sin una
implementación. Las clases que implementen estas interfaces describiran la
lógica del comportamiento de todos los métodos de la interfaz.
Una
interfaz en Java define un tipo cuyos métodos están todos sin implementar esto
es semejante a una herencia múltiple pero de clases abstractas en una clase.
Cuando una clase implementa una interface, puede:
- Implementar
los métodos de la interface sobreescribiéndolos
- No
implementar los métodos de la interface: obligatoriamente será una clase
abstracta y obligatoriamente ha de llevar la palabra clave abstract en su
encabezado para así indicarlo.
Ventajas al utilizar interfaces:
- Se
organiza la programación.
- Obligar
a que ciertas clases utilicen los mismos métodos (nombres y parámetros)
- Establecer
relaciones entre clases que no estén relacionadas.
¿Cómo usar interfaces?
Para
trabajar con interfaces, Java utiliza dos palabras reservadas: "interface" e
"implements".
modificador_acceso interface NombreInterfaz { código
de interfaz }
El
modificador de acceso permitido dentro de una interfaz es public o puede no
existir. Los
atributos que definamos en el cuerpo de la interfaz deben ser atributos de tipo
constante en las clases en las que se implemente.
Para
implementar una interfaz en una clase se debe seguir el siguiente orden:
modificador_acceso NombreClase implements NombreInterfaz1 , NombreInterfaz2
Aplicaciones: Ordenación de colecciones de objetos.
Interfaz Comparable
Comparable es una Interfaz del paquete java.lang,
esta interfaz nos define un método necesario a definir en nuestra clase
para que se pueda implementar dicha interfaz.
Java
contiene varios operadores de comparación (<, <=, >, >=, ==, !=)
y nos permiten comparar valores primitivos, pero no se pueden
utilizar estos operadores para comparar objetos. La
interfaz Comparable se utiliza para permitir que los objetos
de una clase que
implementa
a la interfaz se comparen entre sí. Esta interfaz se utiliza comúnmente
para ordenar objetos en una colección, como un arreglo.
Comparable
<C> nos
obliga a implementar el siguiente método: int
compareTo(claseC objeto)
Lo que hace
es comparar 2 objetos de la misma clase claseC y se devolver -1, 0 o 1 si el
objeto que llama al método es respectivamente menor, igual o mayor que el
objeto especificado en el método por objeto.
objecto1.comparteTo(objeto2);
negativo si objeto1 < objeto2
cero si objeto1 = objeto2
positivo si objeto1 > objeto2
Si un
objeto es mayor o menor que otro es lo que tenemos que hacer nosotros.
Las
clases básicas del API de Java, como String, Integer, File, Date y demás, ya la
implementan, con el orden esperado (alfabético, ordinal, cronológico, etc), así
que solo tendremos que preocuparnos de este interface con nuestras clases
propias que pueden ser complejas.
Clase Collections.
Esta clase que se encuentra e el paquete java.util se compone exclusivamente de los métodos estáticos que operan en o devuelven colecciones, esta clase tiene un método de ordenamiento de collecciones de elementos llamado Sort.
Método Sort
Ordena la lista especificada en orden ascendente, de acuerdo con el orden
natural de sus elementos.
Este método es capaz de ordenar cualquier colección que implemente el
interface java.util.List, java.util.ArrayList y el
orden natural lo indican el método comparteTo que revisamos
antes.
EJEMPLOS
Crearemos una clase llamada Estudiante, una clase llamada Curso y una llamada Aplicación.
Como vemos la clase Estudiante implementa la interfaz Comparable
Por lo que tenemos que añadir el método compareto de Comparable, el cual implementaremos su código mas adelante.
Mientras que nuestra clase Curso tendrá como atributos un ArrayList de Estudiante
En nuestra clase Aplicación crearemos una nueva lista de Estudiantes y la añadiremos al array list de la clase Curso.
Para ordenar nuestra lista de estudiantes lo que debemos hacer el modificar nuestro método compareto de la clase Estudiantes según el parámetro deseado:
Para ordenar por el nombre:
Para ordenar por la edad:
Para ordenar por el IRA (indice de rendimiento académico):
Mientras que en nuestra clase Aplicación utilizaremos el metodo sort de la clase Collections para ordenar de acuerdo al orden natural de sus elementos, es decir de manera en que hayamos modificado el método compareto.
Tendremos las siguentes salidas:
Ordenados alfabeticamente (por nombre):
Ordenados cronologicamente (por edad):
Ordenados ordinalmente (por IRA)
Interfaz Clonable
Una clase que implemente este interface le indica al método clone de la clase base Object que puede hacer una copia miembro a miembro de las instancias de dicha clase. Si una clase no implementa esta interface, e intenta hacer una duplicación del objeto a través de la llamada al método clone de la clase base Object, da como resultado una excepción del tipo CloneNotSupportedException
La clase base Object tiene un métodollamado clone, que se redefine en la clase derivada para realizar una duplicación de un objeto de dicha clase.
Para hacer una copia de un objeto de cualquier clase, se ha de seguir los siguentes pasos
- Se ha de implementar el interface Cloneable
- Se ha de redefinir el método clone de la clase base Object
EJEMPLOS
Crearemos una clase llamada Paciente y una llamada Aplicación.
Como vemos la clase Paciente implementa la interfaz Clonable
Para poder usar el método clone() se debe redefinir este metodo en la clase Paciente de la siguiente forma:
Si una clase que no implementa la interfaz Cloneable intenta hacer una duplicación del objeto a través de la llamada al método clone de la clase base Object, da como resultado una excepción del tipo CloneNotSupportedException.
En nuestra clase aplicación creamos un nuevo objeto de tipo Paciente y luego lo clonamos.
Se puede observar a la salida que son dos objetos con diferente dirección de memoria pero que tienen los mismos estados en sus atributos:
Bibliografia