ClipaTec Informática

Receba novidades por e-mail. Digite seu e-mail abaixo e clique no botão "Cadastrar"

Delivered by FeedBurner

23 de fevereiro de 2018

Delphi: Escopo de Classe

escopo visibilidade classe delphi

Salve, salve! Quem disse que o Delphi não da suporte a programação orientada a objetos? Quem diz isso, certamente não o conhece direito. Neste artigo vamos falar sobre a visibilidade de um objeto (instância da classe).
As definições de visibilidade nas classes Delphi é importante, e devem ser configuradas com cuidado. Através destas definições determinamos se os elementos da classe (atributos, métodos, etc) é visível ou não.
No Delphi temos os seguintes escopos de visibilidade do mais restritivo ao menos restritivo: strict private, private, strict protected, protected, public e published.
Quando vamos criar nossas classes no Delphi, estas implementações são feitas dentro de uma unit, e na mesma unit você pode ter uma ou várias classes, e também podemos implementar classes em outra(s) unit(s), e as vezes, determinados atributos e/ou métodos de uma classe devem/podem ser acessador por outras já outros atributos e/ou métodos não podem, e ainda, talvez a restrição seja apenas para as classes que não são descendentes, e por ai vai. Isso tudo vai ficar mais claro a medida em que formos explicando.
Antes de falar da visibilidade strict private e strict protected, precisamos entender que no Delphi temos o conceito de classes amigas, o que é isso? Quando mais de uma classe é criada na mesma unit, elas são consideradas amigas, sendo assim, mesmo que um atributo ou método esteja declarado dentro da seção "private" ou "protected" de uma classe, todas as classes que estão presentes na mesma unit terão acesso a eles, ou seja, em tese, um atributo ou método declarado em private somente é acessado somente pela própria classe e um atributo ou método declarado em protected somente é acessado pela própria classe e suas descendentes, porém, com este conceito de classes amigas, as demais classes conseguem ter acesso, exceto as classes que estão em outra unit, isto é, as inimigas, beijo kkkkk (só pra descontrair).
Aí você talvez esteja pensando, mas pra que toda esta explicação antes de falar do escopo de visibilidade strict private e strict protected? Tudo! Exatamente por isso meus caros, quando eu tenho mais de uma classe dentro da mesma unit, e não quero que as classes amigas tenham acesso aos atributos e métodos privados ou protegidos, então basta declarar o atributo ou método dentro do escopo strict private, desta maneira, somente a própria classe terá acesso a eles, ou strict protected, onde somente a própria classe e filhas terão acesso,  ou seja, as classes amigas não conseguirão mais acessa-los. Tomem muito cuidado com esses escopos, nós defendemos a ideia de que cada classe esteja implementada em uma unit, porém, se quiser ter mais de uma classe na mesma unit, e quiser garantir a privacidade de um atributo ou método somente a própria classe e as descendentes, deve-se usar o escopo "strict private" ao invés de "private" ou "strict protected" ao invés de "protected".
Ufa, parece um tanto confuso entender tudo isso, mas vamos entender os demais escopos, isso vai ajudar a entender melhor.

Privado (private)
Como já foi explicado anteriormente, os atributos e métodos declarados dentro desta seção só podem ser acessados pela própria classe e pelas classes amigas, portanto, as classes que estão em outras units (inimigas) não conseguem ter acesso.

Protegido (protected)
Os atributos e métodos declarados neste escopo, podem ser acessados pela própria classe, classes descendentes (filhas) e pelas classes amigas.

Público (public)
Neste escopo, qualquer classe podem acessar os atributos e métodos, ou seja, todas, seja amiga, seja inimiga, filha ou não.

Publicado (published)
É igual ao escopo public, porém, pode também ser acessado via RTTI, um exemplo disso, é quando conseguimos acessar os atributos e métodos pelo Object Inspector de um determinado objeto, como um "TEdit" por exemplo.
Nas versões novas do Delphi onde foram feitas modificações na RTTI, este escopo perde um pouco o sentido, visto que, com as novas modificações, já é possível ter acesso aos atributos e métodos dos outros escopos também.

Antes de finalizarmos este artigo, existe um escopo pouco falado, o "automated".

Automatizado (automated)
Este escopo é semelhante ao public, com apenas um incremento, onde as informações de tipo automático (automation type information) são geradas, muito utilizadas em classes "Windows". Os "Automation Objects" permitem trabalhar com objetos de aplicações como "Word" por exemplo, ou seja, é pertinente a API OLE Automation.

Muito bem, agora que tudo ficou mais claro, apenas ressaltando:

Estritamente Privado (strict private)
Apenas a própria classe pode ter acesso, as classes amigas, inimigas e filhas não possuem acesso.

Estritamente Protegido (strict protected)
Apenas a própria classe e classes filhas podem ter acesso, as classes amigas e inimigas não possuem acesso.

Assim chegamos ao final deste artigo. Agora que você conhece a diferença entre os escopos de visibilidade, usem com cuidado. Estes escopos são extremamentes importantes quando trabalhamos com criação de componentes por exemplo. Qualquer dúvida, deixe seu comentário, até mais. Abraço.

(Por ClipaTec Informática)

0 comentários:

Postar um comentário

Visite nossa página de Política de comentarios antes de comentar para ter certeza de que seu comentário não será excluído! Lembre-se, assim que aprovarmos o teu comentário ele será publicado, por isso, não deixe de sempre visitar nosso blog e conferir nossa resposta ao seu comentário, abraço!