📘 Guia Completo de Programação Orientada a Objetos (POO)
em JavaScript
🔹 Introdução à POO
A Programação Orientada a Objetos (POO) é um paradigma que
organiza o código em objetos, que representam entidades do mundo
real. Cada objeto pode ter propriedades (dados) e métodos
(funções que descrevem comportamentos).
A POO permite criar sistemas mais estruturados, reutilizáveis e fáceis
de manter. JavaScript oferece suporte à POO com classes, herança e
encapsulamento.
🔹 Conceitos Fundamentais da POO
1. Classe: modelo ou “molde” que define como criar objetos.
2. Objeto: instância de uma classe, contendo dados e funções.
3. Atributos (ou propriedades): variáveis dentro de um objeto.
4. Métodos: funções que definem o comportamento de um
objeto.
5. Herança: permite que uma classe filha reutilize código de uma
classe pai.
6. Encapsulamento: protege dados e limita o acesso direto às
propriedades.
7. Polimorfismo: objetos diferentes respondem de forma
diferente a métodos com o mesmo nome.
🔹 Criando Classes e Objetos
Exemplo de classe simples:
class Pessoa {
constructor(nome, idade) {
[Link] = nome;
[Link] = idade;
}
saudacao() {
return `Olá, meu nome é ${[Link]} e tenho ${[Link]}
anos.`;
// Criando objeto
const pessoa1 = new Pessoa("João", 25);
[Link]([Link]());
Nesse exemplo, Pessoa é a classe, pessoa1 é um objeto. O método
saudacao pertence ao objeto e acessa os atributos nome e idade.
🔹 Herança de Classes
Herança permite que uma classe reutilize os atributos e métodos de
outra.
class Funcionario extends Pessoa {
constructor(nome, idade, cargo) {
super(nome, idade); // chama o construtor da classe pai
[Link] = cargo;
mostrarCargo() {
return `${[Link]} trabalha como ${[Link]}.`;
const func1 = new Funcionario("Ana", 30, "Engenheira");
[Link]([Link]());
[Link]([Link]());
Aqui, Funcionario herda de Pessoa e adiciona um atributo novo, cargo.
🔹 Encapsulamento e Getters/Setters
Encapsulamento protege os dados internos do objeto. Podemos usar
getters e setters:
class ContaBancaria {
#saldo; // privado
constructor(saldoInicial) {
this.#saldo = saldoInicial;
depositar(valor) {
this.#saldo += valor;
sacar(valor) {
if (valor <= this.#saldo) {
this.#saldo -= valor;
return valor;
} else {
return "Saldo insuficiente";
get saldo() {
return this.#saldo;
const conta = new ContaBancaria(1000);
[Link](500);
[Link]([Link]); // 1500
O # antes do atributo indica que ele é privado e não pode ser
acessado diretamente fora da classe.
🔹 Polimorfismo
Polimorfismo permite que métodos de diferentes objetos com o
mesmo nome se comportem de maneira distinta.
class Animal {
falar() {
return "O animal faz um som.";
class Cachorro extends Animal {
falar() {
return "O cachorro late.";
class Gato extends Animal {
falar() {
return "O gato mia.";
const dog = new Cachorro();
const cat = new Gato();
[Link]([Link]());
[Link]([Link]());
🔹 Abstração
Abstração consiste em focar apenas nos detalhes importantes de um
objeto, escondendo complexidade interna.
Exemplo:
class Veiculo {
constructor(marca, modelo) {
[Link] = marca;
[Link] = modelo;
mover() {
return `${[Link]} ${[Link]} está se movendo.`;
A classe Veiculo abstrai o conceito de movimento, sem expor como o
motor funciona.
🔹 Aplicações práticas da POO
Sistemas bancários: contas, transações e clientes como
objetos
Jogos: jogadores, inimigos, armas
Aplicativos web: usuários, produtos, pedidos
Simulações: carros, prédios, animais
POO ajuda a criar softwares complexos de forma organizada e
escalável.
🔹 Boas práticas em POO com JavaScript
Nomear classes com maiúscula inicial (Pessoa, ContaBancaria)
Manter atributos privados sempre que possível
Reutilizar código via herança, mas evitar herança excessiva
Comentar métodos e propriedades
Testar objetos individualmente
🔹 Conclusão
A Programação Orientada a Objetos em JavaScript é poderosa e
essencial para desenvolvimento de sistemas complexos. Com classes,
herança, encapsulamento, polimorfismo e abstração, é possível criar
aplicações escaláveis, manuteníveis e de alta qualidade. Dominar
POO prepara qualquer desenvolvedor para desafios avançados de
programação web.