Skip to content
Arrays, Funções e POOModo de leitura focado
DifícilFase 4

Exercício Difícil — Classe ContaBancária

Cria uma classe completa com constructor, métodos, validações e um pequeno histórico de operações.

FerramentasVS CodeTerminalNode.js

Este exercício fecha a fase com o exemplo clássico de POO — uma conta bancária com regras de negócio reais, não só getters e setters simples.

Passos a realizar

  1. Cria conta-bancaria.js na pasta fase4.
  2. Cria uma classe ContaBancaria com constructor(titular, saldoInicial) que guarda titular, saldo, e um array vazio historico.
  3. Adiciona um método depositar(valor): se valor for menor ou igual a 0, imprime um erro e não faz nada; senão, soma ao saldo e adiciona uma string ao historico (ex: "Depósito de 50€").
  4. Adiciona um método levantar(valor): se valor for maior que o saldo disponível, imprime "Saldo insuficiente" e não faz nada; senão, subtrai do saldo e regista no historico.
  5. Adiciona um método extrato() que imprime o titular, o saldo atual, e cada linha do historico usando forEach.
  6. Cria duas instâncias de contas diferentes, faz várias operações em cada uma (incluindo pelo menos uma tentativa inválida em cada), e chama extrato() em ambas para confirmares que o estado de cada conta é independente.

Fluxo de funcionamento

  1. 1new ContaBancaria(titular, saldo)
  2. 2depositar / levantar valida regras
  3. 3Atualiza saldo e historico
  4. 4extrato() imprime tudo

Código de exemplo

conta-bancaria.js
class ContaBancaria {
  constructor(titular, saldoInicial) {
    this.titular = titular;
    this.saldo = saldoInicial;
    this.historico = [];
  }

  depositar(valor) {
    if (valor <= 0) {
      console.log("Valor de depósito inválido.");
      return;
    }
    this.saldo += valor;
    this.historico.push("Depósito de " + valor + "€");
  }

  levantar(valor) {
    // completa aqui: valida e atualiza this.saldo e this.historico
  }

  extrato() {
    // completa aqui: imprime titular, saldo, e cada linha do historico
  }
}

const contaDaAna = new ContaBancaria("Ana", 100);
contaDaAna.depositar(50);
contaDaAna.levantar(30);
contaDaAna.levantar(1000); // deve falhar
contaDaAna.extrato();
Ponto de partida — completa levantar() e extrato()

Dicas

  • Cada instância criada com new tem o seu próprio saldo e historico — testa exatamente isso criando duas contas e confirmando que uma não afeta a outra.
  • Valida sempre a operação antes de alterar o saldo — nunca deixes o código subtrair primeiro e "descobrir" depois que o saldo ficou negativo.

Erros comuns

  • Esquecer this. antes de saldo ou historico dentro dos métodos, o que faz o JavaScript procurar uma variável solta que não existe.
  • Validar a operação depois de já teres alterado o saldo, em vez de antes — a ordem da validação importa.

As minhas dúvidas

Voltar à vista da fase