3er. Semestre
El proyecto trata de una bitácora de tareas ordenadas por el tiempo restante para que éstas caduquen. El proyecto se presenta como un mock-up de una app a implementar más adelante, con más funcionalidades.
![]() |
---|
App sin/con tareas pendientes |
La primera vez, se muestra la siguiente ventana:
![]() |
---|
Menú al inicio |
Desde aquí se puede editar las Configuraciones o crear una Nueva tarea. Para crear una tarea nueva, se necesita agregar categorias, de lo contrario no será posible crear una nueva tarea:
![]() |
---|
Nueva tarea sin categorias |
Para agregar categorias, se dirige al icono del engranaje (Configuraciones) en el menú principal y después a Editar categorias, aquí se agregan a lo más seis categorias (en esta versión):
![]() |
---|
Configuraciones |
Al tener al menos una categoría, se puede crear una tarea nueva:
![]() |
---|
Nueva tarea con categorias |
Se puede ajustar el avance en cada tarea:
![]() |
---|
Ajustar el avance |
Se puede editar la tarea ya creada:
![]() |
---|
Editar tarea |
Se puede terminar la tarea ya sea modificando el avance o seleccionando el checkbox:
![]() |
---|
Concluir tarea |
Se puede eliminar una tarea en particular:
![]() |
---|
Eliminar tarea |
O todas las tareas de un tipo:
![]() |
---|
Eliminar tareas por tipo |
El repositorio cuenta con dos versiones del proyecto, una para compilar/correr con javac/java y otra usando Maven. La diferencia es que con javac/java hay que descargar JavaFX (15.0.1) y los comandos son un poco largos, mientras que con Maven no hay que descargar nada (éste descarga las dependencias necesarias antes de compilar) y los comandos son sencillos.
En esta carpeta ya se incluye el jar de GSON/JSON, falta descargar JavaFX SDK (15.0.1)desde este enlace. Una vez descargado, se descomprime el zip y la carpeta (no el zip) se agrega a esta misma carpeta (la misma que contiene a /src) y, desde la carpeta que contiene a las carpetas /gson-2.6.2, /javafx-sdk-15.0.1, /recursos y /src, se ejecutan los siguientes comandos:
export JAVAFX=javafx-sdk-15.0.1/lib
javac -cp "gson-2.6.2/lib/gson-2.6.2.jar" --module-path $JAVAFX --add-modules javafx.controls src/*.java
java -cp ./src:./gson-2.6.2/lib/gson-2.6.2.jar --module-path $JAVAFX --add-modules javafx.controls Main
En el tercer comando se usa :. en Unix (dos puntos, punto), pero en Windows se debe usar ;. (punto y coma, punto).
Es muy sencillo, se ubica en la misma carpeta donde está el pom.xml y escriben las siguientes instrucciones
mvn install
mvn -q exec:java -Dexec.mainClass=Main
El único inconveniente de esta versión es que la primera vez que se ejecuta, tarda un poco en descargar las dependencias, pero esto sólo ocurre la primera vez.
Como dato extra, compilé y ejecuté lo anterior con Java 12.0.2.
Para la implementación se utilizaron los siguientes patrones:
- MVC para dividir la estructura en tres partes:
- La Vista se encarga de crear los objetos en pantalla que representan los datos del Modelo,
- el Controlador, constituido por varias clases, se encarga de la lógica del programa,
- el Modelo se encarga de leer los datos, convertirlos en objetos, almacenarlos en estructuras y escribirlos en archivos al final del proceso
![]() |
---|
Clic en imagen para agrandar |
- Observer. El paso del tiempo es un factor clave: cada tanto, el Modelo se actualiza, lo que implica un cambio en la base. Con Observer, el Modelo le puede avisar al Controlador (y éste a la Vista) que ocurrieron cambios y se deben actualizar los objetos en pantalla.
![]() |
---|
Clic en imagen para agrandar |
- Proxy. Es importante mantener la seguridad del Modelo. Para evitar que la Vista tenga acceso a los archivos en la base (durante la creación de los objetos gráficos) y estos puedan ser modificados directamente por el usuario, Proxy cumple el rol de intermediario entre el Controlador y el Modelo, pues este se encarga de crear objetos temporales (o copias del objeto original) con las cuales se crean los objetos gráficos con los que interactúa el usuario.
![]() |
---|
Clic en imagen para agrandar |
- Singleton. En la Vista, se usan varios patrones. Uno de estos es una pila Singleton la cual contiene todo elemento (uno encima de otro) que se ve en pantalla. Esta se encarga de eliminar los elementos anteriores y contener nuevos elementos cada que se soliciten cambios desde el Controlador (vía el Modelo). No puede haber más de dos instancias de estas pues todos los elementos gráficos se guardan en la pila y sólo un objeto principal (una raíz) puede presentarse en el escenario (Stage) de JavaFX.
![]() |
---|
Clic en imagen para agrandar |
![]() |
Representación de los elementos en la pila. |
- Factory. Tenemos dos tipos de objetos que se crean constantemente y permiten al usuario interactuar con la app. Estos son las SubVentanas (ventanas dentro de la ventana principal) con opciones para hacer modificaciones, y los Eventos (EventHandlers en botones y otros objetos de interacción), que establecen lo que debe pasar dada la elección del usuario. Para ambas familias de objetos usamos Factory.
![]() |
---|
Clic en imagen para agrandar |
- Strategy. Tenemos tres tipos de tareas, cada tipo tiene una apariencia distinta. Se usa Strategy para que, en tiempo de ejecución, se elija la apariencia de cada tipo.
![]() |
---|
Clic en imagen para agrandar |
- Builder. Cada tarea se presenta de manera gráfica como un bloque conformado por secciones. Como estos objetos se construyen con los mismos componente pero con algunas variaciones, se utilizó Builder.
![]() |
---|
Diagrama de clases (resumido) |
![]() |
---|
Diagrama de casos de uso |
![]() |
---|
Diagrama de actividades |
![]() |
---|
Diagrama de secuencia: Nueva tarea |
![]() |
---|
Diagrama de secuencia: Editar tarea |
![]() |
---|
Diagrama de secuencia: Eliminar tarea |
![]() |
---|
Diagrama de secuencia: Ajustar avance de tarea |
![]() |
---|
Diagrama de secuencia: Concluir tarea |
![]() |
---|
Diagrama de secuencia: Configuraciones |
![]() |
---|
Diagrama de secuencia: Editar categorías |
![]() |
---|
Diagrama de secuencia: Actualizar tareas |