Programación Orientada a Objetos. Curso
2009/2010
Práctica 3. Interfaces de usuario y librerías
Calendario
|
Lunes
|
Martes
|
Miércoles
|
Jueves
|
Viernes
|
Observaciones
|
Inicio
|
19/04
|
20/04
|
21/04
|
22/04
|
16/04
|
|
Evaluación
|
17/05
|
18/05
|
19/05
|
20/05
|
21/05
|
Entrega el día anterior.
El grupo del lunes 2 horas antes del comienzo de la clase.
|
Objetivos
En esta práctica el alumno se formará en las siguientes capacidades:
- Desarrollo de interfaces de usuario con tecnología orientada a objetos.
- Desarrollo y manejo de estructuras de datos avanzadas orientadas a objetos.
- Creación y manejo de excepciones.
- Utilización de librerías de clases desarrolladas por terceros.
- Opcionalmente, utilización de elementos de RMI avanzado.
Descripción del proyecto
El trabajo a realizar consiste en la implementación de un sistema de gestión de redes sociales,
en el que los usuarios puedan darse de alta y añadir a otros usuarios en su lista de contactos (y opcionalmente, comunicarse entre sí).
El programa gestionará la creación de estructuras internas en las que se representen los datos
de los usuarios y las relaciones entre ellos. La aplicación ofrecerá una interfaz de usuario para
que la interacción con el sistema se realice de forma fácil para los usuarios.
La práctica ilustra dos aspectos fundamentales relacionados con la praxis orientada a objetos,
y Java en particular: 1) el desarrollo de interfaces gráficas, y 2) la reutilización de librerías.
Respecto al segundo aspecto, se utilizarán en concreto librerías para a) el manejo de estructuras de
grafo, y b) la lectura y escritura de datos en formato XML.
Las funcionalidades a desarrollar se describen en los siguientes apartados.
1. Creación y almacenamiento de datos
Las estructuras de datos a definir son las siguientes (sin excluir otras adicionales que el alumno juzgue oportunas):
- Usuarios: se incluirán datos personales, como mínimo nombre, nick (único para cada usuario), password, y un ID único.
- Relaciones entre usuarios: se pueden crear como una estructura (clase) explícita, de forma que
se pueda registrar, por ejemplo, la fecha en que se creó el contacto entre dos usuarios.
- Red social: estructura de grafo basada en las dos clases anteriores, utilizando la librería JUNG.
Además de definir las estructuras anteriores:
- Se escribirá el código necesario para leer y guardar todos los datos
de una red social en un fichero XML. Se utilizará para ello la librería JDOM.
- Se hará un control sencillo de consistencia de datos comprobando, por ejemplo, que no se dupliquen
nicks ni IDs en diferentes usuarios, que no se dupliquen relaciones, o que una relación no haga referencia a un usuario que no exista.
Este chequeo se gestionará mediante la emisión de excepciones propias cuando se detecten este tipo de
inconsistencias.
2. Interfaz básica para datos de usuario
Se implementará una interfaz gráfica para que los usuarios puedan darse de alta, visualizar y editar
sus datos fácilmente.
Las funcionalidades a ofrecer al usuario son, al menos, las siguientes:
- Registrar nuevo usuario.
- Logearse en el sistema. Esta acción es necesaria para acceder a todas las demás funcionalidades
(excepto crear un nuevo usuario, para lo que no se necesita login previo).
- Ver y editar los datos del usuario.
- Buscar y visualizar a otros usuarios (dado el nombre o nick).
Naturalmente estas funcionalidades precisarán la ampliación de las clases internas con
los métodos (y en su caso datos) necesarios para efectuar estas operaciones.
El archivo XML deberá actualizarse cada vez que en el programa se realice un cambio (nuevo usuario, editar datos, etc.) que afecte a
los datos de la red social, de forma que ésta sea persistente.
3. Creación y manejo de la red social
Se ampliará la interfaz de usuario para la visualización, creación, y exploración de la red social de contactos,
con las siguientes funcionalidades:
- Añadir usuarios a la lista de contactos de un usuario. En principio la relación será siempre mutua, pero el alumno puede explorar otras posibilidades si lo desea.
- Visualizar la lista de contactos en una lista lineal (JList, JTable...).
- Dado un usuario logeado y otro usuario (cualquiera) seleccionado, mostrar:
- Los contactos comunes, si los hay.
- La distancia más corta ("grados de separación") entre ambos usuarios en la red.
Nota: utilizar las clases JUNG que ofrecen directamente estas operaciones.
Se valorará la calidad de la interfaz de usuario (claridad, facilidad de uso, fluidez de ejecución), así como el uso
de componentes avanzadas (p.e. JTable).
Opcionalmente:
- La creación de un contacto necesitará la aceptación (asíncrona) del otro usuario.
Cuando este usuario entre después en el sistema, se le informa de las peticiones de contacto que le hayan llegado, para que las
acepte o no. Sólo en caso positivo tendrá efecto la creación del contacto.
- Dados el usuario conectado y un usuario seleccionado, mostrar la cadena de usuarios que forman el camino más corto entre ambos en la red (existe una clase JUNG que
proporciona directamente esta funcionalidad).
- Visualización y manipulación gráfica:
- Visualizar gráficamente toda la red social, en forma de grafo.
Nota: el código para esta parte deberá ser escrito enteramente por el alumno, sin utilizar librerías
ni clases como las que de hecho incluye JUNG para visualización. La disposición automática de grafos es un problema complejo en general, y se aceptará cualquier
algoritmo sencillo.
- Añadir facilidades interactivas para editar la red social sobre su representación gráfica
mediante manipulación directa (mover nodos, añadir nodos, añadir arcos, etc.).
Nota: puesto que estas funcionalidades permiten editar las relaciones de cualquier usuario, serán accesibles sólo para un superusuario "admin" con
password "admin".
- Permitir guardar/recuperar el estado del diagrama.
4. Opcional: arquitectura cliente-servidor y chat
Extender el programa para permitir la conexión simultánea de varios usuarios desde clientes remotos, de forma que
los datos de los usuarios y la red social se gestionen en un servidor central.
Sobre esta arquitectura, se añadirá la siguiente funcionalidad:
- Visualizar en tiempo real la lista de usuarios conectados.
- Servicio de chat entre usuarios.
Se valorará el uso adecuado de objetos por valor u objetos remotos, según se adecúe a cada caso, así como la
utilización de callbacks.
Material de referencia
Se deja intencionadamente al alumno la labor de buscar y entender el manejo de las librerías JUNG y JDOM,
así como la documentación de estas librerías, naturalmente con la asistencia de los profesores en las clases de laboratorio.
Se facilita por otra parte como ayuda un ejemplo parcial de código ilustrativo
del trabajo a realizar, junto con un ejemplo de fichero de datos en XML. El alumno es libre de reutilizar
este código o no, o seguir cualquier modificación, según su parecer y las indicaciones del profesor de prácticas.
Entrega
Las prácticas se deben entregar antes de la fecha de
evaluación indicada al comienzo del enunciado, teniendo en
cuenta las horas límite
de entrega mencionadas en las normas
de la asignatura.
El fichero .zip
a entregar debe incluir:
- Código fuente, datos y librerías.
- Los ficheros de código fuente se situarán en un directorio "src".
- Los datos en un directorio "res".
- Los .jar de las librerías en un directorio "lib".
La estructura de directorios será la necesaria
para que, descomprimiendo el .zip
entregado y escribiendo "ant run" (es decir, ejecutando el "build.xml" includido en el .zip), la práctica se
compile y ejecute correctamente.
- Un leeme.txt que
describa los ficheros incluidos en el .zip.
- El build.xml usado para
compilar y ejecutar la práctica (generado por netbeans o creado
manualmente).
- Una memoria en pdf
y un directorio javadoc con la documentación generada para cada
clase.
NOTA:
Las entregas que no cumplan los requisitos enumerados en las normas
recibirán una penalización de 0.5 puntos.
(C) 2009-2010 Escuela Politécnica
Superior, UAM