Nas aulas anteriores criamos classes, aplicamos herança e instanciamos nossos primeiros objetos. Agora vamos aprofundar na estrutura interna de uma classe e entender um dos pilares mais importantes da POO: o encapsulamento. E a chave para aplicá-lo no Delphi está nos escopos de visibilidade.

A estrutura básica de uma classe no Delphi

Toda classe no Delphi é declarada na seção type, seguindo a convenção de começar com a letra T. O Delphi oferece um atalho prático: basta digitar class na seção interface e pressionar Ctrl+Espaço que o IDE gera automaticamente a estrutura completa via Live Template:

type
  TExemplo = class
  private
    // visível apenas para esta classe e classes na mesma Unit
  protected
    // visível para esta classe, herdeiros e classes na mesma Unit
  public
    // visível para todos
  published
    // igual ao public, mas exposto no Object Inspector
  end;

Repare que ao declarar TExemplo = class sem informar ancestral, o Delphi entende implicitamente que ela herda de TObject — a classe base que traz o construtor e o destrutor prontos para uso.

Os quatro escopos de visibilidade

O encapsulamento controla quem pode acessar o quê dentro de uma classe. No Delphi, isso é feito com quatro escopos:

  • Private: visível apenas para a própria classe e para classes declaradas na mesma Unit (as chamadas “classes amigas”).
  • Protected: visível para a própria classe, suas classes herdeiras e as classes amigas da mesma Unit.
  • Public: visível para qualquer código que referencie a classe.
  • Published: idêntico ao public, mas os membros também aparecem no Object Inspector do IDE — útil para componentes visuais.

Encapsulamento na prática

Na aula, o Landerson demonstra tudo em um projeto VCL. Ele cria campos nos quatro escopos e mostra o que acontece ao tentar acessá-los de fora da classe:

type
  TExemplo = class
  private
    FPrivado: string;
  protected
    FProtegido: string;
  public
    FPublico: string;
  published
    property Publicada: string read FPublicada write SetPublicada;
  end;

Ao tentar acessar FPrivado ou FProtegido diretamente pelo formulário, o compilador acusa erro — e é exatamente isso que queremos. Para expor um dado privado de forma controlada, criamos um método getter dentro da própria classe:

function TExemplo.GetPrivado: string;
begin
  Result := FPrivado; // FPrivado está acessível DENTRO da classe
end;

Já o campo FProtegido pode ser acessado por uma classe herdeira. O Landerson cria a classe TSubExemplo, que herda de TExemplo, e demonstra que dentro dela é possível ler FProtegido normalmente — porque o escopo protected foi exatamente criado para isso.

Assista à aula completa

Para acompanhar a série desde o início, veja também o post anterior: Instanciando Objetos e Refatorando Units no Delphi — POO Aula 03.

Deixe um comentário