AULA 03 MÓDULO 1 encapsulamento ⏱ 50 min

Encapsulamento

Proteja os dados da sua classe. Modificadores de acesso: public, private, protected. Getters, setters com validação. A palavra this.

privatepublicprotectedgettersetterthisinvariante

O problema do acesso irrestrito

Imagine uma classe ContaBancaria com saldo public. Qualquer parte do código pode escrever conta.saldo = -1000000. Java compila, executa, sem avisos. O sistema está silenciosamente corrompido.

💥
sem encapsulamento
Em C você já viu: variável global que qualquer função pode alterar. Depurar isso é um pesadelo — quem mudou? quando? como? Encapsulamento coloca um guardião na porta dos dados.

Modificadores de acesso

Java usa 4 níveis de visibilidade que definem quem pode ver e modificar cada membro da classe.

ModificadorMesma classeMesmo pacoteSubclasseQualquer lugar
private
(default)
protected
public
🏆
regra de ouro
Comece tudo private. Aumente a visibilidade só se precisar e tiver motivo. Menos acesso = menos lugar para erros aparecerem.

Getters, setters e this

Getter retorna o valor. Setter define o valor com validação. this se refere ao próprio objeto — útil quando parâmetro tem mesmo nome do atributo.

IntelliJ gera automaticamente
Alt+Insert → Getter and Setter. Nunca escreva manualmente. Mas entenda o que foi gerado — a validação não é adicionada automaticamente!
java
// Encapsulamento em Java — proteger invariantes

public class ContaBancaria {
    private double saldo;  // private: só a classe acessa
    private final String titular;
    private static int contadorContas = 0;

    public ContaBancaria(String titular, double saldoInicial) {
        if (titular == null || titular.isBlank())
            throw new IllegalArgumentException("Titular obrigatório");
        if (saldoInicial < 0)
            throw new IllegalArgumentException("Saldo inicial não pode ser negativo");

        this.titular = titular;  // this: distingue atributo do parâmetro
        this.saldo = saldoInicial;
        contadorContas++;
    }

    // Getter — apenas leitura
    public double getSaldo() { return saldo; }
    public String getTitular() { return titular; }
    public static int getContadorContas() { return contadorContas; }

    // Métodos de negócio — operações válidas
    public void depositar(double valor) {
        if (valor <= 0) throw new IllegalArgumentException("Valor deve ser positivo");
        saldo += valor;
    }

    public void sacar(double valor) {
        if (valor <= 0 || valor > saldo)
            throw new IllegalArgumentException("Saque inválido");
        saldo -= valor;
    }
}
quiz · aula 03
Teste seus conhecimentos em Java
0/3 respondidas
QUESTÃO 01
Por que tornar atributos private?
QUESTÃO 02
Qual o papel de 'this' no setter setNome(String nome)?
QUESTÃO 03
Qual modificador de acesso usar em atributos que subclasses precisam acessar diretamente?
0/3