Criação de Classes em AdvPL
Abrangência
Versão 5.07 | Versão 5.08 | Versão 6.09 | Versão 7.10 | Versão 8.11 |
Versões Anteriores |
Podemos criar Classes próprias em Advpl ; bastando para tal nos utilizarmos dos comandos de declaração de Classes , Métodos e Propriedades do Protheus. Veja abaixo um modelo simples que exemplifica a utilização e declaração de uma Classe de Exemplo utilizando Advpl:
#INCLUDE "PROTHEUS.CH"
// Crio uma função para teste da Classe Exemplo
Function u_teste()
Local oSoma1 := Exemplo():New() // Crio um novo objeto de exemplo ( objeto 1 )
Local oSoma2 := Exemplo():New() // Crio outro objeto de exemplo ( objeto 2 )
// Realizo 3 chamadas ao método Soma, com o objeto 1
oSoma1:Soma(10)
oSoma1:Soma(20)
oSoma1:Soma(30)
// Realizo 2 chamadas ao método Soma, com o objeto 2
oSoma2:Soma(30)
oSoma2:Soma(30)
// Imprimo no console o acumulador das somas do obj 1 ( 60 )
conout(oSoma1:nAcumulador)
// Imprimo no console o acumulador das chamadas à soma com o objeto 1 ( 3 )
conout(oSoma1:nChamadas)
// Imprimo no console o acumulador das somas do obj 2 ( 60 )
conout(oSoma2:nAcumulador)
// Imprimo no console o acumulador das chamadas à soma com o objeto 2 (2)
conout(oSoma2:nChamadas)
Return
// --------------------------------------------------------------------------------
// Declaracao da Classe Exemplo
// --------------------------------------------------------------------------------
CLASS Exemplo
// Declaracao das propriedades da Classe
DATA nAcumulador
DATA nChamadas
// Declaração dos Métodos da Classe
METHOD New() CONSTRUCTOR
METHOD Soma( nNum )
ENDCLASS
// Criação do construtor, onde atribuimos os valores default
// para as propriedades e retornamos Self
METHOD New() Class Exemplo
::nAcumulador := 0
::nChamadas := 0
Return Self
// Criação do Método de Soma , que recebe um número e o soma
// ao acumulador, retornando o conteudo do acumululador após
// a soma , e incrementa em 1 o contador de chamadas do método
METHOD Soma( nNum ) Class Exemplo
::nAcumulador += nNum
::nChamadas++
Return ::nAcumulador
Podemos utilizar os outros tipos de variáveis Advpl nas Classes, como variáveis Locais, Private, Static, etc... Para acessarmos uma propriedade da classe atual, devemos prefixá-la com :: ( dois sinais de 2 pontos )
Ao declarar um objeto utilizando o construtor da classe, utilizamos a sintaxe: oObjeto := NomeDaClasse():Metodo_Contrutor()
Para acessar uma propriedade deste objeto, utilizamos oObjeto:Propriedade, e para acessar um método da classe aplicável a este objeto, utilizamos oObjeto:Metodo( parametros,... )