DEV Community

Cover image for POO Além do Código #2: Encapsulamento (A Caixa Preta)
Bruno S Freschi
Bruno S Freschi

Posted on

POO Além do Código #2: Encapsulamento (A Caixa Preta)

"Um objeto deve ser responsável por manter seu próprio estado e proteger sua integridade."

📜 A Perspectiva Histórica

Nos primórdios da programação, as variáveis eram globais. Qualquer parte do código podia alterar o valor de qualquer outra parte. O resultado? O "Efeito Colateral": você consertava um erro no login e, inexplicavelmente, quebrava o cálculo do frete. O Encapsulamento surgiu para criar fronteiras, garantindo que o que acontece dentro de um objeto, fica dentro do objeto.

💡 O Conceito

Encapsular é a arte de esconder a complexidade interna e expor apenas o necessário.
Pense no objeto como uma célula: ela tem uma membrana que protege o núcleo. Você não altera o DNA da célula cutucando-a com o dedo; você interage com os receptores da membrana.

O foco do Encapsulamento é a PROTEÇÃO e a VALIDAÇÃO dos dados.


🛠️ O Encapsulamento no Mundo Real (Agnóstico)

Imagine um Relógio de Pulso:

  • Interface Pública: O visor e o botão de ajuste de hora.
  • Encapsulamento (Privado): As engrenagens, a bateria e o cristal de quartzo.
  • Por que isso é bom? Se você pudesse tocar diretamente nas engrenagens para mudar a hora, acabaria entortando uma peça. O relógio te obriga a usar o botão, que garante que as engrenagens girem da forma correta.

💻 Implementação em C# (Nossa Ferramenta)

Aqui, usamos Modificadores de Acesso (private, public, protected) e Properties (get e set) para controlar o acesso aos dados.

public class ContaBancaria 
{
    // O saldo é privado: ninguém de fora pode simplesmente digitar um novo valor.
    private decimal _saldo;

    public decimal Saldo 
    {
        get { return _saldo; } // Apenas leitura externa
    }

    // O método é a única "porta" de entrada segura.
    public void Depositar(decimal valor) 
    {
        if (valor > 0) 
        {
            _saldo += valor;
            Console.WriteLine($"Depósito de {valor} realizado com sucesso.");
        }
    }

    public void Sacar(decimal valor) 
    {
        if (valor <= _saldo) 
        {
            _saldo -= valor;
        }
        else 
        {
            Console.WriteLine("Saldo insuficiente.");
        }
    }
}

Enter fullscreen mode Exit fullscreen mode

🎯 Desafio de Mentalidade

Ao olhar para o código nesta pasta, pergunte-se:

  1. Meus campos (fields) são privados?
  2. Existe alguma forma de deixar o objeto em um "estado inválido" (ex: saldo negativo, idade -5)? Se sim, falta encapsulamento.
  3. O mundo externo realmente precisa saber como esse cálculo é feito, ou apenas o resultado final dele?

Top comments (0)