Vous êtes sur la page 1sur 5

Ejercicio y ejemplo resuelto de la interface Comparable de Java.

APRENDERAPROGRAMAR.COM

EJERCICIO Y EJEMPLO
RESUELTO: USO DE LA
INTERFACE COMPARABLE Y
MTODO COMPARETO DE
JAVA. COMPARAR OBJETOS
(CU00911C)

Seccin: Cursos
Categora: Lenguaje de programacin Java nivel avanzado I
Fecha revisin: 2029
Resumen: Entrega n11 curso Lenguaje de programacin Java Nivel Avanzado I.

aprenderaprogramar.com, 2006-2029

Autor: Manuel Sierra

Ejercicio y ejemplo resuelto de la interface Comparable de Java.

EJERCICIO Y EJEMPLO RESUELTO


Al igual que hemos introducido anteriormente la interfaz Cloneable, ahora vamos a realizar un ejercicio
resuelto acerca de cmo una clase debe hacer uso de la interfaz Comparable. Esto nos va a permitir
que en dicha clase se pueda realizar la comparacin de objetos, permitiendo hacer ordenaciones de los
mismos, y por ejemplo poderlos utilizar en posteriores clases que ms adelante veremos, cmo son los
conjuntos ordenados (sortedset).

Vamos a partir tambin del siguiente cdigo 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 mtodo public int compareTo(Persona o). Este mtodo debe devolver un nmero
negativo, 0, o un nmero positivo en funcin 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 mtodo public int compareTo(Persona o) en nuestra clase Persona.
Veamos cmo hacerlo. Vamos a cambiar un poco la lgica quizs, pero es un ejemplo. Si tuviramos 2
Personas y quisiramos compararlas u ordenarlas lo podramos hacer por ejemplo por su altura, o por
su edad, la pregunta a hacerse sera cundo una persona es ms grande que otra o cundo es menor, o
cundo son iguales atendiendo a algn tipo de atributo. En nuestro ejemplo nos vamos a inventar esta
ordenacin y vamos a decir que una persona es ms grande que otra si tiene la edad mayor, en cambio
ser menor si tiene una edad menor y sern iguales si y solo si su edad es igual y el dni tambin es igual.
En este ltimo caso si dos personas tienen la misma edad, se considerar mayor el que tenga el dni ms
grande. Fjate que el criterio de ordenacin lo hemos decidido nosotros. Una vez decidido, lo
aprenderaprogramar.com, 2006-2029

Ejercicio y ejemplo resuelto de la interface Comparable de Java.

implementaremos en forma de cdigo. Distintos programadores pueden aplicar distintos criterios a la


hora de implementar el mtodo compareTo. No obstante, recuerda siempre aplicar el sentido comn y
pensar en que los resultados que se obtengan deben ser lgicos.

Con los criterios elegidos, nuestro cdigo para la clase Persona quedara 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 cdigo implements Comparable<Persona>, que nos
indica que vamos a implementar en la clase la interfaz Comparable para el parmetro Persona. Tambin
hemos incluido el cdigo necesario para implementar el mtodo public int compareTo(Persona o),
donde adems 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 mtodo 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 mtodo ser distinto para cada clase dependiendo de cmo 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
bsicamente lo que har ser generar 2 Personas y compararlas mostrando cul es la mayor.

aprenderaprogramar.com, 2006-2029

Ejercicio y ejemplo resuelto de la interface Comparable de Java.

/* 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 mtodo compareTo es la siguiente. Ah podemos
ver que la persona p1 es mayor que la persona p2 definida ya que su edad era 35 aos mientras que
para la persona p2 era 30. Por lo que el mtodo 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 implementacin del mtodo compareTo(), es decir, deberemos de devolver un
nmero negativo cuando el objeto que invoca el mtodo compareTo(Object o) sea menor que el objeto
que se le pasa para la comparacin. En este caso hemos llamado al objeto de la comparacin o, que
es de la clase Object, pero cuando estemos implementando el mtodo este objeto ser de la clase en
particular que sea. As en nuestro ejemplo anterior este objeto a comparar era de la clase Persona
aprenderaprogramar.com, 2006-2029

Ejercicio y ejemplo resuelto de la interface Comparable de Java.

evidentemente. Ten en cuenta que un objeto Persona es tambin un objeto Object por el mecanismo
de herencia de Java.
Esta implementacin 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 ordenacin es una
de las funciones ms importantes y necesarias en el mbito de la informtica ya que tener la
informacin ordenada hace mucho ms rpidas las consultas o modificaciones de datos.
Finalmente planteamos una reflexin: Por qu crees que se usa la implementacin de interfaces en
Java? Vamos a tratar de dar una respuesta. Hay varios motivos, pero uno principal es que mediante la
implementacin de interfaces todos los programadores usan el mismo nombre de mtodo y estructura
formal para comparar objetos (o clonar, u otras operaciones). Imagnate que ests 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 necesitars estudiar el cdigo para ver qu mtodo
hay que invocar para comparar objetos de esa clase. Dado que todos los programadores usan la
implementacin de interfaces, sabemos que la comparacin de objetos (o clonacin, etc.) debe de
hacerse invocando determinados mtodos de determinada forma. Esto facilita el desarrollo de
programas y la comprensin de los mismos, especialmente cuando hablamos de programas o
desarrollos donde pueden intervenir cientos o miles de clases diferentes.

Prxima entrega: CU00912C


Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la direccin siguiente:
http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=58&Itemid=180

aprenderaprogramar.com, 2006-2029

Vous aimerez peut-être aussi