<<<<<<< HEAD #Desarrollado por Giovanni_Alejandro_Quishpe_Chiliquinga
=======
7a8df23d5f5ba3cfeeb6a5be589de2ffb159e3ce
Aplicación de consola en Java que gestiona un torneo de tenis mediante lectura de archivos CSV, almacenamiento en base de datos H2, consultas con API de colecciones y exportación en múltiples formatos (CSV, JSON, XML).
- ✅ Lectura y validación de datos desde CSV
- ✅ Almacenamiento en base de datos H2
- ✅ Caché FIFO con capacidad de 5 elementos
- ✅ Consultas estadísticas con API de colecciones funcional
- ✅ Exportación a CSV, JSON y XML
- ✅ Sistema completo de logging
- ✅ Validación exhaustiva de datos
┌─────────────────┐
│ Presentación │ ← Main.java (Consola)
├─────────────────┤
│ Servicio │ ← Lógica de negocio y consultas
├─────────────────┤
│ Repositorio │ ← Acceso a datos (TenistaRepository)
├─────────────────┤
│ Modelo │ ← Entidades (Tenista1, Mano)
└─────────────────┘
- Modelo:
Tenista1,Mano - Repositorio:
ITenistaRepository,TenistaRepository - Validación:
TenistaValidator - Caché:
TenistaCache(FIFO) - E/S:
CsvReader,ITenistaWriter+ implementaciones - Configuración:
DatabaseManager
Cada clase tiene una única responsabilidad:
Ejemplo 1: TenistaValidator
public class TenistaValidator {
// Solo se encarga de validar datos de tenistas
public static List<String> validar(Tenista1 tenista) {
// Lógica de validación únicamente
}
}Ejemplo 2: CsvReader
public class CsvReader {
// Solo se encarga de leer archivos CSV
public static List<Tenista1> leerTenistas(String filePath) {
// Lógica de lectura CSV únicamente
}
}Ejemplo 1: ITenistaWriter
public interface ITenistaWriter {
void escribir(List<Tenista1> tenistas, String filePath) throws IOException;
}
// Abierto para extensión: CsvWriter, JsonWriter, XmlWriter
// Cerrado para modificación: no cambio la interfazEjemplo 2: Extensibilidad de formatos
// Fácil agregar nuevos formatos sin modificar código existente
ITenistaWriter writer = switch (extension) {
case "csv" -> new CsvWriter();
case "json" -> new JsonWriter();
case "xml" -> new XmlWriter();
// case "yaml" -> new YamlWriter(); // Futuro
};Ejemplo 1: Implementaciones de ITenistaWriter
// Todas las implementaciones son intercambiables
ITenistaWriter csvWriter = new CsvWriter();
ITenistaWriter jsonWriter = new JsonWriter();
ITenistaWriter xmlWriter = new XmlWriter();
// Cualquiera funciona igual en el contextoEjemplo 1: Interfaces específicas
// Interfaz específica para repositorio
public interface ITenistaRepository {
// Solo métodos relacionados con persistencia
}
// Interfaz específica para escritores
public interface ITenistaWriter {
// Solo métodos relacionados con escritura
}Ejemplo 1: Main depende de abstracciones
// Main depende de la interfaz, no de implementaciones concretas
ITenistaWriter writer = switch (extension) {
case "csv" -> new CsvWriter();
case "json" -> new JsonWriter();
case "xml" -> new XmlWriter();
};- Uso: Base de datos embebida
- Justificación: Ligera, rápida, ideal para aplicaciones standalone. No requiere instalación externa.
- Uso: Sistema de logging
- Justificación:
- SLF4J: API estándar de logging, permite cambiar implementación
- Logback: Implementación eficiente, configuración flexible
- Uso: Testing unitario
- Justificación: Framework de testing moderno, soporte para Java 17+
- Uso: Creación de JAR ejecutable
- Justificación: Permite empaquetar todas las dependencias en un solo JAR
mvn clean package# Con archivo de salida por defecto (torneo_tenis.json)
java -jar target/torneo_tenis.jar fichero_entrada.csv
# Con archivo de salida específico
java -jar target/torneo_tenis.jar fichero_entrada.csv salida.json
java -jar target/torneo_tenis.jar fichero_entrada.csv salida.csv
java -jar target/torneo_tenis.jar fichero_entrada.csv salida.xml- Tenistas ordenados por ranking (puntos desc)
- Media de altura y peso
- Tenista más alto
- Tenistas de España
- Agrupación por país
- Número de tenistas por país ordenados por puntos
- Agrupación por mano dominante con puntuación media
- Puntuación total por país
- País con mayor puntuación
- Mejor tenista español
torneo_tenis/
├── pom.xml
├── fichero_entrada.csv
├── README.md
├── src/main/java/com/torneo_tenis/
│ ├── Main.java
│ ├── cache/TenistaCache.java
│ ├── io/
│ ├── model/
│ ├── repository/
│ └── validator/
├── src/main/resources/
│ ├── application.properties
│ └── logback.xml
├── data/
│ └── tenis_db.mv.db
├── log/
│ └── application.log
└── target/
└── torneo_tenis.jar
<<<<<<< HEAD
Desarrollado por: Giovanni Alejandro Quishpe Chiliquinga
Curso: DWES 2024-2025
Java Version: 17+
Build Tool: Maven 3.8+
Desarrollado por: [Tu Nombre]
Curso: DWES 2024-2025
Java Version: 17+
Build Tool: Maven 3.8+
7a8df23d5f5ba3cfeeb6a5be589de2ffb159e3ce