Aplicación de consola para practicar conceptos de Programación Orientada a Objetos en Java.
- ✅ Abstracción: Clase abstracta
Animal - ✅ Herencia: Jerarquía de clases (Mamífero, Ave, Reptil, Anfibio)
- ✅ Polimorfismo: Diferentes implementaciones de
comer()yrespirar() - ✅ Encapsulación: Atributos privados con getters/setters
- ✅ Interfaces:
Voladorimplementado porPaloma
- Docker Desktop o Docker Engine
- Docker Compose
# 1. Construir y levantar
docker-compose up --build
# 2. En otra terminal, entrar al contenedor
docker-compose exec app bash# Compilar el proyecto
mvn clean compile
# Empaquetar JAR
mvn clean packagemvn exec:javajava -jar target/animales-java-1.0.0.jar# Ejecutar tests
mvn test
# Con cobertura
mvn test jacoco:reportanimales-java/
├── Dockerfile
├── docker-compose.yml
├── pom.xml
├── README.md
│
├── src/
│ ├── main/
│ │ ├── java/com/animales/
│ │ │ ├── Main.java # Clase principal
│ │ │ │
│ │ │ ├── model/ # Modelos (clases POO)
│ │ │ │ ├── Animal.java # Clase abstracta base
│ │ │ │ ├── Volador.java # Interfaz
│ │ │ │ ├── Mamifero.java
│ │ │ │ ├── Ave.java
│ │ │ │ ├── Reptil.java
│ │ │ │ ├── Anfibio.java
│ │ │ │ ├── Elefante.java
│ │ │ │ ├── Perro.java
│ │ │ │ ├── Paloma.java
│ │ │ │ ├── Avestruz.java
│ │ │ │ ├── Lagarto.java
│ │ │ │ └── Rana.java
│ │ │ │
│ │ │ ├── service/ # Servicios (lógica)
│ │ │ └── utils/ # Utilidades
│ │ │
│ │ └── resources/
│ │ └── logback.xml # Configuración logging
│ │
│ └── test/
│ └── java/com/animales/ # Tests unitarios
│
└── target/ # Archivos compilados
- Listar animales: Muestra todos los animales creados
- Crear nuevo animal: Permite crear instancias de cualquier tipo
- Probar comportamientos: Ejecuta métodos de cada animal
- Demostrar polimorfismo: Muestra cómo diferentes clases implementan el mismo método
- Demostrar herencia: Muestra la jerarquía de clases
Animal (abstracta)
|
+---------+---------+---------+
| | | |
Mamifero Ave Reptil Anfibio
| | | |
+---+---+ +--+--+ | |
| | | | | |
Elefante Perro Paloma Avestruz Lagarto Rana
|
<<Volador>>
# Compilar
mvn compile
# Ejecutar
mvn exec:java
# Crear JAR
mvn package
# Limpiar
mvn clean
# Ver dependencias
mvn dependency:tree
# Ejecutar tests
mvn testSi quieres agregar interfaces gráficas posteriormente:
Swing viene incluido con el JDK, no necesitas agregar dependencias adicionales.
// En src/main/java/com/animales/gui/MainWindow.java
package com.animales.gui;
import javax.swing.*;
import java.awt.*;
public class MainWindow extends JFrame {
public MainWindow() {
setTitle("Sistema de Animales POO");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
// Agregar componentes...
setVisible(true);
}
}Modificar Main.java para aceptar argumento --gui:
if (args.length > 0 && "--gui".equals(args[0])) {
SwingUtilities.invokeLater(() -> new MainWindow());
} else {
// Modo consola...
}Necesitarás X11 forwarding (ya configurado en el Dockerfile):
# En WSL con WSLg (Windows 11)
java -jar target/animales-java-1.0.0.jar --gui
# En WSL sin WSLg
export DISPLAY=:0
java -jar target/animales-java-1.0.0.jar --guiPara recompilar automáticamente:
# Terminal 1: Watch de archivos
find src -name "*.java" | entr mvn compile
# Terminal 2: Ejecutar
mvn exec:javaLos logs se escriben en consola usando Logback. Configuración en src/main/resources/logback.xml.
mvn clean compile
mvn package# Limpiar caché Maven
docker-compose down -v
docker-compose up --build# WSL2 con WSLg (Windows 11): funciona automáticamente
# WSL2 sin WSLg: instalar servidor X11
sudo apt install xorg-dev
export DISPLAY=:0- Herencia: La clase
Animales heredada porMamifero,Ave, etc. - Polimorfismo: El método
comer()se comporta diferente en cada clase - Abstracción:
Animales abstracta, no se puede instanciar directamente - Interfaces:
Voladordefine un contrato quePalomaimplementa - Encapsulación: Los atributos son privados, se accede por getters/setters
Este es un proyecto de práctica, siéntete libre de:
- Agregar más tipos de animales
- Implementar nuevas interfaces (Nadador, Terrestre, etc.)
- Crear más comportamientos
- Agregar GUI con Swing
- Escribir más tests
- Este proyecto usa Java 17 (LTS)
- Maven maneja las dependencias automáticamente
- El repositorio Maven está aislado en un volumen Docker
- Los logs se guardan usando SLF4J + Logback
- Composición vs Herencia: Agregar atributos tipo
Habitat - Design Patterns: Implementar Factory, Strategy, Observer
- Generics: Crear colecciones tipadas
List<Mamifero> - Streams: Filtrar animales con Java Streams API
- Serialización: Guardar/cargar animales desde archivo
Versión: 1.0.0
Java: 17 LTS
Build Tool: Maven 3.x