Olá! Monday, 14 de October de 2024.



Dicas CódigoFonte.net
Thursday, 13 de July de 2006

Classe Helpers

Hoje vamos ver que o compilador do Delphi 2005 faz mágicas.

Helper

A palavra Helpers é utilizada no Delphi para criar uma extensão de uma classe, podendo assim dividi-la em duas Units, sem precisar herdá-la. Uma das mais novas características da linguagem e do poderoso compilador Delphi, é poder estender novas funcionalidades às classes já existentes, podendo assim construir novos métodos e propriedades sem ter que criar uma nova classe herdando-a.

A razão principal deste recurso implantado no compilador pela Borland foi a necessidade de estender as classes existentes na VCL para VCL.NET. na Listagem 1. veremos um exemplo de como é feito o uso de uma classe helper.

Listagem 1. Aqui está um exemplo como estender uma classe com helpers.

TPessoa = class procedure SomaSalario; end; TPessoaFisica = class helper for TPessoa function ValidaCPF(Value: string) Boolean; end;

Com as definições da classe acima, podemos usar-la da seguinte maneira:

var objPessoa: TPessoa; begin objPessoa := TPessoa.Create; objPessoa.ValidaCPF(’00.000.000-00’); ...

Limitações

Você não pode estender uma classe se ela já for à extensão de outra classe. Veja na listagem 2.

Listagem 2. Limitação de uso do Helpers

TPessoa = class; // OK TPessoaFisica = class helper for TPessoa; // OK TPessoaFisicaPobre = class helper for TPessoaFisica // Isto não funcionará

Dúvidas

Quando podemos utilizar estes recursos em nosso dia a dia? Para que estender uma classe?

1. Quando você trabalha em equipe, podemos usar o recurso de ter vários colaboradores trabalhando em uma mesma classe mas teríamos que usar um gerenciador de código fonte como o Starteam para fazer check-in/check-out e mesclar as alterações de cada um. Usando classes estendidas podemos dividir nossa classe para que cada programador trabalhe em uma classe estendida (cada classe estendida seria uma unit), ai quem tem o trabalho de juntar os códigos da classe e suas classes estendidas seria o compilador.

2. Vejamos a necessidade de manter duas versões de seu produto, onde uma versão tem mais características que outra (isto é "profissional" e versão "padrão"). As classes estendidas permitem que você adicione todas as características para a versão "profissionais" que ficará em uma unit separada. Quando você gerar a versão "padrão", você simplesmente valida o tipo da versão e não compila unit da versão "profissionais".

Teríamos N motivos e necessidades para usar classes estendidas, mas nosso foco é no recurso que o compilador Delphi nos oferece.

Na Prática

Vamos a um exemplo onde estenderemos uma classe para compreender como a classe estendida funciona na prática. O projeto tem duas units. A unit "Automovel.pas" define a classe de TAutomovel com um procedimento "LigarLimpadorDianteiro" da classe. A unit "ArCondicionado.pas" define uma classe de TArCondicionado estendida da classe TAutomovel. TArCondicionado irá implementar o procedimento “LigarArCondicionado" à classe de TAutomovel. Vejamos na Listagem 3.

Listagem 3. Na prática com estender uma classe.

{ Classe TAutomovel } unit Automovel; interface uses Dialogs; type TAutomovel = class class procedure LigarLimpadorDianteiro; end; implementation { TAutomovel } class procedure Tautomovel.LigarLimpadorDianteiro; begin ShowMessage('Limpador Ligado .'); end; end. { Classe estendida da TAutomovel chamada de TArCondicionado } unit ArCondicionado; interface uses Dialogs, Automovel; type TArCondicionado = class helper for TAutomovel class procedure LigarArCondicionado; end; implementation { TArCondicionado } procedure TArCondicionado.LigarArCondicionado; begin ShowMessage('Ar Condicionado Ligado.'); end; end. { Utilização da classe TAutomovel e da classe estendida TArCondicionado } unit Helpers; … uses Automovel, ArCondicionado; {$R *.dfm} procedure TfrmHelpers.LipadorDianteiroClick(Sender: TObject); begin // Aqui dispara o método da classe TAutomovel. TAutomovel.LigarLimpadorDianteiro; end; procedure TfrmHelpers.ArCondicionadoClick(Sender: TObject); begin // Aqui dispara o método da classe estendida que é TArcondicionado // extensão do TAutomovel. TAutomovel.LigarArCondicionado; end; end.


Todos os direitos reservados

Comentários do artigo [Novo comentário]

Nenhum comentário, seja o primeiro a comentar.
Para adicionar um comentário você deve efetuar o login


Gostou do CódigoFonte.net? Quer indicar a um amigo?
Preencha os campos a seguir.
Seu Nome:
Seu E-mail:
E-mail de seu Amigo:


CodigoFonte.net » Meu Mural » Competiva - Criação de Sites » Todos os Direitos Reservados © 2002/2010