Desarrollar una aplicación en Java para gestionar vehículos de una empresa, aplicando los principios de programación orientada a objetos y los primeros tres principios SOLID:
SRP (Single Responsibility), OCP (Open/Closed) y LSP (Liskov Substitution).
A lo largo del trabajo se utilizará también la estructura ArrayList para manejar listas dinámicas de vehículos.
Además, deberán aplicar buenas prácticas de gestión de proyectos usando GitHub: Issues, Milestones, Projects y Pull Requests.
- Java SE (cualquier versión compatible con JDK 8+)
- Git y GitHub
- GitHub Projects
- GitHub Issues
- GitHub Pull Requests
El trabajo está dividido en etapas. Cada etapa deberá registrarse como un Milestone en GitHub.
- Crear la clase
Vehiculocon atributos:patente,marca,año,capacidadCargaKg. - Agregar constructor, getters/setters y método
mostrarInformacion(). - Crear la clase
Mainque cree e imprima al menos 3 vehículos.
- Extraer la responsabilidad de impresión a una nueva clase
VehiculoPrinter. - Eliminar el método
mostrarInformacion()deVehiculo.
- Crear subclase
Camioncon atributotieneAcoplado. - Modificar
VehiculoPrinterpara imprimir camiones sin modificar el código existente (usar polimorfismo).
- Crear subclase
Autocon atributocantidadPasajeros. - Validar que se puedan tratar todos los vehículos desde una misma interfaz (
Vehiculo).
- Usar
ArrayList<Vehiculo>para gestionar todos los vehículos. - Recorrer e imprimir usando
VehiculoPrinter. - (Opcional) Buscar por patente dentro de la lista.
Cada grupo debe:
-
Usar la asignación del repositorio compartido por Slack
-
Proteger la rama main:
- Ir a Settings > Branches > Branch protection rules
- Agregar regla para la rama
main - Requerir que los tests pasen antes de mergear
- No permitir push directo a main
-
Crear un Project nuevo tipo Kanban con columnas:
To Do,In Progress,In Review,Done
-
Crear un Milestone por etapa:
Etapa 1 - Clases básicasEtapa 2 - SRPEtapa 3 - OCPEtapa 4 - LSPEtapa 5 - ArrayList
-
Crear Issues por cada tarea concreta, por ejemplo:
- "Crear clase Vehiculo"
- "Crear clase VehiculoPrinter"
- "Crear subclase Camion"
Cada Issue debe:
- Tener un título claro y descripción breve
- Estar asociado a un
Milestoney alProject - Tener asignado al menos un miembro del equipo
- Incluir labels apropiados (ej:
enhancement,bug,documentation) - Ser implementado en una nueva rama (branch) creada desde
main - La rama debe seguir el formato:
feature/descripcion-cortaofix/descripcion-corta - Ser cerrado mediante un Pull Request (PR) que mergee la rama a
main - Actualizar su estado en el Kanban board según corresponda
-
Hacer Pull Requests por cada Issue.
- Cada PR debe mencionar el Issue que cierra (ej:
Closes #2) - Debe incluir los mismos labels que el Issue asociado
- Debe estar asociado al mismo Milestone que el Issue
- Debe estar asociado al mismo Project que el Issue
- El código debe estar revisado antes de ser fusionado a
main - Al mergear, actualizar el estado del Issue en el Kanban board a
Done
- Cada PR debe mencionar el Issue que cierra (ej:
Crear clase Vehiculo
Implementar la clase base Vehiculo que servirá como punto de partida para la jerarquía de vehículos.
- Crear la clase con los siguientes atributos privados:
private String patente; private String marca; private int anio; private double capacidadCargaKg;
- Implementar:
- Constructor con todos los atributos
- Getters y setters para cada atributo
- Método
mostrarInformacion()que imprima todos los datos del vehículo
- La patente no puede ser null ni vacía
- El año debe ser mayor a 1900 y menor o igual al año actual
- La capacidad de carga debe ser positiva
- La clase compila sin errores
- Se incluyen todos los atributos requeridos
- Se implementan todos los métodos necesarios
- Se incluyen las validaciones especificadas
- Se agrega documentación JavaDoc básica
- Considerar agregar constantes para los valores mínimos/máximos
- Incluir mensajes de error descriptivos en las validaciones
enhancementgood first issue
- Milestone:
Etapa 1 - Clases básicas - Project:
Sistema de Gestión de Vehículos - Estado:
To Do
- ✅ Todos los Issues cerrados
- ✅ Todos los Milestones completos
- ✅ Todos los PRs revisados y mergeados
- ✅ Project con todas las tareas en
Done - ✅ Este archivo
README.mdcompleto con:- Nombre y apellido del alumno
- Instrucciones detalladas de cómo ejecutar el proyecto
- Requisitos previos (JDK, IDE, etc.)
- Pasos para compilar y ejecutar
- Ejemplos de uso
⏰ Fecha de vencimiento: 09/04/2025 a las 13:00 hs
Este trabajo es parte del curso de Programación 2 de Ingeniería en Informática. Uso educativo únicamente.