Colección de proyectos independientes para aprender los pilares de la Programación Orientada a Objetos de forma progresiva, usando Java y NetBeans.
Este repositorio sirve para aplicar conceptos y aprendizaje de POO a través de proyectos prácticos. Cada proyecto introduce un nuevo concepto sobre los anteriores, hasta llegar a una aplicación con interfaz gráfica en Swing.
| # | Proyecto | Concepto principal | Interfaz | Estado |
|---|---|---|---|---|
| 01 | GestorPersonas | Encapsulamiento | Consola | ⬜ Pendiente |
| 02 | CatálogoAnimales | Herencia | Consola | ⬜ Pendiente |
| 03 | TiendaDeMusica | Polimorfismo | Consola + menú | ⬜ Pendiente |
| 04 | SistemaDeHospital | Interfaces | Consola + menú | ⬜ Pendiente |
| 05 | AgenciaDeViajes | Excepciones personalizadas | Consola + menú | ⬜ Pendiente |
| 06 | InventarioElectronicos | Swing (GUI) | Ventana gráfica | ⬜ Pendiente |
Pilar: Encapsulamiento
Los atributos de una clase no deben ser accesibles directamente desde afuera. Se protegen con private y se controla su lectura y modificación mediante getters y setters con validación.
Sistema que registra personas con nombre, edad y correo. Ningún atributo puede modificarse sin pasar por validación.
- Modificador
privateen atributos - Getters y setters con lógica de validación
- Construcción de objetos con datos inválidos (manejo de errores básico)
Pilar: Herencia
Una clase padre define lo común y las clases hijas especializan ese comportamiento. Se entiende la relación "es un" y el uso correcto de super().
Catálogo de animales de un zoológico con una clase base Animal y tres subclases: Perro, Aguila y Pez, cada una con atributos y comportamientos propios.
extendspara heredar de una clase padre- Llamada a
super()en constructores de las clases hijas - Métodos heredados y métodos propios de cada subclase
Pilar: Polimorfismo
Tratar objetos de distintos tipos de forma uniforme a través del tipo padre. Un array de Producto[] puede contener CD, Vinilo e Instrumento, y cada uno responde diferente al mismo método.
Tienda de música con tres tipos de productos. El sistema recorre el inventario y calcula el precio final de cada uno usando polimorfismo, sin preguntar de qué tipo concreto es cada objeto.
- Clases abstractas y métodos abstractos
- Sobrescritura de métodos (
@Override) - Arrays polimórficos (
Producto[]con objetos de subclases) - Menú interactivo en consola
Pilar: Interfaces
Una interfaz es un contrato de comportamiento independiente de la jerarquía de herencia. Una clase puede heredar de un padre y firmar uno o varios contratos al mismo tiempo.
Hospital con pacientes y médicos. Algunos pueden ser notificados, todos pueden ser consultados. Se demuestra cómo las interfaces permiten tratar objetos distintos de forma uniforme sin necesidad de que compartan padre.
- Declaración e implementación de interfaces (
implements) - Arrays de tipo interfaz (
Consultable[]) - Combinación de herencia e interfaces en la misma clase
Pilar: Excepciones personalizadas
A comunicar errores de forma precisa con excepciones propias, distinguiendo entre checked (obligan al try-catch) y unchecked (errores de lógica o datos inválidos).
Agencia de viajes que registra paquetes turísticos y clientes. El sistema controla capacidad, disponibilidad y datos inválidos con excepciones propias organizadas en jerarquía.
- Jerarquía de excepciones checked (
Exception) - Jerarquía de excepciones unchecked (
RuntimeException) throwsen la firma de métodostry-catchcon múltiples tipos de excepción- Enums para estados
Pilar: Swing (Interfaz Gráfica)
Conectar toda la lógica POO ya construida con una interfaz gráfica. El modelo no cambia, solo cambia cómo el usuario interactúa con él.
Sistema de inventario de productos electrónicos con ventana gráfica. Incluye formulario de registro, tabla de productos y filtro por tipo.
JFrame,JPanel,JTable,JTextField,JButton- Separación entre modelo (lógica POO) y vista (Swing)
- Manejo de eventos con listeners
- Todos los pilares POO integrados en un proyecto con GUI
- Lenguaje: Java 21
- IDE: NetBeans
- Interfaz (proyectos 1–5): Consola
- Interfaz (proyecto 6): Java Swing
- Arrays estáticos de tamaño fijo — sin
ArrayListniList - Tipos declarados explícitamente — sin
var - Atributos siempre
private - Constructores de subclases siempre con
super()