ELO 330 Programación de Sistemas
"Servidor para almacenar datos del proyecto anterior (Interfaz para facilitar los estudios ELO329)"

Filip Ekström (ELO329)
David Magiera

Descripción del problema

"Las asignaturas en el nivel universitario pueden ser difíciles sin tener que manejar la planificación de pruebas, tareas y otras evaluaciones. Por eso, conviene tener una herramienta para tener una idea cuando uno tiene sus pruebas para poder estudiar en una manera eficiente y evitar estudiar toda la noche antes de una prueba." Este proyecto es una interfaz gráfica que facilita la planificación de los estudios mediante un resumen de las asignaturas, y además una vista más detallada de cada una de las asignaturas. (ELO329)

En el proyecto pasado logramos crear el interfaz para introducir ramos con distintos evaluaciones. Lo que faltaba era una manera para almanecar los datos. Cada vez el usuario cerraba el programa y lo abría de nueva, tenía que introducir todos los datos de nuevo. Por eso era necesario crear un servidor local, que comunica con el programa a través del internet y almaneca sus datos. Así el estudiante puede acceder a todos sus tareas en cualquier hora de cualquier lugar del mundo. Lo único que necesita es una conexión con el internet.

Análisis del problema

Los requisitos básicos son los siguientes:

Diagrama de procesos


Envia objetos como ArrayList del tipo Subject

Para enviar objetos por TCP en Java hay dos opciones:

  • Partir el objeto hasta que solamente queden elementos de tipos basicos como String, Integer etc. . Luego descodifica el otro cliente el mensaje y reconstruye el objeto con los elementos recibidos
  • Usar el interfaz Serializable: Objetos de clases con el interfaz Serializable implementado, pueden ser enviados y recibidos a través de ObjectOutputStream y ObjectInputStream.


  • Decidí enviar los objetos directamente por TCP. Así que tuve que implementar el Interfaz Serializable para las clases Subject y Evaluation. La clase LocalDateTime tiene el interfaz implementado por defecto.

    Casos de uso

    Caso 1: Usuario agrega un curso con evaluaciones y lo envia al servidor
    Actores (Usuario) Sistema cliente (Software) Servidor (Software)
    Inicia programa
    Inicia el programa en la pestaña "To-do"
    Hace click en el botón "add subject"
    Muestra una nueva ventana con campos a llenar. Los campos son: Name, Code, Professor y Credits. Termina con hacer click en "save"
    Agrega el ramo a la lista de asignaturas. Además, agrega una nueva pestaña que contiene una lista que aún está vacía, pero preparada para poder agregar evaluaciones
    Hace click en la pestaña del curso
    Cambia la vista a la pestaña
    Hace click en el botón "add evaluation"
    Abre una nueva ventana con campos a llenar. Los Campos son: Name, Date y Time
    Llena la información pedida
    Agrega la evaluación a la lista en la pestaña del curso y, si la evaluación es la próxima evaluación del curso, agrega la evaluación a la lista en la pestaña "to-do"
    Hace click en el botón "save"
    Conecta con el servidor y le envia un mensaje para señlar que va a envia la lista actualizada. Luego envia la lista actualizada.
    Guarda la lista recibida como versión actualizada.
    Cierra el programa



    Caso 2: Usuario abre el programa de nuevo y sincroniza con el servidor
    Actores (Usuario) Sistema cliente (Software) Servidor (Software)
    Hace click en el botón "updateList"
    Conecta con el servidor y envia un mensaje para solicitar la lista actual.
    Envia la lista actual al sistema cliente
    Guarda la lista recibida como versión actualizada. Abre nuevos tabs para cada ramo y llena los tabs con los evaluaciones correspondientes
    Sigue trabajando con la versión actualizada



    Pruebas

    Cuando uno abre el programa, el software muestra la pestaña "To-Do":



    La ventana para agregar asignatura:



    La ventana para agregar evaluación:



    La pestaña con dos evaluaciones agregadas:



    La pestaña "To-Do" con dos asignaturas agregadas. Ahora el usuario hace click en el butón "save", luego cierra la sesión:



    El usuario abrió nueva sesión, luego hace click en el botón "updateList":



    Aparece la pestaña "ToDo" en el estado como el usuario la guardó en la sesión antes:



    También la pestána del ramo se recuperó:



    Dificultades y mejoras futuras

    Una dificultad ha sido encontrar una manera para enviar objetos por TCP. Además hay que decir que por el interfaz Serializable el manejo es mucho más fácil que en C. También el manejo de sockets en Java es más fácil que en C.

    Un mejoramiento sería la implementación de un servidor concurrente, que crea hebras para comunicar con los clientes. Además guardar los datos en un archivo local sirví­a como seguro en caso que el servidor se apaga por alguna razón.

    Código de fuente

    Se puede bajar el código desde el siguiente enlace.