Olá! Quarta Feira, 19 de Novembro de 2008.


Dicas CódigoFonte.net
Quinta Feira, 13 de Julho 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.


Clique para ver a imagem em seu tamanho real
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:




Melhor Visualizado com
800x600 de Resolução

CodigoFonte.net » CodigoFonte.eti.br » Procurando o que comprar? » MeuMural.com.br » Todos os Direitos Reservados © 2002/2008

Procurando Notebooks, Câmeras Digitais, iPhones?

CompreDeTudo.com