Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Proyecto Cajero - Encapsulación y Control de Acceso

📌 Propósito

Este proyecto demuestra didácticamente los conceptos de Encapsulación y Métodos Controlados usando un ejemplo simple y realista: una cuenta bancaria.

🎯 Conceptos Clave

1. Encapsulación (Protección de Datos)

  • Private attributes: Los datos titular y saldo están protegidos
  • Getters: Formas seguras de LEER datos sin modificarlos
  • No Setters: NO hay setters (son peligrosos sin validación)

2. Métodos Controlados (Modificación Segura)

  • 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

3. Abstracción

  • getResumen(): Devuelve información formateada sin que tengas que hacerlo manualmente

📂 Estructura

Cajero/
├── Cuenta.java           # Clase principal (encapsulación)
├── Main.java             # 10 demostraciones prácticas
└── PREGUNTAS_EVALUACION.md  # 16 preguntas con respuestas

🚀 Ejecutar

cd /Volumes/Compartido/IOC/SEMESTRE2/PROG/practicando/Proyectos/Cajero
javac Cuenta.java Main.java
java Main

📋 Lo que Aprenderás

✅ Conceptos Implementados

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()

❌ Lo que NO tienes (propósito)

  • 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

💡 Demostraciones en Main.java

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

🤔 Preguntas Frecuentes

¿Por qué no setter?

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ón

¿Por qué private?

Protege los datos de cambios ilegales. El compilador BLOQUEA:

cuenta.saldo = -500;  // ❌ ERROR: saldo has private access

¿Cuál es la diferencia con getResumen()?

  • getResumen(): Abstracción (oculta CÓMO se formatea)
  • getTitular() + getSaldo(): Encapsulación (acceso seguro LEER)
  • sacarDinero(): Encapsulación + Validación (acceso seguro ESCRIBIR)

📖 Evaluación

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

🔗 Conexión con RosaliaShow

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

📚 Conceptos Relacionados

  • 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.

About

Proyecto consolidado: rama main (final) y rama base (fase inicial)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages