www.devmedia.com.br    [versão para impressão]

Quick Tips: Métodos e variáveis estáticas

Nesta quick tip veremos como funcionam e como métodos e variáveis estáticas.

Quick Tips: Métodos e variáveis estáticas

 

Nesta quick tip veremos como funcionam e como métodos e variáveis estáticas.

 

Quando declaramos um método ou uma variável em uma classe, por default, o mesmo será acessado a partir do objeto, ou seja, para utilizarmos este método ou variável teremos que instanciar um objeto desta classe.

 

Métodos e variáveis estáticas são elementos que pertencem à classe e não ao objeto, dessa forma quando os declaramos temos que usá-los a partir da classe.

 

No Delphi para declararmos métodos e variáveis estáticas precisamos incluir a palavra reservada class na frente dos mesmos.

 

unit Unit2;

 

interface

type

  TCliente = Class

    private

      class var Bairro:String;

    public

      var Nome:String;

      class function GetBairro:String;

      class procedure SetBairro(Value:String);

  End;

 

implementation

 

{ TCliente }

 

class function TCliente.GetBairro: String;

begin

  result := Bairro;

end;

 

class procedure TCliente.SetBairro(Value: String);

begin

  bairro := Value;

end;

 

end.

 

No exemplo àcima temos a variável Nome que é do objeto e a variável Bairro que é da classe(note a declaração da mesma, class var). Além disso temos os métodos Get e Set de bairro também como sendo da classe.

 

Para usarmos estes métodos e variáveis faríamos da seguinte maneira:




procedure TForm1.Button1Click(Sender: TObject);

begin

  //Click do botão Cria Cliente 1

  C1 := TCliente.Create;

  C1.Nome := 'Ricardo';

  TCliente.SetBairro('Realengo');

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

  //Click do botão Cria Cliente 2

  C2 := TCliente.Create;

  C2.Nome := 'Ricardo';

  TCliente.SetBairro('Barra');

end;

 

procedure TForm1.Button4Click(Sender: TObject);

begin

  //Click do botão Exibir Valores

  ShowMessage('C1 ' +#13+

              'Nome:' + C1.Nome + #13 +

              'Bairro:' + TCliente.getBairro + #13 +

              'C2 ' +#13+

              'Nome:' + C2.Nome + #13 +

              'Bairro:' + TCliente.getBairro);

end;

 

Como podemos ver no nosso exemplo, temos 2 botões para criar dois clientes diferentes e um terceiro para exibir os valores de cada um deles. Note que para passamos o valor para a variável Nome, usamos o objeto(C1.Nome e C2.Nome), porém para usar os métodos estáticos que manipulam a variável Bairro usamos diretamente a classe(TCliente.Bairro).

 

Vale ressaltar algo muito importante, quando definimos uma variável estática em uma classe, esta só terá um valor independentemente da quantidade de objetos que tenhamos desta classe, no exemplo acima se clicarmos no botão “Criar Cliente 1”, depois no “Criar Cliente 2” e em seguida “Exibir Valores” veremos a seguinte mensagem:




Por isso devemos ter cuidado ao definir variáveis estáticas pois acabam sendo globais para toda a aplicação, visto que a definição da classe dentro de nossa aplicação é uma só.

 

Outro ponto importante ressaltar é que um método estático só pode acessar variáveis estáticas da classe e um método do objeto só pode acessar variáveis do objeto, ou seja, se no nosso exemplo, na implementação do método SetBairro tentássemos manipular o valor de Nome, obteríamos um erro de compilação.

 

 

É isso aí pessoal, espero que tenham gostado.

Fiquem a vontade para criticar, tirar dúvidas e sugerir novos temas.
Abraço.

Ricardo Coelho               

por RICARDO DA SILVA COELHO

Graduado em Analise de Sistemas, Pós-graduando em Engenharia de software, mais de 7 anos de experiência em desenvolvimento de software, onde atuou em projetos de diversos seguimentos como varejo, telecomunicações, ERPs etc e nas mais variadas plataformas(Desktop, Web e Mobile). Articulista do portal devmedia e editor geral das revistas .NET Magazine e Easy .NET Magazine. Entusiasta de métodos ágeis, atualmente trabalha como ScrumMaster em projetos .NET voltados para a área de petróleo e gás além de se dedicar ao aprofundamento de seus conhecimentos na área de GIS e Mobile, com o desenvolvimento de soluções em Android.
www.devmedia.com.br/articles/viewcomp.asp?comp=15513