CodeForge

JavaScript de Cero a Experto / POO en JS

Reto: Mi Bolsillo, edición de lujo

Reto35 min60 XP

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

Media30 min60 XP(×2 sin mirar la solución)

Qué debes construir

Dos clases y un script de demostración que imprima EXACTAMENTE esto:

terminal

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:

  1. class Bolsillo con el array #movimientos PRIVADO 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 Error con el mensaje correspondiente.
  2. agregar(nombre, valor) es la ÚNICA puerta de entrada: valida y guarda { nombre, valor }.
  3. Getters derivados: total (con reduce) y cantidad — nada de contadores que se actualizan a mano.
  4. resumen() devuelve Bolsillo de TITULAR — movimientos: N — total: $X con un Intl.NumberFormat es-CO creado UNA vez fuera de la clase.
  5. static desdeJSON(titular, texto): recibe un JSON de array de movimientos, lo parsea y fabrica un Bolsillo agregándolos por la puerta oficial (validación gratis).
  6. class BolsilloConMeta extends Bolsillo: constructor con presupuesto extra (y su super), getter disponible (presupuesto − total) y override de resumen() que REUTILICE super.resumen() y agregue — disponible: $Y.
  7. El script: Sara con Almuerzo 18000, Bus 5800 y Café 4500; un intento inválido ("Fantasma", -50) atrapado con try/catch que imprime Rechazado: mensaje; Andrés como BolsilloConMeta con presupuesto 200000, Cine 25000 y Mercado 92000; la prueba instanceof Bolsillo; y un bolsillo fabricado con Bolsillo.desdeJSON("Sara", '[{"nombre":"Taxi","valor":15000}]').

Reglas

  • El array privado JAMÁS sale de la clase (ni getter que lo devuelva directo).
  • total y disponible son 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.