Olá, dev! Seja muito bem-vindo ao nosso laboratório prático de Programação Orientada a Objetos (POO) com JavaScript Puro (Vanilla JS).
Este repositório foi preparado pelo Professor Leo Gomes Dev para ajudar você a dar os primeiros passos na criação de arquiteturas modulares, aplicando conceitos reais de mercado como Encapsulamento, Herança e Polimorfismo.
O objetivo deste exercício é construir e corrigir a lógica de um Sistema Bancário Interativo simulado diretamente no navegador. Você vai trabalhar com a manipulação de propriedades privadas nativas (#), métodos de classe, herança estrutural e sincronização dos dados com elementos do DOM (HTML/CSS).
- Abstração: Modelar entidades do mundo real (Contas Bancárias) em código limpo.
- Encapsulamento Real: Proteger dados sensíveis (como o saldo) usando o prefixo
#. - Herança: Criar classes filhas especializadas (
ContaCorrenteeContaPoupanca) estendendo uma superclasse. - Polimorfismo: Modificar o comportamento de métodos existentes (como a regra de saque com cheque especial).
- Módulos ES6: Organizar o projeto separando cada classe em seu respectivo arquivo com
importeexport.
O projeto está organizado da seguinte forma:
├── css/
│ └── style.css # Estilização visual do painel bancário
├── js/
│ ├── ContaBancaria.js # Classe Pai (Superclasse)
│ ├── ContaCorrente.js # Classe Filha (Especializada com Limite)
│ └── ContaPoupanca.js # Classe Filha (Especializada com Rendimento)
├── index.html # Estrutura visual e painel de controle
└── index.js # Arquivo central responsável pelas escutas do DOM
-
Clonar o Repositório: Abra o seu terminal e clone este repositório para a sua máquina:
git clone https://github.com/leo-gomes-dev/poo-javascript-exercicio.git
-
Abrir no Editor: Abra a pasta do projeto no seu VS Code.
-
Rodar com Servidor Local: Como estamos utilizando módulos oficiais do JavaScript (
type="module"), os navegadores bloqueiam requisições locais por segurança (erros de CORS). Para rodar:- Instale a extensão Live Server no VS Code.
- Clique com o botão direito no arquivo
index.htmle selecione Open with Live Server.
Abra os arquivos e complete/corrija os códigos seguindo as missões abaixo:
- Garanta que a propriedade
#saldoseja estritamente privada. - Crie o método público
get saldopara permitir que o saldo seja apenas lido por fora, nunca alterado diretamente. - Implemente proteções nos métodos
depositar(value)esacar(value)impedindo valores negativos ou saques maiores que o saldo em conta. - Atenção: Remova os
console.logde dentro da classe! Ela deve ser silenciosa e apenas retornartrueoufalsese a operação der certo ou errado.
- Use a palavra-chave
extendspara herdar as características deContaBancaria. - No construtor, chame obrigatoriamente o método
super(titular, saldoInicial)antes de definir o#limiteprivado. - Reescreva o método
sacar(value)(Polimorfismo). Ele deve permitir saques que usem o saldo combinado ao limite de crédito. Se o saldo não for suficiente, calcule oresto, ative osuper.sacarpara esvaziar o saldo real e deduza o que sobrou do limite.
- Crie uma classe para a poupança que herde de
ContaBancaria. - Crie uma propriedade privada para a
#taxaRendimento(ex:0.005para 0.5%). - Crie o método
calcularRendimento(). Ele deve pegar o saldo atual, multiplicar pela taxa e aplicar o acréscimo utilizando o métodothis.depositar()herdado do pai.
- Complete a função
atualizarInterface()injetando os valores lidos dos objetos nos elementos HTML (innerText). - Ajuste as escutas de evento (
addEventListener) utilizandoparseFloat()nos inputs e controlando as mensagens através de condicionaisif/elsebaseadas nas respostas das classes. - Desafio Extra: Refatore a limpeza de campos criando uma função auxiliar para limpar e resetar os inputs após as ações bem-sucedidas.
Se você travar em alguma regra ou lógica, não se desespere! Utilize os links abaixo para consultar o material de apoio ou falar diretamente comigo:
- Perfil no GitHub: leo-gomes-dev
- Repositório Original: Acessar Código
"O sucesso no desenvolvimento de software não vem de decorar códigos, mas de treinar a lógica e entender como os blocos se conectam."
— Prof. Leo Gomes