Encapsulamento completo
Em sistemas bancários reais, o saldo de uma conta nunca pode ser alterado diretamente — só através de operações como depósito e saque. Se o saldo fosse público, qualquer parte do código poderia atribuir um valor inválido, quebrando regras de negócio. O encapsulamento garante que o estado interno do objeto só seja modificado por métodos controlados, prevenindo bugs e fraudes.
O PROBLEMA
Crie ContaBancaria com #saldo privado. Métodos: depositar, sacar, transferir, extrato. Validar todos os valores.
EXEMPLO
const c = new ContaBancaria('Ana', 1000);
c.depositar(500);
c.sacar(200);
c.saldo → 1300
c.sacar(2000) → throwSOBRE O CONCEITO
O encapsulamento é implementado com o prefixo # antes do nome do campo (#saldo), tornando-o privado e acessível apenas dentro da classe. Isso impede que código externo faça conta.saldo = 9999 — um erro comum que quebra a validação. Os métodos depositar, sacar e transferir devem verificar se o valor é positivo e, no saque e transferência, se há saldo suficiente. Outro erro frequente é não validar o saque: permitir sacar(2000) quando o saldo é 1300 deve lançar uma exceção com throw. O método extrato exibe o saldo com this.#saldo.toFixed(2), mantendo o campo privado.
RESOLUÇÃO