Menu
Coddy logo textTech

O que é encapsulamento?

Na programação orientada a objetos, encapsulamento é manter os dados de um objeto e os métodos que trabalham com esses dados juntos em uma única unidade, geralmente uma classe, e esconder os detalhes internos para que o resto do código só possa usar o objeto por meio dos seus métodos públicos.

Por Kevin Spektor, Cofundador e CTO

Atualizado em 24 de setembro de 2026

Imagine que um aplicativo de banco guarda o saldo de cada conta em uma variável comum. Qualquer linha em qualquer lugar do programa pode escrever account.balance = -500, e nada impede isso. Quando um saldo negativo aparece em produção, você precisa procurar no código inteiro todos os lugares que mexeram nele. O encapsulamento resolve isso: o saldo só pode mudar por meio de alguns métodos, e esses métodos garantem as regras, por exemplo que um saque nunca pode ser maior que o saldo.

Como o encapsulamento funciona

O encapsulamento combina duas ideias:

  1. Agrupamento. Os dados (o saldo) e o código que trabalha com eles (depositar, sacar) ficam na mesma classe.
  2. Ocultação. O resto do código vê só a interface pública da classe. Os dados por trás dela são internos, então só podem mudar das formas que a classe permite.

A regra que a classe protege se chama invariante: aqui, "o saldo nunca é negativo". Como toda alteração passa pelos métodos da classe, a invariante se mantém não importa o que o resto do programa faça.

70
refused: not enough money

O código de fora consegue ler acct.balance, mas a propriedade não tem setter, então acct.balance = 1000 lança um AttributeError. Se o saldo estiver errado algum dia, há exatamente dois métodos para investigar.

Encapsulamento em Python

O Python não tem a palavra-chave private. Ele depende de convenções de nomes que todo programador Python conhece:

  • name: público, faz parte da interface.
  • _name: interno. Nada impede você de lê-lo, mas o sublinhado inicial diz "não dependa disto".
  • __name: o Python o renomeia dentro da classe (name mangling), para que uma subclasse não o sobrescreva por acidente.
  • @property: transforma um método em algo que se lê como um atributo, para que você possa acrescentar verificações depois sem mudar nenhum código que o chama.
0
False
42

O name mangling evita acidentes, não o acesso: o nome modificado continua funcionando. O Python confia que os programadores respeitem o sublinhado. Na prática, a maior parte do código Python usa um único sublinhado mais @property, e reserva os dois sublinhados para classes feitas para ter subclasses. Há mais sobre como escrever classes na documentação de classes em Python.

Encapsulamento em Java, C++ e JavaScript

Outras linguagens garantem a ocultação. Em Java, um campo private só pode ser usado dentro da própria classe:

public class BankAccount {
    private int balance;  // hidden from every other class

    public int getBalance() { return balance; }

    public void withdraw(int amount) {
        if (amount > balance) throw new IllegalArgumentException("not enough money");
        balance -= amount;
    }
}

Escrever account.balance = 1000; em outra classe não compila: o javac informa balance has private access in BankAccount.

LinguagemMembro ocultoMembro públicoGarantido por
Python_name, __namenameConvenção
Javaprivate int namepublic int nameO compilador
C++seção private:seção public:O compilador
JavaScript#namenameO motor de JavaScript

O C++ torna os membros de class privados por padrão e os de struct públicos. Os campos privados # do JavaScript, adicionados no ES2022, não podem ser lidos de fora da classe de jeito nenhum. A documentação cobre cada um: modificadores de acesso em Java, especificadores de acesso em C++ e campos privados em JavaScript.

Por que o encapsulamento importa

  • As regras ficam em um só lugar. A verificação "nenhum saque acima do saldo" é escrita uma vez, dentro de withdraw, em vez de antes de cada saque do programa.
  • Você pode mudar o interior à vontade. Se decidir guardar o dinheiro em centavos inteiros em vez de um float, só a classe muda. O código que chama deposit(100) continua funcionando.
  • Depuração mais fácil. Quando um valor está errado, os suspeitos são os poucos métodos que podem alterá-lo, não todas as linhas do programa.
  • Menos para aprender e testar. Uma classe com três métodos públicos pode ser entendida e testada por meio desses três métodos.

O encapsulamento também funciona acima do nível das classes. Um módulo que expõe duas funções e mantém dez auxiliares internas é encapsulado do mesmo jeito, assim como um sistema operacional que só deixa os programas abrirem arquivos por meio de chamadas de sistema.

Ele é muitas vezes confundido com abstração. A abstração decide o que a interface oferece; o encapsulamento protege os dados por trás dela. A página de abstração tem uma comparação completa lado a lado. Junto com o polimorfismo e a herança, eles são os quatro pilares da programação orientada a objetos.

Erros comuns

  • Um getter e um setter para cada campo. Um setBalance que aceita qualquer número não protege nada. Ofereça as operações de que o objeto precisa (withdraw), não acesso direto a cada campo.
  • Devolver objetos internos. Um método que devolve self._items entrega a quem chama a lista real, que agora pode ser alterada. Devolva uma cópia ou uma tupla.
  • Tratar privado como segurança. Modificadores de acesso evitam erros, não ataques. Código Java consegue ler campos privados por reflexão, e código Python consegue ler _name diretamente. Senhas e chaves precisam de proteção de verdade, como hashing e criptografia.

Próximos passos

Leia a seguir abstração, que cobre a diferença entre as duas ideias, e depois polimorfismo. O curso de Python constrói classes passo a passo, e o curso de Java mostra o encapsulamento garantido pelo compilador.

Perguntas frequentes

O que é encapsulamento em termos simples?
Encapsulamento significa que um objeto guarda os próprios dados e oferece algumas formas seguras de usá-los. Um objeto de conta bancária não deixa você digitar um novo saldo; ele oferece deposit e withdraw, que primeiro verificam as regras. O nome vem de cápsula, um invólucro que mantém o conteúdo lá dentro.
Quais são exemplos de encapsulamento?
Uma classe de conta bancária que só permite alterações por meio de deposit e withdraw é o exemplo clássico. A própria list do Python é outro: você chama append e nunca gerencia a memória que guarda os itens. Um módulo que expõe algumas funções e mantém as funções auxiliares privadas é encapsulamento em uma escala maior.
Quais são os três tipos de encapsulamento?
Os tutoriais que listam três tipos costumam se referir ao encapsulamento de atributos (campos privados), ao encapsulamento de funções (métodos auxiliares privados) e ao encapsulamento de classes (uma classe escondida dentro de outra classe ou de um módulo). Não são categorias formais; são a mesma ideia aplicada a campos, métodos e classes inteiras.
Como funciona o encapsulamento em C++?
Em C++, você marca os membros de dados como private e oferece funções membro public que os leem ou alteram. Os membros de uma class são privados por padrão, enquanto os membros de uma struct são públicos por padrão. O compilador rejeita qualquer código fora da classe que tente usar um membro privado.
O que significa encapsulamento em redes?
Em redes, encapsulamento significa envolver os dados nos cabeçalhos de cada camada de protocolo no caminho de saída: uma mensagem HTTP vai dentro de um segmento TCP, que vai dentro de um pacote IP, que vai dentro de um quadro Ethernet. O nome é o mesmo da ideia de programação, mas é outro conceito.
Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR