Encapsulamento
O encapsulamento é um dos pilares da programação orientada a objetos em C#. Ele consiste em ocultar os detalhes internos de uma classe, expondo apenas o que é necessário para o uso externo, protegendo assim os dados e a lógica interna contra acessos e modificações indevidas.
O que é Encapsulamento?
Encapsulamento significa agrupar dados (atributos) e comportamentos (métodos) dentro de uma classe e controlar o acesso a eles. O objetivo é proteger o estado interno do objeto, permitindo que ele seja manipulado apenas por meio de métodos e propriedades definidos pela própria classe. Isso garante integridade dos dados e facilita a manutenção do código, já que alterações internas não afetam quem usa a classe.
“O encapsulamento é o processo de ocultar ou esconder os membros de uma classe do acesso exterior usando modificadores de acesso. […] Uma classe bem encapsulada deve ocultar seus dados e os detalhes de implementação do mundo exterior.”1
Modificadores de Acesso em C#
Os modificadores de acesso definem quem pode aceder a membros (atributos, métodos, propriedades) de uma classe. Os principais são:
- public: acesso irrestrito, visível de qualquer lugar.
- private: acesso restrito à própria classe. É o padrão para atributos que não devem ser acessados externamente.
- protected: acesso permitido apenas na própria classe e em classes derivadas.
- internal: acesso permitido apenas dentro do mesmo assembly/projeto.
- protected internal: acesso permitido em classes derivadas ou no mesmo assembly.
Exemplo:
public class Pessoa
{
private string nome; // Só pode ser acedido dentro da própria classe
protected int idade; // Pode ser acedido na classe e em herdeiros
public string Documento; // Pode ser acedido de qualquer lugar
public void DefinirNome(string novoNome)
{
nome = novoNome; // Modifica o campo privado de forma controlada
}
public string ObterNome()
{
return nome;
}
}
Neste exemplo, o campo nome
é privado e só pode ser acedido ou modificado por métodos da própria classe. O campo idade
é protegido, enquanto Documento
é público.
Propriedades
Em C#, é comum usar propriedades para controlar o acesso a campos privados, permitindo leitura e/ou escrita conforme necessário. Isso reforça o encapsulamento e permite adicionar validações ou lógica personalizada.
Exemplo com propriedade:
public class ContaBancaria
{
private double saldo; // campo privado
public double Saldo // propriedade pública só para leitura
{
get { return saldo; }
private set { saldo = value; }
}
public void Depositar(double valor)
{
if (valor > 0)
saldo += valor;
}
}
Aqui, o saldo só pode ser alterado por métodos da própria classe, nunca diretamente de fora.
Resumo das Boas Práticas
- Use o modificador mais restritivo possível para atributos e métodos.
- Exponha dados apenas por meio de métodos e propriedades controladas.
- Utilize propriedades para leitura e escrita segura dos campos privados.
- Oculte detalhes de implementação e exponha apenas o necessário para o funcionamento externo da classe.