Árvore de páginas

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,... )