ClipaTec Informática

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

Delivered by FeedBurner

16 de julho de 2014

Class Helper no Delphi

delphi
Olá pessoal, salve. De volta ao blog, hoje vamos falar de Class Helper, um recurso espetacular que o Delphi oferece e que muitos não conhecem.
Pra iniciarmos, o que seria um Class Helper?
Nada mais é que uma classe que associada com outra classe introduz métodos ou propriedades adicionais. É uma forma de estender uma classe sem usar herança.
É normal que muitos, principalmente pra quem trabalha com POO, confundir o Class Helper com Herança, visto que são estruturas parecidas.
Você pode dizer: não seria útil usar herança? Qual a vantagem em usar Class Helper?
Muito bem, ótima pergunta. Nem sempre queremos que um determinado método ou propriedade esteja disponível para todas as subclasses (classes filhas). Por exemplo, temos a classe "TPessoa" e queremos que a propriedade "AnoNascimento" esteja disponível apenas para as subclasses "TCliente" e "TFuncionario", isso significa que as demais subclasses de "TPessoa" como a "TFornecedor" por ex, não receba tal atributo. E aí? Como resolver isso? Se eu jogar o atributo "AnoNascimento" na superclasse (classe pai), no nosso caso "TPessoa", o mesmo estaria disponível em todas as subclasses, inclusive "TFornecedor".
É aí que entra o Class Helper. Criamos um class helper de "TPessoa", adicionamos a propriedade "AnoNascimento", desta forma, apenas as subclasses que precisarem desta propriedade a terá, basta indicar o Class Helper na subclasse.
Então vamos para um exemplo prático e usando uma classe do próprio Delphi para simplificar o artigo.
Todos conhecem a propriedade "AsString" presente nos componentes dataset, esta propriedade pertence a classe "TStringField" do Delphi, vamos estender esta classe adicionando mais recursos nela, sem precisar de alterá-la, até porque não é recomendado alterar as classes que já vem compiladas na IDE, você corre o risco de estragar a IDE, então, nada melhor que criar um class helper para que possamos estender as funcionalidade ou propriedades da mesma. No exemplo abaixo, temos um formulário principal, com uma conexão feita. Neste exemplo estou usando o banco de exemplo que vem com o firebird. Estou passando a instrução SQL "select * from customer" no componente "sqlCustomer", adicionei os fields, tanto no "sqlCustomer" quanto no "cdsCustomer". Não vou entrar nos detalhes da conexão e ligações entre os componentes neste artigo, o importante eu já descrevi.
O que vai acontecer? Ao selecionar um cliente na grid e clicar no botão "Capturar Nome", o Edit vai receber o nome que está selecionado.
Aí vem o pulo do gato, eu quero que o nome selecionado na grid, apareça no Edit em maiúsculo e sem espaços no início e no final do nome, caso houver.
Simples, bastaria fazer o seguinte no evento "OnClick" do botão:

edtNome.Text := Trim(UpperCase(cdsCustomerCUSTOMER.AsString));

Percebam que invoquei dois métodos do Delphi, um para tirar os espaços "Trim", e outro para converter a string para maiúsculo "UpperCase".
Agora, imagina se existisse o método "AsStringUpperTrim" que faria tudo isso?
Legal não? Então vamos fazer isso.
Primeiro, monte o formulário parecido como este:

delphi
Muito bem, agora vamos criar uma nova Unit, e nela vamos criar uma class helper de "TStringField", que terá a função "AsStringUpperTrim". Salve a unit com o nome que desejar.
Primeiro passo é declarar na uses da interface a Unit "DB", pois ela possui a classe "TStringField". Feito isso, criamos a nossa class helper, no exemplo eu dei o nome para esta classe de "TFieldCtiHelper". A implementação ficaria assim:

TFieldCtiHelper = class Helper for TStringField

Na implementação acima, estamos dizendo que a classe "TFieldCtiHelper" é um class helper da classe "TStringField".
Ao fazer isso, agora temos acesso a todas as propriedades e métodos da classe "TStringField".
Ok, agora vamos declarar no escopo "public" nossa função "AsStringUpperTrim" que retornará uma "string".

function AsStringUpperTrim: string;

Na implementação desta função, passamos para o "Result" a propriedade "AsString" que pertence à classe "TStringField", convertida para maiúsculo e sem os espaços.

Segue a unit completa:

class helper
Pronto, nossa class helper está pronta. Agora vamos usar nossa nova função. Prepara-se para a mágica.
No formulário principal, declare na uses da implementação a nossa Unit do class helper. No evento "OnClick" do botão "Capturar Nome", faça o seguinte:

delphi



Perceba que além dos métodos e propriedades da classe "TStringField", como o "AsString" por exemplo, temos também, nosso método que criamos na class helper.
Antes de testar o resultado, no evento "OnCreate" do formulário implemente o seguinte:

delphi





No evento "OnClose" do formulário, implemente o seguinte:





Muito bem, agora basta rodar a aplicação e ver o resultado.
Qualquer dúvida sobre algum código ou alguma coisa que você não entendeu, ou qualquer erro que ocorrer em seu teste, comente abaixo que te ajudaremos. Forte abraço e até a próxima.

(Por Welinton Junior Dias)

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!