Este proyecto demuestra didácticamente los conceptos de Encapsulación y Métodos Controlados usando un ejemplo simple y realista: una cuenta bancaria.
- Private attributes: Los datos
titularysaldoestán protegidos - Getters: Formas seguras de LEER datos sin modificarlos
- No Setters: NO hay setters (son peligrosos sin validación)
-
sacarDinero(): Valida ANTES de cambiar saldo
- ¿Cantidad positiva?
- ¿Tengo suficiente dinero?
- Si ambas son true → modifica saldo
- Si alguna es false → rechaza operación
-
ingresarDinero(): Valida cantidad ANTES de sumar
- ¿Cantidad positiva?
- Si sí → suma al saldo
- Si no → rechaza
- getResumen(): Devuelve información formateada sin que tengas que hacerlo manualmente
Cajero/
├── Cuenta.java # Clase principal (encapsulación)
├── Main.java # 10 demostraciones prácticas
└── PREGUNTAS_EVALUACION.md # 16 preguntas con respuestas
cd /Volumes/Compartido/IOC/SEMESTRE2/PROG/practicando/Proyectos/Cajero
javac Cuenta.java Main.java
java Main| Concepto | Dónde | Cómo |
|---|---|---|
| Encapsulación | Cuenta.java líneas 41-42 | private atributos |
| Getters | Cuenta.java líneas 95-101 | getTitular(), getSaldo() |
| Métodos Controlados | Cuenta.java líneas 143-202 | sacarDinero(), ingresarDinero() |
| Validación | Cuenta.java líneas 145-156, 193-195 | if statements con return |
| Abstracción | Cuenta.java línea 228-230 | getResumen() |
- NO hay setters:
setSaldo()sería peligroso - NO hay constructor con todos los parámetros: La fecha se genera automática
- NO hay modificación directa de atributos
| Demostración | Propósito | Línea |
|---|---|---|
| 1 | Crear una cuenta | ~43 |
| 2 | Usar getters (seguro) | ~68 |
| 3 | No puedo acceder directamente (privado) | ~91 |
| 4 | Sacar dinero válido | ~119 |
| 5 | Rechazar cantidad negativa | ~141 |
| 6 | Rechazar insuficiencia de fondos | ~163 |
| 7 | Ingresar dinero | ~185 |
| 8 | Rechazar depósito negativo | ~206 |
| 9 | Comparar setter peligroso vs método controlado | ~228 |
| 10 | Resumen final de aprendizajes | ~260 |
Porque esto sería posible:
cuenta.setSaldo(-500); // ❌ ¡Saldo negativo!
cuenta.setSaldo(999999999); // ❌ ¡Dinero infinito!Con métodos controlados:
cuenta.sacarDinero(-500); // ❌ Rechazado por validación
cuenta.sacarDinero(999999999); // ❌ Rechazado por validaciónProtege los datos de cambios ilegales. El compilador BLOQUEA:
cuenta.saldo = -500; // ❌ ERROR: saldo has private access- getResumen(): Abstracción (oculta CÓMO se formatea)
- getTitular() + getSaldo(): Encapsulación (acceso seguro LEER)
- sacarDinero(): Encapsulación + Validación (acceso seguro ESCRIBIR)
Lee PREGUNTAS_EVALUACION.md para:
- 4 niveles progresivos (Básico → Experto)
- 16 preguntas con respuestas esperadas
- Criterios de evaluación claros
- 3 bonus challenges
Escala:
- 80-100%: Dominas encapsulación y métodos controlados
- 60-79%: Entiendes conceptos básicos
- 40-59%: Confundes algunos detalles
- 0-39%: Revisar conceptos fundamentales
Este proyecto es el FUNDAMENTO para entender:
- RosaliaShowBlanca/Done: Matrices, composición, abstracción avanzada
- Cómo Concierto valida compra (similar a sacarDinero)
- Por qué Asiento es private en Entrada
- Encapsulación: Proteger datos internos
- Abstracción: Ocultar complejidad
- Validación: Prevenir estados inválidos
- Composición: Combinar objetos
- Separación de responsabilidades: Main no valida, Cuenta sí
Creado para aprender: Encapsulación en profundidad con ejemplos prácticos y realistas.