JavaScript de Cero a Experto / POO en JS
Reto: Mi Bolsillo, edición de lujo
Todo el módulo en una sola pieza de ingeniería: la clase Bolsillo
definitiva — estado privado, invariantes protegidos, totales que se
calculan solos, una fábrica estática y una versión extendida con
presupuesto. Cuando termines, tendrás el corazón de "Mi Bolsillo" como lo
escribiría un profesional.
Reto
Mi Bolsillo, edición de lujo
Qué debes construir
Dos clases y un script de demostración que imprima EXACTAMENTE esto:
Bolsillo de Sara — movimientos: 3 — total: $ 28.300
Rechazado: El valor debe ser un número mayor que cero
Bolsillo de Andrés — movimientos: 2 — total: $ 117.000 — disponible: $ 83.000
¿m es un Bolsillo? true
Bolsillo de Sara — movimientos: 1 — total: $ 15.000
Requisitos:
class Bolsillocon el array#movimientosPRIVADO y un método privado#validar(nombre, valor): nombre sin espacios sobrantes no vacío, valor numérico mayor que cero — si algo falla,throw new Errorcon el mensaje correspondiente.agregar(nombre, valor)es la ÚNICA puerta de entrada: valida y guarda{ nombre, valor }.- Getters derivados:
total(conreduce) ycantidad— nada de contadores que se actualizan a mano. resumen()devuelveBolsillo de TITULAR — movimientos: N — total: $Xcon unIntl.NumberFormates-CO creado UNA vez fuera de la clase.static desdeJSON(titular, texto): recibe un JSON de array de movimientos, lo parsea y fabrica unBolsilloagregándolos por la puerta oficial (validación gratis).class BolsilloConMeta extends Bolsillo: constructor conpresupuestoextra (y susuper), getterdisponible(presupuesto − total) y override deresumen()que REUTILICEsuper.resumen()y agregue— disponible: $Y.- El script: Sara con Almuerzo 18000, Bus 5800 y Café 4500; un
intento inválido (
"Fantasma", -50) atrapado contry/catchque imprimeRechazado: mensaje; Andrés comoBolsilloConMetacon presupuesto 200000, Cine 25000 y Mercado 92000; la pruebainstanceof Bolsillo; y un bolsillo fabricado conBolsillo.desdeJSON("Sara", '[{"nombre":"Taxi","valor":15000}]').
Reglas
- El array privado JAMÁS sale de la clase (ni getter que lo devuelva directo).
totalydisponibleson getters calculados — cero variables acumuladoras.- La plata solo la formatea
Intl; el formateador se crea una vez. - El override usa
super.resumen()— nada de copiar el formato.
30:00
Cuando estés listo, arranca el reloj.
Qué sigue
Dominas la POO: la escuela de organizar el código alrededor de OBJETOS que guardan estado y lo protegen. El módulo 12 te presenta la escuela rival — y complementaria: la programación FUNCIONAL, donde las protagonistas son funciones puras que no guardan nada, no tocan nada… y componen como bloques de Lego. Los mejores desarrolladores de JavaScript hablan los dos idiomas.