ELO 329 Programación Orientada a Objetos
"Utui"
Nicolás Aguayo
José Pablo Fuenzalida
En la Universidad Técnica Federico Santa María generalmente no se utiliza la TUI, aún cuando cada estudiante la posee. Esto se traduce en un recurso mal utilizado tanto para los estudiantes como para la misma universidad.
El proyecto busca: - Establecer un sistema capaz de reconocer y utilizar la tarjeta universitaria, - Implementar una simulación de lo que propone el uso de la tarjeta, - Construir un portal web que facilite el uso administrativo de las distintas funciones que se le pueden dar a la TUI. Este trabajo busca crear una simulación del campus universitario Casa Central implementando una solución óptima de la tarjeta, que presentará una propuesta de cómo podría aprovecharse el recurso para distintas situaciones.Una parte importante de este proyecto es la utilización del modelo iterativo e incremental, por lo que se opta por dividir el proyecto en etapas de desarrollo acumulativo que irán cumpliendo pequeños objetivos específicos.
La planificación de este proyecto considera dividirlo en etapas de desarrollo que van agregando funcionalidad de a poco le van agregando funcionalidad y complejidad.Etapas:
- Etapa1: Creación de objetos básicos.
- Etapa2: Ampliación en la cantidad y complejidad de los objetos mediante herencias, interfaces y métodos mas complejos.
- Etapa3: Estructuración funcional a través de un menú por consola.
- Etapa4: Reestructuración del funcionamiento del proyecto en una máquina de estados.
- Etapa5: Incorporación de un apartado gráfico.
En este caso, se tienen 2 tipos de escenarios identificados como la simulación y el portal web.
Se tiene la implementación como:
Objetos básicos: En esta etapa se escriben clases generales que servirán de base para clases futuras. El objetivo de esta etapa es esbozar el proyecto para definir la dirección de su desarrollo. En esta etapa se hace una función main netamente demostrativa, su objetivo solo es probar el funcionamiento de las clases definidas, no busca darle utilidad alguna al programa.
Ampliación y herencia: En esta etapa se escriben clases que representan objetos específicos. El objetivo de esta etapa es reafirmar el concepto de herencia y tener varios objetos específicos, como por ejemplo Entrance (Portería), Bank (banco) o CourtsOffice (Oficina de canchas). Se agrega también el uso de bases de datos básicas, archivos .txt que guardan información de diversos tipos. En esta etapa la función main no busca darle utilidad alguna al programa, sino corroborar el funcionamiento de los métodos definidos.
Menú por consola: Esta etapa agrega un Main que permite a un usuario interactuar con los diversos actores dentro del proyecto. En esta etapa se define el uso funcional del programa. Se logra coherencia entre los diversos actores y gracias a la implementación de las bases de datos, se logra también coherencia entre ejecuciones.
Maquina de estados: Se traduce el menú de consola a una máquina de estados, lo que facilitará la futura incorporación con la parte gráfica. Esto permitirá a objetos tomar acciones que afecten otros objetos, y se hará más sencilla la lectura del mismo código.
Parte gráfica Se reemplaza la interacción por teclado con JButtons y ActionListeners. Se decide reestructurar el proyecto para implementar un controlador independiente del main y del apartado gráfico el cual posee la máquina de estados propuesta previamente.
Casos de uso
La TUI es un recurso que de aprovecharse cabalmente, puede ser utilizado en bastantes escenarios. Algunos de estos son:
1)Habilitar el ingreso al campus.
2)Validar el ingreso a tiempo a una cancha arrendada.
3)Carga de una pequeña cuenta de dinero para pagos dentro de la universidad. Impresiones, kiosko, almuerzos, multas en biblioteca, etc.
4)Validación de asistencia a eventos.
5)Entrada a conciertos universitarios.
En las distintas etapas realizadas se adjuntan los respectivos diagramas UML
A continuación se presenta el diagrama de máquinas de estado para el funcionamiento del programa:
A continuación se muestra un ejemplo del menú entregado por consola como se tiene en las primeras etapas, entre las funcionalidades que se muestran se tiene la opción de hacer ingreso con el ROL tanto para ingresar a la universidad físicamente, como para acceder al portal web:
En la siguiente imagen se muestra la funcionalidad de registro incorporada en la etapa 4, gracias al traspaso a maquinas de estado que permitió compartir menús entre las distintas caras de la aplicación:
También se muestra la funcionalidad de arrendar una hora de cancha y las distintas opciones en esta.
En la última etapa se incorpora un apartado gráfico, para que el uso de la aplicación sea más amigable a todo público.
En la sigueinte imagen se muestra la opción de registro dentro del apaertado gráfico:
Al realizar este preyecto surgieron diversas dificultades de distinta índole, a continuación se detallan algunas de ellas.
1) Uso de GIT: El git presenta un gran número de ventajas a la hora de desarrollar un proecto en grupo, pero si dos personas editan al mismo tiempo el mismo archivo se producen dificultades a la hora de mantener la el código ordenado. Nuestra conclusión respecto a GIT es que limita el trabajo simultáneo, por tanto debe usarse otra herramienta o se debe trabajar en un solo computador cuando dos integrantes quieren avanzar en el código
2) Cambios de paradigma en modelo iterativo incremental: Si bién el modelo permite planificar un proyecto y dividirlo en tareas simples, a veces no es fácil compatibilizar una etapa con la siguiente. Esto se vió especialmente en el cambio de la etapa 4 a la etapa 5, donde la componente gráfica se hizo dueña del ciclo infinito, lo que obigó a rediseñar la función main completamente.
Para la creación de este proyecto se hizo uso del entorno IDE de Visual Studio Code versión 1.37.1 que resulta muy funcional para programar en JAVA, gracias a la gran cantidad de plugins que posee y que tiene compatibilidad con distintos sistemas operativos.
Se hizo uso de las funcionalidades de GitLab que hacen eficiente el desarrollo de código para trabajo en equipo. Tambien, el IDE utilizado posee herramientas muy útiles y versatiles para el desarrollo con repositorios GIT.
El proyecto puede ser descargado desde aquí