domingo, 21 de junio de 2015

INTERFACES EN JAVA

¿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.Listjava.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)


Codigo del ejercicio: https://www.dropbox.com/s/zdzbt4odrdq3izq/OrdenarClases.zip?dl=0


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




No hay comentarios:

Publicar un comentario