Encapsulamento em JavaScript na Prática | Criando um Painel de Carro com Classes
Publicado em: 19 de julho de 2025
Atualizado em: 06 de agosto de 2026
Encapsulamento em JavaScript na Prática
Quando começamos a estudar Programação Orientada a Objetos (POO), um dos primeiros conceitos apresentados é o encapsulamento. Entretanto, muitos exemplos utilizam contas bancárias, cadastro de pessoas ou funcionários, o que acaba tornando o aprendizado bastante abstrato para quem está iniciando.
Neste artigo vamos aprender Encapsulamento em JavaScript desenvolvendo um Painel de Carro totalmente funcional.
Durante o projeto criaremos uma classe responsável por controlar velocidade, combustível e estado do motor utilizando atributos privados (#), métodos, getters e manipulação do DOM.
Ao final você entenderá não apenas o conceito de encapsulamento, mas também como ele é utilizado em aplicações reais.
Projeto desenvolvido: Painel de Carro utilizando HTML, CSS e JavaScript.
(Inserir imagem do projeto aqui)
O que é Encapsulamento?
Encapsulamento é um dos pilares da Programação Orientada a Objetos.
Seu principal objetivo é proteger os dados internos de um objeto, impedindo que qualquer parte do sistema altere essas informações diretamente.
Imagine um carro.
Faz sentido qualquer pessoa conseguir executar um código como este?
carro.velocidade = 500;
Ou então:
carro.combustivel = -20;
Obviamente não.
Esses valores precisam ser controlados pela própria classe.
É exatamente isso que o encapsulamento faz.
Como funciona o encapsulamento no JavaScript?
No JavaScript moderno podemos criar atributos privados utilizando o símbolo #.
class Carro {
#velocidade;
#combustivel;
#motorLigado;
}
Esses atributos só podem ser utilizados dentro da própria classe.
Caso tentemos acessar diretamente:
carro.#velocidade
O JavaScript gera um erro, impedindo o acesso.
Isso aumenta a segurança e evita alterações indevidas.
Criando nossa classe Carro
O primeiro passo foi criar a classe responsável por controlar todas as informações do veículo.
class Carro {
#velocidade;
#combustivel;
#motorLigado;
constructor() {
this.#velocidade = 0;
this.#combustivel = 100;
this.#motorLigado = false;
}
}
O constructor inicializa os atributos quando um novo objeto é criado.
Assim, sempre que instanciarmos um carro, ele começará parado, com o tanque cheio e o motor desligado.
Ligando o motor
O método responsável por ligar o motor realiza algumas validações antes de alterar o estado do veículo.
Ele verifica, por exemplo, se o motor já está ligado ou se existe combustível suficiente para dar partida.
ligarMotor() {
...
}
Dessa forma, quem utiliza a classe não precisa conhecer essas regras.
Basta chamar o método.
Acelerando o carro
O método acelerar() é um excelente exemplo de encapsulamento.
Além de aumentar a velocidade, ele também:
- verifica se o motor está ligado;
- impede ultrapassar a velocidade máxima;
- reduz o combustível automaticamente;
- impede acelerar quando o tanque está vazio.
Todas essas regras ficam protegidas dentro da classe.
Quem utiliza o objeto apenas executa:
carro.acelerar();
Sem precisar manipular diretamente os atributos privados.
Freando o veículo
Da mesma forma, o método frear() controla a redução da velocidade.
Ele impede que a velocidade fique negativa, mantendo os dados sempre consistentes.
Esse é outro exemplo de como o encapsulamento protege o estado interno do objeto.
Utilizando Getters
Os atributos privados não podem ser acessados diretamente.
Por isso utilizamos Getters, permitindo apenas a leitura dessas informações.
get velocidade() {
return this.#velocidade;
}
Assim conseguimos mostrar os dados no painel sem permitir alterações externas.
Atualizando a Interface
Depois de criar a classe, conectamos o objeto ao HTML utilizando JavaScript.
Durante o projeto utilizamos recursos como:
- querySelector()
- addEventListener()
- innerText
- style.width
- disabled
Esses recursos permitem atualizar automaticamente o painel sempre que o estado do carro muda.
(Inserir imagem do painel funcionando)
Resultado Final
Ao final do projeto desenvolvemos um painel completo capaz de:
- Ligar o motor;
- Desligar o motor;
- Acelerar;
- Frear;
- Controlar combustível;
- Atualizar a barra de velocidade;
- Mostrar mensagens ao usuário;
- Aplicar encapsulamento utilizando atributos privados.
(Inserir imagem final do projeto)
Por que utilizar Encapsulamento?
Além de organizar melhor o código, o encapsulamento oferece diversas vantagens.
| Sem Encapsulamento | Com Encapsulamento |
|---|---|
| Qualquer código altera os atributos | Apenas métodos controlam os dados |
| Maior chance de erros | Dados protegidos |
| Difícil manutenção | Código mais organizado |
| Regras espalhadas pelo sistema | Regras centralizadas na classe |
| Baixa reutilização | Objetos reutilizáveis |
Em projetos maiores, essa organização facilita muito a manutenção e reduz a quantidade de erros.
Projeto Completo
Conclusão
Neste projeto vimos que encapsulamento não significa apenas esconder atributos.
Na prática, encapsular significa proteger o estado interno de um objeto e permitir que ele seja alterado apenas através de métodos que seguem regras bem definidas.
Utilizando um projeto real, ficou muito mais fácil compreender como Classes, Atributos Privados, Métodos e Getters trabalham juntos para criar aplicações mais organizadas, seguras e fáceis de manter.
Se você está aprendendo Programação Orientada a Objetos com JavaScript, dominar o encapsulamento é um passo fundamental para desenvolver sistemas mais profissionais.
Continue aprendendo JavaScript
Se este conteúdo ajudou você, acompanhe o Desvendando o Código no YouTube para assistir a mais projetos completos de JavaScript, Node.js, React e Desenvolvimento Web, sempre com foco em projetos práticos e aplicações do mundo real.


