Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Interfases en Java

Teoría y cómo modificar el método compareTo() Ejemplo

Interfaces en Java Comparable y compareTo() Carlos Chavez 6/19/15 CARLOS CHAVEZ E.P.N. 0 Programación Orientada a Objetos Contenido Marco Teórico ....................................................................................... 2 Declaración y Uso ................................................................................ 2 Porqué interfaces? ............................................................................... 3 Interfaz Comparable ............................................................................. 3 Ejemplo .............................................................................................. 4 Conclusiones......................................................................................... 9 Page 1|9 Programación Orientada a Objetos Interfaces Marco Teórico El concepto de Interface lleva un paso más adelante la idea de las clases abstractas. En Java una interface es una clase abstracta pura, es decir una clase donde todos los métodos son abstractos (no se implementa ninguno). Permite al diseñador de clases establecer la forma de una clase (nombres de métodos, listas de argumentos y tipos de retorno, pero no bloques de código). Una interface puede también contener datos miembro, pero estos son siempre static y final. Una interface sirve para establecer un 'protocolo' entre clases. Para crear una interface, se utiliza la palabra clave interface en lugar de class. La interface puede definirse public o sin modificador de acceso, y tiene el mismo significado que para las clases. Todos los métodos que declara una interface son siempre public. Para indicar que una clase implementa los métodos de una interface se utiliza la palabra clave implements. El compilador se encargará de verificar que la clase efectivamente declare e implemente todos los métodos de la interface. Una clase puede implementar más de una interface. Declaración y Uso Una interface se declara: interface nombre_interface { tipo_retorno nombre_metodo ( lista_argumentos ) ; ...} Por ejemplo: interface InstrumentoMusical { void tocar(); void afinar(); String tipoInstrumento(); } Y una clase que implementa la interface: class InstrumentoViento extends Object implements InstrumentoMusical { void tocar() { . . . }; void afinar() { . . .}; String tipoInstrumento() {} } class Guitarra extends InstrumentoViento { String tipoInstrumento() { return "Guitarra"; } } Page 2|9 Programación Orientada a Objetos La clase InstrumentoViento implementa la interface, declarando los métodos y escribiendo el código correspondiente. Una clase derivada puede también redefinir si es necesario alguno de los métodos de la interface. Porqué interfaces? Porque al definir interfaces permitimos la existencia de variables polimórficas y la invocación polimórfica de métodos. Un aspecto fundamental de las interfaces en Java es hacer lo que ya hemos dicho que hace una interfaz de forma genérica: separar la especificación de una clase (qué hace) de la implementación (cómo lo hace). Esto se ha comprobado que da lugar a programas más robustos y con menos errores. Recordar que por ser una interfaz; todos los métodos son abstractos, aunque no se indique específicamente en la documentación del API de Java. Recordar también que una interfaz no tiene constructores y no es instanciable. Al ver la documentación del API nos puede parecer una clase, pero la ausencia de constructor (aparte del propio nombre en el encabezado) delata que no se trata de una clase. Interfaz Comparable Esta interfaz consiste únicamente de un método abstracto y no contiene constantes. Si un objeto es de una clase que implementa “Comparable”, entonces ese objeto puede ser: menor que, igual o mayor que algún objeto de esa misma clase. compareTo() retorna un entero que lo mostraremos en la siguiente tabla: Relación ObjectA.compareTo(ObjectB) ObjetoA Menor que ObjetoB Entero Negativo ObjetoA Igual ObjetoB Cero ObjetoA Mayor que ObjetoB Entero Positivo Si deseamos que cualquiera de nuestras clases acceda a éste método abstracto contenido en la interfaz Comparable, debemos implementarlo al declarar nuestra clase, de la siguiente manera: public class Nombre_de_la_Clase implements Comparable<Objeto_de_la_Clase> De esta forma estamos implementando la interfaz Comparable en nuestra clase llamada estudiante que posee atributos y métodos propios así como también el método abstracto compareTo() que se nos pedirá que lo implementemos. Este método puede ser modificado a conveniencia nuestra para realizar las tareas que necesitemos que nuestro programa realice. Page 3|9 Programación Orientada a Objetos En el siguiente ejemplo se explicará paso a paso la implementación y modificación del método compareTo() y de la utilización de la interfaz Comparable. Ejemplo Realizar un programa que ordene objetos de tipo Estudiante que contendrán como atributos el nombre, fecha de nacimiento, promedio IRA y su número único. El programa contendrá también un método que calcule la edad de cada Estudiante. La clase Curso contendrá un ArrayList de Estudiantes y contendrá los métodos de ordenamiento así como de impresión de los objetos. Se debe implementar la clase abstracta Comparable y modificar el método abstracto compareTo(). Se espera obtener a la salida una lista ordenada por edad, nombre e IRA respectivamente. 1. La clase Estudiante es creada y declarados sus atributos, ésta clase implementará el método abstracto compareTo(), es por eso que se escribe “implements”. 2. Getters & Setters, así como el método toString() y los constructores son declarados. Page 4|9 Programación Orientada a Objetos 3. Es necesario crear un método que calcule la edad de los Estudiantes, esto lo realizamos de la siguiente manera: Page 5|9 Programación Orientada a Objetos 4. Como se mostró en el paso 1 la clase Estudiante implementa de la interface Comparable por lo que se debe declarar y modificar el método abstracto compareTo(). Este método será modificado independientemente 3 veces ya que el requerimiento del ejercicio es que se ordene los objetos de manera ascendente y de acuerdo a sus atributos de nombre, edad e IRA.  Edad  Nombre  IRA 5. La clase Curso viene dada de la siguiente manera: contendrá sus respectivos getters & setters, constructores y métodos que gestionarán tanto la impresión, agregación de objetos tipo Estudiante así como también el método de ordenamiento. Page 6|9 Programación Orientada a Objetos Es importante denotar que en el método sortList() se utiliza la un objeto de la clase Collections el cual nos permite realizar un proceso sencillo de ordenamiento de ArrayLists. Page 7|9 Programación Orientada a Objetos 6. El programa contiene también una clase gestora que será la encargada llamar a los métodos de la clase Curso, con esto podremos notar y comprobar que el ordenamiento de objetos por sus atributos se haya realizado correctamente. Esta clase se llamará Application. 7. Las salidas serán las siguientes:  Edad Page 8|9 Programación Orientada a Objetos  Nombre  IRA Conclusiones    La Interfaz Comparable es muy útil cuando se trata de ordenar objetos por sus atributos puesto que es para lo que esta interfaz fue creada. El hacer que el método compareTo() retorne un entero hace que la programación sea más sencilla. Es importante entender el funcionamiento del método toString() puesto que sin él este ejercicio presentaría una excepción NullPointer. Page 9|9