Jump to content

Usando os modificadores de acesso strict private e published no Delphi...


Postagens Recomendadas

Olá Dev, seja bem-vindo!

Antes de nos aventurarmos no código, é fundamental dominarmos alguns conceitos básicos.

O que são modificadores de acesso?

Em programação orientada a objetos, os modificadores de acesso são palavras-chave utilizadas para controlar a visibilidade e acessibilidade de variáveis, métodos e classes em um programa. Eles determinam quais partes do código podem acessar e modificar determinados elementos. Existem geralmente três tipos de modificadores de acesso:

Public: Elementos marcados como public são acessíveis de qualquer lugar do programa, ou seja, podem ser utilizados por outras classes, objetos ou partes do código sem restrições.

Protected: O modificador protected permite que os elementos sejam acessados pelas classes derivadas (subclasses) dentro da mesma hierarquia de classes (herança), mas não por classes fora dessa hierarquia.

Private: Elementos marcados como private são acessíveis apenas dentro da própria classe onde foram declarados. Eles não podem ser acessados por classes externas, nem mesmo por subclasses.

A utilização desses modificadores é essencial para garantir a encapsulação e a segurança do código, controlando quais partes do programa podem interagir com determinados elementos e evitando acesso não autorizado ou modificações indevidas.

Aqui está um exemplo simples de como declarar uma classe no Delphi:

TPessoa = class
  private
    FNome: string;
    procedure SetNome(const Value: string);
  published
  
  public
    property Nome: string read FNome Write FNome;
  end;

Classes amigas

No Delphi, podemos declarar várias classes na mesma unit: 

unit Unit1;

interface

type

  TPessoa = class
  private
    FNome: string;
    procedure SetNome(const Value: string);
  public
    property Nome: string read FNome Write SetNome;

  end;

  TPassaro = class
  private
    FCor: string;
    procedure SetCor(const Value: string);
  public
    property Cor: string read FCor Write SetCor;
  end;

implementation


{ TPessoa }

procedure TPessoa.SetNome(const Value: string);
begin
  FNome := Value;
end;

{ TPassaro }

procedure TPassaro.SetCor(const Value: string);
begin
  FCor := Value;
end;

end.

Os modificadores de acesso (public, protected e private) definem a visibilidade dos membros de uma classe. Membros declarados como private só são acessíveis dentro da própria classe, enquanto membros protected podem ser acessados por classes descendentes (herança). No entanto, no exemplo acima, há uma pequena exceção em relação ao escopo de visibilidade "private". Podemos observar essa exceção, na qual ambas as classes podem acessar diretamente os atributos da outra classe, contornando o encapsulamento. Isso resulta no termo "classes amigas", pois, mesmo sendo privados, elas têm acesso aos atributos e métodos uma da outra.

 Como resolver esse problema declarando as classes na mesma unit?

A partir de Delphi 2006, a diretiva strict private foi introduzida no Delphi para restringir ainda mais o acesso, permitindo que somente a própria classe acesse esses membros. 

Exemplo utilizando strict private:

unit Unit1;

interface

type

  TPessoa = class
  strict private
    FNome: string;
    procedure SetNome(const Value: string);
  public
    property Nome: string read FNome Write SetNome;
  end;

  TPassaro = class
  strict private
    FCor: string;
    procedure SetCor(const Value: string);
  public
    property Cor: string read FCor Write SetCor;
  end;

implementation


{ TPessoa }

procedure TPessoa.SetNome(const Value: string);
begin
  FNome := Value;
end;

{ TPassaro }

procedure TPassaro.SetCor(const Value: string);
begin
  FCor := Value;
end;

end.

publisher

No Delphi, o modificador published é usado para definir a visibilidade de membros de uma classe que podem ser acessados não apenas dentro da própria classe ou por suas subclasses, mas também por formulários e componentes visuais durante o design de interfaces de usuário.

Quando um membro de uma classe é marcado como published, ele se torna visível no designer de formulários do Delphi, permitindo que propriedades, métodos ou eventos sejam configurados e manipulados visualmente através da IDE (Ambiente Integrado de Desenvolvimento) do Delphi, como o Delphi RAD Studio.

Isso é especialmente útil ao criar aplicativos com interface gráfica ou componentes, pois permite a interação fácil e direta com os componentes visuais, configurando propriedades e eventos diretamente na interface gráfica do Delphi.

Por exemplo, ao marcar uma propriedade como published em uma classe que herda de um componente visual (como um TButton ou TEdit), essa propriedade se torna visível no Object Inspector (Inspetor de Objetos) do Delphi, onde você pode configurar suas propriedades, associar eventos, etc., simplificando o desenvolvimento de interfaces de usuário.

type
  TExemplo = class(TComponent)
  private
    FNome: string;
  published
    property Nome: string read FNome write FNome;
  end;

Neste exemplo, a propriedade Nome foi declarada como published, o que permitiria a manipulação dela dentro do designer do Delphi, facilitando sua utilização e configuração na interface gráfica.

 

Obrigado, Dev, que sua jornada no mundo do desenvolvimento seja repleta de descobertas e conquistas extraordinárias!

  • Curtir 2
Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...