Sistema de Gestión de Proyectos (MultiGestor)¶
El objetivo es desarrollar un MultiGestor de Proyectos que permita administrar múltiples carteras de proyectos, sus tareas asociadas y los recursos humanos asignados. El sistema debe seguir un enfoque de Programación Orientada a Objetos estricto y garantizar la persistencia de los datos.
Requerimientos Funcionales¶
Cada Gestor puede contener múltiples Proyectos. Un proyecto está compuesto por un conjunto de Tareas, y a cada tarea se le pueden asignar Colaboradores.
Gestión de Tareas y Colaboradores¶
Crear Proyecto: Cada proyecto debe tener un nombre único, una descripción y una fecha de inicio.
Agregar Tarea: Añadir tareas a un proyecto específico. Una tarea tiene un título, una prioridad (ALTA, MEDIA, BAJA), una fecha límite y un estado (PENDIENTE, EN_PROCESO, COMPLETADA).
Asignar Colaborador: Vincular un colaborador (nombre, legajo, especialidad) a una tarea específica. Una tarea puede tener múltiples colaboradores.
Eliminar Tarea: Remover una tarea del proyecto mediante su identificador único.
Buscar Tarea por Título: Recuperar la información de una tarea filtrando por su título.
Buscar Colaborador por Legajo: Localizar a un colaborador en el sistema y listar las tareas en las que participa.
Listar Tareas por Fecha Límite: Devolver una lista de tareas ordenadas cronológicamente por su fecha de vencimiento.
Listar Tareas por Prioridad: Devolver una lista de tareas ordenadas por jerarquía de prioridad (ALTA > MEDIA > BAJA).
Estadísticas de Proyecto:
Cantidad total de tareas.
Porcentaje de tareas completadas.
Limpiar Proyecto: Eliminar todas las tareas y asignaciones de un proyecto.
Requerimientos Técnicos¶
Persistencia: El sistema debe persistir la información en archivos de disco (puede ser mediante Serialización, CSV o JSON manual). Se debe implementar un patrón que desacople la lógica de negocio del almacenamiento (e.g., Repository o DAO).
Estructuras de Datos: Utilizar colecciones del framework de Java (
List,Set,Map) de forma justificada según la necesidad de ordenamiento o unicidad.Patrones de Diseño: Se valorará el uso de patrones como Strategy para los diferentes criterios de ordenamiento, Factory para la creación de objetos complejos o Observer si fuera necesario.
Orientación a Objetos Estricta:
Uso correcto de modificadores de acceso.
Aplicación de interfaces para definir comportamientos.
Evitar el acoplamiento fuerte entre clases.
Criterios de Evaluación¶
Modelado de Clases: Relaciones de composición y agregación correctas.
Manejo de Excepciones: Gestión de errores robusta (e.g., búsqueda de elementos inexistentes, archivos corruptos).
Clean Code: Nombramiento semántico, métodos cortos y responsabilidad única.
Persistencia: Capacidad de recuperar el estado del sistema tras cerrar la ejecución.