Boletín de problemas 23: Repaso

Anuncio
FUNDAMENTOS DE PROGRAMACIÓN
BOLETÍN DE PROBLEMAS 23: Tratamientos secuenciales
generalizados, Preconditions, Combinación de tratamientos
Curso: 2011/12
Versión: 1.0.0
OBJETIVOS

Consolidar los conceptos vistos en el 2º cuatrimestre (parte Java). Esto es:
o Uso de los métodos de la clase Iterables2.
o Creación de objetos a partir de las factorías de Guava (Sets, Lists y Maps)
o Implementación de predicados y funciones.
o Uso de Ordering y Map.
o Uso de los métodos de la clase Preconditions.
PREPARACIÓN DEL BOLETÍN
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 getNumeroMensajesDeUsuario
(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:
Usuario;Fecha;Tamaño;Contenido
Usuario;Fecha;Tamaño;Contenido
Usuario;Fecha;Tamaño;Contenido
…
Martínez,Fernando,28678992P;7/2/2012;315;¿Cuándo se van a publicar
las soluciones del primer parcial?
González,Mariano,36887244M;7/2/2012;597;Acaban de publicarse las
soluciones en la Web de la asignatura.
Martínez,Fernando,28678992P;8/2/2012;125;Muchas gracias.
EJERCICIOS
1. Realice las modificaciones necesarias en los tipos Persona y Fecha vistos hasta ahora
para:
a) Utilizar los métodos de la clase Preconditions para comprobar las condiciones que
tienen que cumplir los parámetros de entrada de los constructores y métodos que
procedan. Asegure que en el tipo Persona, los atributos nombre, apellidos y dni no
pueden ser nulos. En el tipo Fecha no podrán ser nulos ninguno de los atributos.
Boletín de problemas 23: Repaso
2
b) Verifique que tiene implementados de prácticas anteriores un constructor por
cadena para cada uno de dichos tipos.
2. Implemente las clases UsuarioImpl, MensajeImpl, HiloImpl y ForoImpl teniendo en
cuenta:
a) UsuarioImpl hereda de Persona. Contiene dos constructores: el primero recibe
como parámetros: apellidos, nombre, dni, alias y fecha de registro. El segundo
recibe una cadena con los apellidos, el nombre y el dni del usuario del foro.
b) MensajeImpl contiene, además del constructor que recibe todas las propiedades del
tipo, otro constructor que recibe una cadena con el formato dispuesto para cada
mensaje del hilo.
c) HiloImpl:
i. Precondiciones: los atributos no pueden ser nulos y el número de visitas no
puede ser negativo.
ii. Contiene 3 constructores: uno que no recibe parámetros, uno que recibe un
argumento por cada una de las propiedades del tipo, y un tercero que recibe
tres parámetros: 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.
iii. Criterio de igualdad: dos hilos son iguales si tienen el mismo título.
iv. Orden natural: por título.
d) ForoImpl tiene como propiedad un conjunto ordenado de hilos.
3. 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.
4. Implemente el método hiloMasVisitado de la clase ForoImpl que devuelve el hilo que
tiene más visitas.
5. 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.
6. 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.
7. Implemente el método getNumeroMensajesDeUsuario de la clase HiloImpl que
devuelve el número de mensajes de un usuario en el hilo.
8. Cree una clase de utilidad denominada UtilesForo en el paquete utiles 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 “map” (Map<Usuario, Integer>) donde cada
usuario estará asociado a la suma de los tamaños de los mensajes enviados por
dicho usuario.
b. Método usuariosHilosRecientes que recibe como parámetros de entrada un
usuario, la fecha a partir de la cual el hilo se considera reciente y un foro. El
método devuelve un conjunto con los hilos en los que el usuario ha participado.
9. Pruebe los métodos implementados en la clase TestForo.
Descargar