Encapsulamento

O que é Encapsulamento?

O encapsulamento é o pilar da POO que protege os atributos de uma classe, evitando acesso direto a eles. Consiste em esconder as implementações internas de uma classe e expor apenas o necessário através de interfaces bem definidas (métodos públicos).

Encapsulamento significa "esconder os detalhes de implementação e expor apenas o necessário".

Exemplo Prático

Vamos ver como implementar o encapsulamento em uma classe ContaBancaria:

                    
public class ContaBancaria {
    // Atributos privados (encapsulados)
    private String titular;
    private double saldo;
    private String numeroConta;
    private String senha;
    
    // Construtor
    public ContaBancaria(String titular, String numeroConta, String senha) {
        this.titular = titular;
        this.numeroConta = numeroConta;
        this.senha = senha;
        this.saldo = 0.0;
    }
    
    // Métodos públicos (interface)
    public String getTitular() {
        return titular;
    }
    
    public void setTitular(String titular) {
        this.titular = titular;
    }
    
    public String getNumeroConta() {
        return numeroConta;
    }
    
    public double getSaldo() {
        return saldo;
    }
    
    // Nota: não existe setSaldo() - o saldo só pode ser alterado pelos métodos
    // sacar() e depositar()
    
    public boolean sacar(double valor, String senhaInformada) {
        if (!senhaCorreta(senhaInformada)) {
            return false;
        }
        
        if (valor > 0 && valor <= saldo) {
            saldo -= valor;
            return true;
        }
        return false;
    }
    
    public boolean depositar(double valor) {
        if (valor > 0) {
            saldo += valor;
            return true;
        }
        return false;
    }
    
    // Método privado (implementação interna)
    private boolean senhaCorreta(String senhaInformada) {
        return this.senha.equals(senhaInformada);
    }
}
                

Neste exemplo:

Níveis de Acesso em Java

Modificador Mesma Classe Mesmo Pacote Subclasse Qualquer Lugar
private
default (sem modificador)
protected
public

Padrões de Encapsulamento

JavaBeans

Um padrão comum para encapsulamento em Java:

Objetos Imutáveis

Outra forma de encapsulamento onde, após criado, o objeto não pode ser modificado:

                    
public final class Pessoa {
    private final String nome;
    private final String cpf;
    
    public Pessoa(String nome, String cpf) {
        this.nome = nome;
        this.cpf = cpf;
    }
    
    public String getNome() {
        return nome;
    }
    
    public String getCpf() {
        return cpf;
    }
    
    // Não existem setters
}
                

Benefícios do Encapsulamento

Conclusão

O encapsulamento é um dos princípios mais importantes da POO, pois promove a segurança e a robustez do código. Ao encapsular dados e comportamentos, garantimos que os objetos mantenham seu estado interno consistente, facilitando o desenvolvimento, manutenção e evolução do sistema.

Na prática, sempre devemos buscar encapsular nossos atributos usando modificadores de acesso adequados e expondo apenas o que é necessário através de métodos bem definidos.