FUNDAMENTOS DE PROGRAMACIÓN OBJETIVOS • Repasar la

Transcripción

FUNDAMENTOS DE PROGRAMACIÓN OBJETIVOS • Repasar la
FUNDAMENTOS DE PROGRAMACIÓN
PRÁCTICA 21: CLASE ITERABLES DE GUAVA III
Curso: 2010/11
Versión: 1.0.0
OBJETIVOS
•
•
•
Repasar la clase Ordering de Guava, así como las interfaces de java.util (List,
Set, SortedSet y Map).
Adquirir soltura en el uso de los métodos de la clase Iterables de la librería
Guava y en los incluidos en la clase Iterables2, diseñada por el Departamento.
Consolidar el uso de predicados y funciones.
PRERREQUISITOS
a) Haber realizado las prácticas anteriores del cuatrimestre.
b) Cargar el material que se proporciona para la práctica. Para ello, al igual que en
prácticas anteriores, importe el proyecto “Practica21Alumno” que se
proporciona con la práctica. En dicho proyecto encontrará el código necesario
para hacer la práctica.
EJERCICIO PROPUESTO
Se desea gestionar un Foro de Internet. Para modelarlo se dispone de los siguientes
tipos:
public interface Foro extends Iterable<Hilo> {
public SortedSet<Hilo> getHilos();
public SortedSet<Hilo> buscarHilos(String cadena);
public Hilo hiloMasVisitado();
public void incrementarVisitas(Fecha f);
public List<Mensaje> buscarMensajesDeUsuario(Usuario u);
}
public interface Hilo extends
Comparable<Hilo>, Copiable<Hilo>,
Iterable<Mensaje> {
List<Mensaje> getMensajes();
Integer getNumeroVisitas();
String getTitulo();
Fecha calculaFechaPublicacion();
Integer NumeroMsgsUsuario(Usuario u);
void setMensajes(List<Mensaje> l);
void setNumeroVisitas(Integer n);
void setTitulo(String t);
}
public interface Mensaje {
Fecha getFechaPublicacion();
Usuario getAutor();
Integer getTamaño();
String getContenido();
}
public interface Usuario extends
Persona {
Fecha getFechaRegistro();
String getAlias();
}
Para realizar la carga de la información de un objeto de tipo Hilo se dispone de un
fichero de texto “hilo.txt”. Cada línea contiene la información relativa a un mensaje del
hilo:
Autor, Fecha, Tamaño, Contenido
Autor, Fecha, Tamaño, Contenido
Autor, Fecha, Tamaño, Contenido
…
Fernando Martínez, 7/2/2011, 315, ¿Cuándo se van a publicar las
soluciones del primer parcial?
Mariano González, 7/2/2011, 597, Acaban de publicarse las soluciones
en la Web de la asignatura.
Fernando Martínez, 8/2/2011, 125, Muchas gracias.
Práctica 21: Clase Iterables de Guava III
2
1. Escriba la cabecera, atributos y un constructor para la clase HiloImpl que reciba el
nombre del fichero desde donde leer la información de los mensajes, una cadena
que contiene el título del hilo y el número de visitas en el hilo. Para ello, deberá
definir previamente un constructor de MensajeImpl que reciba una cadena con el
formato dispuesto para cada mensaje del hilo.
2. Implemente el método buscarHilos de la clase ForoImpl que recibe una cadena a
buscar entre los títulos de los Hilos del foro y devuelve un conjunto ordenado de los
hilos que contienen esa cadena. Tenga en cuenta que el orden será el natural
definido para el tipo Hilo.
3. Implemente el método hiloMasVisitado de la clase ForoImpl que devuelve el hilo
que tiene más visitas.
4. Implemente el método incrementarVisitas de la clase ForoImpl que incrementa en
uno el número de visitas de los hilos cuya fecha es posterior a la fecha dada como
parámetro. Implemente para ello el predicado PredicadoHiloFechaPosterior, de
tipo Predicado<Hilo>, cuyo constructor recibe una fecha de referencia.
5. Implemente el método buscarMensajesDeUsuario de la clase ForoImpl que
devuelve una lista con todos los mensajes de un usuario que se pasa como
parámetro. Implemente previamente el predicado PredicadoMensajeDeUsuario, de
tipo Predicado<Mensaje>, cuyo constructor recibe un Usuario, y decide si el
mensaje es de ese usuario o no.
6. Implemente el método getNumeroMensajesDeUsuario de la clase HiloImpl que
devuelve el número de mensajes de un usuario en el hilo.
7. Cree una clase de utilidad denominada UtilesForo en el paquete foroInternet e
implemente en ella los siguientes métodos estáticos:
a. Método usuarioTamMensajes que recibe una lista (List<Mensaje>) con todos
los mensajes del foro y devuelve un “mapa” (Map<Usuario, Integer>) donde
cada usuario estará asociado a la suma de los tamaños de los mensajes
enviados por dicho usuario. Objetivo del método: almacenar información
relativa al tamaño total de los mensajes enviados por cada usuario.
b. Método usuariosHilosRecientes que recibe como parámetros de entrada un
usuario, la fecha a partir de la que el hilo se considera reciente y un foro. El
método devuelve un conjunto con los hilos en los que el usuario ha participado.
Objetivo del método: conocer los hilos recientes en los que ha participado
algún usuario en particular.

Documentos relacionados