Desenvolvimento - Delphi

Delphi: Programação Orientada à Objetos - Parte 03

Entramos na reta final sobre nossa breve discussão da POO (Programação Orientada a Objetos). Os temas abordados neste artigo serão, construtores, destrutores, e opções de visibilidade.

por Daniel Nascimento



Olá pessoal...

Entramos na reta final sobre nossa breve discussão da POO (Programação Orientada a Objetos). Os temas abordados neste artigo serão, construtores, destrutores, e opções de visibilidade.

Um construtor é um método, porém especial. Este é responsável por criar e inicializar os objetos. A declaração de um construtor se parece com a declaração de um procedimento, porém inicia-se com a palavra constructor. Por exemplo:

constructor Create;
constructor Create(AOwner: TComponent);

A declaração deste não especifica um valor de retorno. Ele retorna uma referência ao objeto criado! Geralmente usamos a palavra reservada Create como assinatura do construtor, porém podemos realizar o sobrecarregamento deste método (lembram-se deste conceito?)!

Para os desenvolvedores que tem o conhecimento da linguagem JAVA, temos uma importante diferença na criação de objetos. Ao criarmos um objeto, todos os campos irão começar com determinados valores, respeitando seus respectivos tipos.

Tipos de Dados
Valor Assumido
Ordinais 0
Apontadores nil
Classes nil
Strings vazio
Variantes Unassigned

Então, para criarmos um objeto, chame o método construtor para a classe desejada. Observe:

NomeDoObjeto := TNomeDaClasse.Create;

Um destrutor também é um método especial, responsável por destruir um objeto criado, a fim de liberar a memória utilizada por este.

Sua declaração também se assemelha com a declaração de um procedimento. Observe:

destructor Destroy;
destructor Destroy; Override;

Para chamar um destrutor, você também deve fazer referência a um objeto. Observe:

NomeDoObjeto.Destroy;

Estamos nos aproximando da reta final... Agora, ao meu ver, a característica mais importante. As opções de visibilidade.

Mas o que vem a ser opções de visibilidade numa classe?

Bem... Todos os membros, métodos e propriedades de uma classe têm um atributo chamado visibilidade, que é iniciado com uma das palavras reservadas: private, public ou automated, protected e published.

A visibilidade determina onde e como um membro poderá ser acessado. Podemos generalizar uma classificação de visibilidade dizendo que private representa a menor acessibilidade, protected representando um nível intermediário e public e published representando o maior nível.

Um método private não pode ser chamado a partir de outro módulo (classe). E um atributo ou propriedade private não pode ser lido ou escrito a partir de outro módulo. Ou seja, a declaração private, torna uma propriedade ou um método exclusivo à classe, os quais pertencem.

Quando utilizamos a palavra reservada protected? Ao referenciar um método e/ou atributo como protected, estamos informado que, os métodos serão chamados, e os atributos poderão ser lidos e/ou escritos na superclasse, quanto em suas sub-classes , ou seja, as classes que por ventura herdaram as características de uma classe pai, poderão fazer acesso direto aos métodos e atributos da superclasse.

Quando usamos a palavra reservada public, estamos informando que tanto atributos, quanto métodos e propriedades estarão acessíveis em qualquer lugar onde houver uma referência à classe.

Os atributos published têm a mesma visibilidade que os atributos public, a diferença está na informação gerada, que neste caso, é do tipo RunTime (RTTI). O que vem a ser RTTI?

RRTI permite que uma aplicação consulte os campos e propriedade dos objetos dinamicamente e localize seus métodos. Este é usado para acessar os valores de propriedades quando se está salvando ou lendo arquivos de forms, também para exibir propriedades no Object Inspector (neste caso, esta funcionalidade é interessante na criação de componentes! Veremos isso em uma outra oportunidade) , e para associar métodos específicos, os chamados de manipuladores de eventos.

A fim de manter uma melhor aparência do código-fonte da aplicação é interessante organizarmos nosso código. Um bom começo é prestarmos atenção na endentação, ou seja, ao iniciarmos blocos de código, aconselho utilizar um espaçamento para o código pertencente ao bloco. Uma outra sugestão, é organizar a classe por ordem de visibilidade. Por exemplo:

type
TClasse = class(TObject)
private
{ aqui irão métodos e atributos private }
protected
{ aqui irão métodos e atributos protected }
public
{ aqui irão métodos e atributos public }
published
{ aqui irão métodos e atributos published }
end;

Um pequeno esquema sobre como manipular os objetos num aplicativo DELPHI.

1. Declarar o Objeto.
2. Criar o Objeto.
3. Usar o Objeto.
4. Destruir o Objeto.

Aqui vai uma observação que pode ser bastante útil... Você pode aumentar a visibilidade de um atributo em uma classe descendente, redeclarando-o, mas não pode diminuir sua visibilidade. Além disso, membros published não podem se tornar public em uma classe descendente.

Agora deixo para você leitor uma sugestão simples de desenvolvimento, e para aqueles que quiserem me mandar o código-fonte, para que eu possa avaliar e enviar sugestões de desenvolvimento, fiquem a vontade, responderei a todos com grande prazer.

Criar uma classe que contenham todas as informações pessoais de uma pessoa, não se esquecendo dos construtores e destrutores, bem como dos atributos e suas propriedades. Fiquem atento com as opções de visibilidade e aos tipos de dados dos atributos. Não se esqueça dos métodos de cadastro, manutenção e exclusão de uma pessoa. Bom trabalho a todos!

Os que desejarem uma proposta de solução para este problema, no próximo artigo deixarei o código-fonte como opção de download!

E gostaria de pedir que vocês enviassem mais sugestões para abordagem num próximo artigo.

Um abraço a todos e boa semana.
Até a próxima!
Daniel Nascimento

Daniel Nascimento - Trabalha com Delphi a 3 anos desde a versão 5.0. Atualmente é Analista/Desenvolvedor de aplicações cliente/servidor e aplicações multicamadas com acesso a banco de dados SQL Server e Oracle.