Examen Junio, preguntas y respuestas PDF

Title Examen Junio, preguntas y respuestas
Course Programacion orientada a objetos
Institution Universidad Rey Juan Carlos
Pages 13
File Size 207.8 KB
File Type PDF
Total Downloads 387
Total Views 527

Summary

1:15 Programación Orientada a Objetos29 de junio de 2015APELLIDOS: NOMBRE:GRADO: FIRMA:DNI: Duración: 2: 30 hCALIFICACIÓN:Ejercicio 1. [10 puntos] Se quiere hacer una aplicación para gestionar una competición de natación, que secompone de varias pruebas. En la competición pueden participar nadadores...


Description

Programación Orientada a Objetos

APELLIDOS: GRADO: DNI:

NOMBRE: FIRMA: Duración: 2:30h CALIFICACIÓN:

Ejercicio 1. [10 puntos] Se quiere hacer una aplicación para gestionar una competición de natación, que se compone de varias pruebas. En la competición pueden participar nadadores, de los que se conoce su número de licencia, su nombre. Si los nadadores son de club también se conoce el nombre del club y la ciudad donde reside. Los nadadores pueden competir en distintas pruebas y únicamente se almacenan los resultados. Los resultados de las pruebas contienen el nadador, la prueba y el tiempo (un valor real –float-) que ha empleado en realizarla. Las pruebas se caracterizan por un nombre. A continuación se muestra un diagrama UML abreviado (sin métodos):

Se pide implementar en Java: La clase Competicion [4 puntos], Nadador y NadadorClub [2 puntos], Prueba [3 puntos] y Resultado [1 punto] sabiendo que: Que la clase Competición tiene los métodos, entre otros: Constructor: La competición se inicializa con su nombre, una lista de participantes y con una lista de pruebas. visualizarNadadoresMasdeNPruebas(int n), que muestre por pantalla los nadadores (todos sus datos, es decir, nombre, número de licencia y si son de club también el nombre del club y la ciudad) que han participado en más de n pruebas. nadadoresTiempoMenorEnPrueba(String prueba, float tiempo) que devuelva una lista con los nadadores que han obtenido un tiempo menor que el dado en la prueba elegida. Si no existen, debe devolver null. aniadirResultado (String prueba, int licencia, float tiempo) que crea y añade un resultado con el tiempo dado a la prueba especificada y al nadador que coincida con esa licencia. Si no existe dicho nadador o dicha prueba en la competición no realizara ninguna acción (no lo añadirá a la prueba ni al nadador).

almacenarPruebas(String ruta), que almacena en un fichero dado por la ruta, todas las pruebas de la competición (con sus datos asociados) cargarNadadores(String ruta), que lee de un fichero (que se encuentra en la ruta) que contiene nadadores y los añade a la competición. Que la clase Prueba tiene los métodos, entre otros: Constructor: La prueba se inicializa con un nombre. ganador(), que devuelve el nadador que ha ganado la prueba (el que ha empleado un tiempo menor). Si todavía no hay ningún resultado, debe devolver null. participantes(), que devuelve una lista con todos los nadadores que han a participado en la prueba (que tienen resultados). aniadirResultado(Resultado resultado), que añade un resultado, siempre y cuando el nadador no tenga almacenado ya un resultado. eliminarResultado(Nadador nadador), que elimina el resultado (en caso de que exista) del nadador dado. Que la clase Nadador tiene los métodos, entre otros: Constructor: El nadador se inicializa con un nombre, número de licencia. aniadirResultado(Resultado resultado), que añade un resultado, siempre y cuando el nadador no tenga almacenado un resultado de esa prueba. pruebas(), que devuelve una lista con las pruebas en la que ha participado (en las que ha obtenido resultados). mejorPrueba(), que devuelve la prueba en la que obtenido mejor resultado (en la que ha empleado un tiempo menor en nadarla). Que la clase NadadorClub tiene los métodos, entre otros: Constructor: El nadador se inicializa con un nombre, número de licencia, club al que pertenece y ciudad. Que la clase Resultado tiene los métodos, entre otros: Constructor: El resultado se inicializa con un nadador, una prueba y el tiempo que ha invertido el nadador en completar la prueba. El constructor debe garantizar que no se produce resultados extraños (Si el tiempo es menor o igual que 0, debe inicializarlo al mayor valor posible – Float.MAX_VALUE- ). Se supone que el nadador y la prueba no son null. setTiempo (float tiempo) que cambia el valor del tiempo empleado. getNadador() que devuelve el nadador que ha obtenido este resultado.

NOTA: NO se deben implementar los métodos get() ni set()que no se solicitan en el enunciado,

aunque se usen. Ayuda: Para obtener el ganador o la mejor prueba, se pueden declarar dos comparadores de resultados y utilizar el método de la clase Collections: Collections.sort(listaAOrdenar, comparador); A modo de ayuda, se recuerda el nombre de algunas de las clases, métodos y excepciones relacionadas con la E/S: FileOutputStream, ObjectOutputStream, FileInputStream, ObjectInputStream, writeObject(), readObject(), IOException,

Pág. 2 / 13

POSIBLE SOLUCION (Con una clase de tipo COMPARATOR) /** * * @author isidoro.hernan */ public class Competicion { private String nombre; private ArrayList nadadores; private ArrayList pruebas; public Competicion(String nombre, ArrayList nadadores, ArrayList pruebas) { this.nombre = nombre; if (nadadores!=null){ this.nadadores = nadadores; } else { this.nadadores= new ArrayList(); } if (pruebas!=null){ this.pruebas = pruebas; } else { this.pruebas=new ArrayList(); } } public void aniadirResultado (String prueba, int licencia, float tiempo){ Prueba pruebaExistente = existePrueba(prueba); Nadador nadadorExistente = existeNadador(licencia); if ((pruebaExistente!=null)&&(nadadorExistente!=null)){ Resultado nuevo = new Resultado (nadadorExistente, pruebaExistente, tiempo); nadadorExistente.aniadirResultado(nuevo); pruebaExistente.aniadirResultado(nuevo); } } public void visualizarNadadoresMasdeNPruebas (int n){ for (Nadador nadador:this.nadadores){ if (nadador.getResultados().size()>n){ System.out.println(nadador); } } } public ArrayList nadadoresTiempoMenorEnPrueba(String prueba, float tiempo){ ArrayList mejores= new ArrayList(); Prueba pruebaComprobar = this.existePrueba(prueba); ArrayList resultados = pruebaComprobar.getResultados(); Collections.sort(resultados, new ComparadorTiempo()); for (Resultado res:resultados) { if (res.getTiempo()0)?tiempo:TIEMPOMAXIMO; }

public Nadador getNadador() { return nadador; } public void setNadador(Nadador nadador) { this.nadador = nadador; } public Prueba getPrueba() { return prueba; } public void setPrueba(Prueba prueba) { this.prueba = prueba; } public float getTiempo() { return tiempo; } public void setTiempo(float tiempo) { this.tiempo = (tiempo>0)?tiempo:this.tiempo; }

//Dos resultados se consideran iguales si se refieren al mismo nadador //y a la misma prueba @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Resultado other = (Resultado) obj; return ((this.nadador.equals(other.nadador)) && (this.prueba.equals(other.prueba))); } }

import java.util.Comparator; /** * * @author isidoro.hernan */ public class ComparadorTiempo implements Comparator {

Pág. 7 / 13

@Override public int compare(Resultado r1, Resultado r2) { int comp = 0; float diferencia = r1.getTiempo()-r2.getTiempo(); if (diferencia > 0){ comp = 1; } else if (diferencia < 0){ comp = -1; } return comp; } }

POSIBLE SOLUCION (Con Resultado de tipo COMPARABLE) /** * * @author isidoro.hernan */ public class Competicion { private String nombre; private ArrayList nadadores; private ArrayList pruebas; public Competicion(String nombre, ArrayList nadadores, ArrayList pruebas) { this.nombre = nombre; if (nadadores!=null){ this.nadadores = nadadores; } else { this.nadadores= new ArrayList(); } if (pruebas!=null){ this.pruebas = pruebas; } else { this.pruebas=new ArrayList(); } } public void aniadirResultado (String prueba, int licencia, float tiempo){ Prueba pruebaExistente = existePrueba(prueba); Nadador nadadorExistente = existeNadador(licencia); if ((pruebaExistente!=null)&&(nadadorExistente!=null)){ Resultado nuevo = new Resultado (nadadorExistente, pruebaExistente, tiempo); nadadorExistente.aniadirResultado(nuevo); pruebaExistente.aniadirResultado(nuevo); } } public void visualizarNadadoresMasdeNPruebas (int n){ for (Nadador nadador:this.nadadores){ if (nadador.getResultados().size()>n){ System.out.println(nadador); } } } public ArrayList nadadoresTiempoMenorEnPrueba(String prueba, float tiempo){ ArrayList mejores= new ArrayList(); Prueba pruebaComprobar = this.existePrueba(prueba); ArrayList resultados = pruebaComprobar.getResultados(); Collections.sort(resultados); for (Resultado res:resultados) { if (res.getTiempo()0)?tiempo:TIEMPOMAXIMO; }

public Nadador getNadador() { return nadador; } public void setNadador(Nadador nadador) { this.nadador = nadador; } public Prueba getPrueba() { return prueba; } public void setPrueba(Prueba prueba) { this.prueba = prueba; } public float getTiempo() { return tiempo; } public void setTiempo(float tiempo) { this.tiempo = (tiempo>0)?tiempo:this.tiempo; } @Override public int compareTo(Object o) { Resultado otro = (Resultado)o; int comp = 0; float diferencia = this.getTiempo()-otro.getTiempo(); if (diferencia > 0){ comp = 1; } else if (diferencia < 0){ comp = -1; } return comp; } //Dos resultados se consideran iguales si se refieren al mismo nadador //y a la misma prueba @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) {

Pág. 12 / 13

return false; } final Resultado other = (Resultado) obj; return ((this.nadador.equals(other.nadador)) && (this.prueba.equals(other.prueba))); } }

Pág. 13 / 13...


Similar Free PDFs