EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE COMPARABLE Y MÉTODO COMPARETO DE JAVA. COMPARAR OBJETOS (CU00913C)

Documentos relacionados
EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C)

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE ITERABLE DEL API DE JAVA Y MÉTODO ITERATOR. RECORRER COLECCIONES DE OBJETOS (CU00915C)

LA CLASE VECTOR DEL API JAVA. MÉTODOS TRIMTOSIZE Y ENSURECAPACITY EJEMPLO Y EJERCICIOS RESUELTOS. (CU00922C)

EL PAQUETE JAVA.UTIL DEL API JAVA. PRINCIPALES INTERFACES Y CLASES: STRINGTOKENIZER, DATE, CALENDAR, HASHSET, TREEMAP, TREESET...

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C)

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C)

REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C)

INTERFACE COLLECTION DE JAVA.UTIL DEL API JAVA. EJERCICIOS Y EJEMPLOS RESUELTOS. MÉTODOS ADD, REMOVE, SIZE. STREAMS (CU00917C)

Algoritmos y Estructuras de Datos: Ordenación y Colas con Prioridad. Guillermo Román Díez

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Entiendo los métodos de Java equals y hashcode

CONCEPTO Y DEFINICIÓN DE CLASE EN JAVA. OBJETOS DEL MUNDO REAL Y ABSTRACTOS. EJEMPLOS. EJERCICIO (CU00644B)

A3F. Polimorfismo. Carlos Fontela

Programación orientada a objetos

INTERFACES SET Y SORTEDSET DEL API DE JAVA. CLASES HASHSET Y TREESET. EJEMPLO. DIFERENCIAS ENTRE ELLAS. (CU00921C)

CONCEPTO DE INTERFACE Y HERENCIA MÚLTIPLE EN JAVA. IMPLEMENTS. EJEMPLOS Y DIAGRAMAS DE CLASES. (CU00696B)

Interfaces y Clases Internas. ELO329: Diseño y Programación Orientados a Objetos

Clases Abstractas e Interfaces

IMPORTAR Y USAR CLASES DEL API DE JAVA. EJEMPLO CLASE MATH Y MÉTODO POW. CONSTRUCTORES PRIVADOS. (CU00647B)

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011

Estructuras de control selectivas

CLASES QUE UTILIZAN OBJETOS. RELACIÓN DE USO ENTRE CLASES JAVA. CONCEPTO DE DIAGRAMA DE CLASES. (CU00641B)

Ejercicio 1 (proyecto prlistas, paquete listas)

PROGRAMACIÓN GENÉRICA

Ingeniería del Software Separación entre Presentación y Lógica del Negocio

Polimorfismo Java y Servicios Web I Master en Ingeniería Matemática

PARA QUÉ SIRVEN LAS INTERFACES JAVA. IMPLEMENTAR UNA INTERFAZ DEL API. VENTAJAS. EJEMPLOS BÁSICOS. (CU00697B)

LA PALABRA CLAVE THIS EN JAVA. CONTENIDO NULL POR DEFECTO DE UN OBJETO. SOBRECARGA DE NOMBRES. EJEMPLOS (CU00654B)

CÓMO CREAR CONSTRUCTORES E INICIALIZAR OBJETOS EN JAVA. EJERCICIO EJEMPLO RESUELTO. (CU00639B)

FUNCIONES EN C QUÉ SIGNIFICA VOID? QUÉ ES EL TIPO DE RETORNO? PARA QUÉ SIRVE RETURN? MÓDULOS (CU00547F)

CLASE DATE DEL API JAVA. MÉTODOS BEFORE, AFTER, TOLOCALESTRING, TOGMTSTRING Y GETTIME. EJEMPLOS. (CU00924C)

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución.

Diseño y Programación Orientados a Objetos 29 de Abril de Primer Certamen

FUNCIONES JAVASCRIPT. CONCEPTO. PARÁMETROS O ARGUMENTOS Y TIPOS. PASO POR VALOR. RETURN. EJEMPLOS. (CU01122E)

Práctica 5. Fecha límite de entrega: viernes, 14 de diciembre

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Ejercicio de Programación Orientada a Objetos Curso 2016/2017 Cursos

Soluciones Ejercicios Tema 1

18. Interfaces Declaración de una interfaz

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

Interfaces y Clases Internas

Programación Orientada a Objetos en Java

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

El método Sort, nos permitirá ordenar cualquier cosa, que herede de la interfaz IComparable y que implemente el método CompareTo,

Computación Geométrica Colecciones en Java

Programación Orientada a Objetos Curso 2015/2016. Ejercicios sobre colecciones y Java 8

Clases y herencia. FJP Unidad 8. Diseño de clases

Programación Orientada a Objetos Curso 2014/2015. Práctica 11

Patrones de Diseño. Patrón de comportamiento Strategy. Técnicas de Programación - Curso 2008/09 (Esther Guerra Sánchez)

ASIGNACIÓN DE IGUALDAD EN JAVA. REFERENCIAS A OBJETOS. DIFERENCIA ENTRE IGUALDAD E IDENTIDAD. (CU00663B)

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

EDA. Tema 8 Colas de Prioridad: Heaps

REPASO ARRAYS MULTIDIMENSIONALES EN JAVA. DECLARACIÓN Y USO. EJEMPLOS Y EJERCICIOS RESUELTOS. (CU00905C)

Introducción a la Programación

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Ordenación de colecciones de objetos.

PRÁCTICA 4: DISEÑO DE TIPOS Versión: 1.0.1

Patrones de Diseño. Ing. Miguel Angel Cedeño Garcidueñas

Aplicaciones de Escritorio

Ejercicio de algoritmia resuelto con Visual Basic: ordenar series de series de números. (CU00356A)

EJERCICIOS RESUELTOS. EJEMPLOS CON NÚMEROS ALEATORIOS EN JAVA. RANDOM NEXTINT, NEXTDOUBLE, ETC. (CU00909C)

Tema 5 Programación Funcional y Streams. Programación Orientada a Objetos Curso 2017/2018

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED)

Tema: Funciones, Procedimientos y Recursividad en C#.

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

Examen Teórico Convocatoria de Junio de 2012

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

EJEMPLO EJERCICIO RESUELTO CON POLIMORFISMO, SOBREESCRITURA DE MÉTODOS Y HERENCIA JAVA. CÓDIGO (CU00691B)

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Definición. Mónica E. García García Feb 07

Herencia Java y Servicios Web I Master en Ingeniería Matemática

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

INSTRUCCIÓN PEDIR EN JAVA CON JTEXTAREA Y MOSTRAR CON JLABEL. SETBOUNDS Y SETTEXT. EJEMPLOS. (CU00929C)

QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B)

FUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 )

Tema 1. Herencia y Polimorfismo

INGRESAR DATOS CON UN CONTROL VISUAL EN JAVA. CLASE JTEXTFIELD Y MÉTODO GETTEXT. EJEMPLOS (CU00928C)

DOCUMENTAR PROYECTOS JAVA CON JAVADOC. COMENTARIOS, SÍMBOLOS, TAGS (DEPRECATED, PARAM, RETURN, ETC.) (CU00680B)

o Los arreglos son colecciones ordenadas de datos del mismo tipo. o Ejemplos: 2

Objetivos. El alumno empleará el concepto de excepción en la programación orientada a objetos para el manejo de errores de ejecución.

Bloque II. Elementos del lenguaje de programación Java

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Unidad Didáctica 1. Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos

Sacándole Partido a JUnit Módulo 1. Introducción a las Pruebas

Programación Dirigida a Objetos. MATERIAL COMPLEMENTARIO Tema 5.- Herencia

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

NETBEANS JAVA PROGRAMACIÓN ORIENTADA A OBJETOS

Patrones de Diseño. Patrón de comportamiento Iterator. Técnicas de programación - Curso 2008/09 (Esther Guerra Sánchez)

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

FUNCIONES CON Y SIN PARÁMETROS EN C. INVOCAR. SIGNATURAS. ARGUMENTOS. TIPO DE RETORNO (CU00549F)

1. (1 punto) Dado el siguiente fragmento en Java:

Programación multimedia y dispositivos móviles. Android y JSON

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Transcripción:

APRENDERAPROGRAMAR.COM EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE COMPARABLE Y MÉTODO COMPARETO DE JAVA. COMPARAR OBJETOS (CU00913C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I Fecha revisión: 2039 Resumen: Entrega nº 13 curso Lenguaje de programación Java Nivel Avanzado I. Autor: Manuel Sierra y José Luis Cuenca

EJERCICIO Y EJEMPLO RESUELTO Al igual que hemos introducido anteriormente la interfaz Cloneable, ahora vamos a realizar un ejercicio resuelto acerca de cómo una clase debe hacer uso de la interfaz Comparable. Esto nos va a permitir que en dicha clase se pueda realizar la comparación de objetos, permitiendo hacer ordenaciones de los mismos, y por ejemplo poderlos utilizar en posteriores clases que más adelante veremos, cómo son los conjuntos ordenados (sortedset). Vamos a partir también del siguiente código sobre el cual ya trabajamos en la interfaz Cloneable e iremos haciendo las modificaciones necesarias: /* Ejemplo Clase e Interfaz Comparable aprenderaprogramar.com */ public class Persona { public int dni, edad; public Persona( int d, int e){ this.dni = d; this.edad = e; Tenemos por tanto la misma clase Persona con sus atributos dni y edad que son valores enteros. Ahora vamos a implementar la interfaz Comparable y para ello estamos obligados a implementar (sobreescribir) el método public int compareto(persona o). Este método debe devolver un número negativo, 0, o un número positivo en función de que el objeto que comparemos con el objeto o de referencia sea menor, igual o mayor respectivamente que ese objeto de referencia. Por tanto vamos a incluir el método public int compareto(persona o) en nuestra clase Persona. Veamos cómo hacerlo. Vamos a cambiar un poco la lógica quizás, pero es un ejemplo. Si tuviéramos 2 Personas y quisiéramos compararlas u ordenarlas lo podríamos hacer por ejemplo por su altura, o por su edad, la pregunta a hacerse sería cuándo una persona es más grande que otra o cuándo es menor, o cuándo son iguales atendiendo a algún tipo de atributo. En nuestro ejemplo nos vamos a inventar esta ordenación y vamos a decir que una persona es más grande que otra si tiene la edad mayor, en cambio será menor si tiene una edad menor y serán iguales si y solo si su edad es igual y el dni también es igual. En este último caso si dos personas tienen la misma edad, se considerará mayor el que tenga el dni más grande. Fíjate que el criterio de ordenación lo hemos decidido nosotros. Una vez decidido, lo

implementaremos en forma de código. Distintos programadores pueden aplicar distintos criterios a la hora de implementar el método compareto. No obstante, recuerda siempre aplicar el sentido común y pensar en que los resultados que se obtengan deben ser lógicos. Con los criterios elegidos, nuestro código para la clase Persona quedaría de la siguiente manera: /* Ejemplo Clase e Interfaz Comparable aprenderaprogramar.com */ public class Persona implements Comparable<Persona>{ public int dni, edad; public Persona( int d, int e){ this.dni = d; this.edad = e; public int compareto(persona o) { int resultado=0; if (this.edad<o.edad) { resultado = -1; else if (this.edad>o.edad) { resultado = 1; else { if (this.dni<o.dni) { resultado = -1; else if (this.dni>o.dni) { resultado = 1; else { resultado = 0; return resultado; Como podemos ver resaltado hemos incluido el código implements Comparable<Persona>, que nos indica que vamos a implementar en la clase la interfaz Comparable para el parámetro Persona. También hemos incluido el código necesario para implementar el método public int compareto(persona o), donde además podemos observar que en el caso que las dos personas tengan la misma edad, comparamos sus dni para determinar qué persona es mayor que otra. Es un método que nos hemos creado nosotros y que tal vez no sea aplicable a la vida real, pero nos sirve a modo de ejemplo ya que en general este método será distinto para cada clase dependiendo de cómo queramos comparar los objetos con los que estemos tratando. Ahora al igual que en el uso de la interfaz Cloneable vamos a codificar una clase Programa, que básicamente lo que hará será generar 2 Personas y compararlas mostrando cuál es la mayor.

/* Ejemplo Clase e Interfaz Comparable aprenderaprogramar.com */ public class Programa { public static void main(string arg[]) { Persona p1 = new Persona(74999999,35); Persona p2 = new Persona(72759474,30); if (p1.compareto(p2) < 0 ) { System.out.println("La persona p1: es menor."); else if(p1.compareto(p2) > 0 ) {System.out.println("La persona p1: es mayor."); else { System.out.println ("La persona p1 es igual a la persona p2"); Así al igual que en el caso anterior para Cloneable, ahora tendremos para Comparable las siguientes clases definidas en BlueJ: La salida del programa donde hemos hecho uso del método compareto es la siguiente. Ahí podemos ver que la persona p1 es mayor que la persona p2 definida ya que su edad era 35 años mientras que para la persona p2 era 30. Por lo que el método compareto que implementa la clase Persona devuelve un 1 indicando que la persona p1 es mayor. Por tanto cada vez que deseemos que una clase implemente esta interfaz habrá que hacer algo similar a lo realizado en la implementación del método compareto(), es decir, deberemos de devolver un número negativo cuando el objeto que invoca el método compareto(object o) sea menor que el objeto que se le pasa para la comparación. En este caso hemos llamado al objeto de la comparación o, que es de la clase Object, pero cuando estemos implementando el método este objeto será de la clase en particular que sea. Así en nuestro ejemplo anterior este objeto a comparar era de la clase Persona

evidentemente. Ten en cuenta que un objeto Persona es también un objeto Object por el mecanismo de herencia de Java. Esta implementación de la interfaz Comparable es muy habitual ya que en general muchas veces vamos a desear que nuestras clases sean comparables no solo por el hecho de poder comparar objetos de dicha clase, sino por el uso de poder ordenar objetos de esa clase. Como es sabido la ordenación es una de las funciones más importantes y necesarias en el ámbito de la informática ya que tener la información ordenada hace mucho más rápidas las consultas o modificaciones de datos. Finalmente planteamos una reflexión: Por qué crees que se usa la implementación de interfaces en Java? Vamos a tratar de dar una respuesta. Hay varios motivos, pero uno principal es que mediante la implementación de interfaces todos los programadores usan el mismo nombre de método y estructura formal para comparar objetos (o clonar, u otras operaciones). Imagínate que estás trabajando en un equipo de programadores y tienes necesidad de utilizar una clase que ha codificado otro programador. Gracias a que se implementan interfaces Java, no necesitarás estudiar el código para ver qué método hay que invocar para comparar objetos de esa clase. Dado que todos los programadores usan la implementación de interfaces, sabemos que la comparación de objetos (o clonación, etc.) debe de hacerse invocando determinados métodos de determinada forma. Esto facilita el desarrollo de programas y la comprensión de los mismos, especialmente cuando hablamos de programas o desarrollos donde pueden intervenir cientos o miles de clases diferentes. EJERCICIO Utilizando Comparable y compareto resuelve el siguiente problema donde debemos partir de una clase Persona con atributos nombre, edad y altura. Queremos ordenar por edad y por altura a las siguientes personas: Nombre Altura Edad Mario 187 22 Pepe 173 52 Manuel 158 27 David 164 25 Alberto 184 80 Debemos comparar las personas y ordenarlas por altura primero (de mayor a menor) y por edad (de menor a mayor) después. Por pantalla debe mostrarse la lista de personas sin ordenar, ordenada por altura y ordenada por edad. Ejemplo de ejecución:

Personas sin ordenar 1. Mario - Altura: 187 - Edad: 22 2. Pepe - Altura: 173 - Edad: 52 3. Manuel - Altura: 158 - Edad: 27 4. David - Altura: 164 - Edad: 25 5. Alberto - Altura: 184 - Edad: 80 Personas ordenadas por altura 1. Mario - Altura: 187 - Edad: 22 2. Alberto - Altura: 184 - Edad: 80 3. Pepe - Altura: 173 - Edad: 52 4. David - Altura: 164 - Edad: 25 5. Manuel - Altura: 158 - Edad: 27 Personas ordenadas por edad 1. Mario - Altura: 187 - Edad: 22 2. David - Altura: 164 - Edad: 25 3. Manuel - Altura: 158 - Edad: 27 4. Pepe - Altura: 173 - Edad: 52 5. Alberto - Altura: 184 - Edad: 80 Para comprobar si es correcta tu solución puedes consultar en los foros aprenderaprogramar.com. Próxima entrega: CU00914C Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=58&itemid=180