📘 Classes no ADVPL e TLPP – Exemplos completos e comparativos
Hoje trago um exemplo prático de como criar e utilizar classes no ADVPL e também como aproveitar os recursos avançados disponíveis no TLPP. Classes no ADVPL são simples e diretas, enquanto no TLPP temos tipagem, modificadores de acesso e muito mais — tornando o código mais robusto e próximo de linguagens modernas. 🚀
🟦 Exemplo em ADVPL
No ADVPL, as classes possuem estrutura básica: É possível declarar propriedades usando DATA e manipular seus valores via SELF:DATA ou ::DATA. A seguir, um exemplo de classe simples com um método de alerta:
#INCLUDE "TOTVS.CH"
User Function UDCLASS()
oUDCLASS := UDCLASS():New()
oUDCLASS:Alert( 'Minha Mensagem' )
Return(Nil)
/*/{Protheus.doc} UDCLASS
Classe generica. Funções para usos diversos..
@type class
@author Eurai Rapelli
/*/
Class UDCLASS
Method New() Constructor
Method Alert( cMen, cTit )
EndClass
/*/{Protheus.doc} New
Método New
/*/
Method New() Class UDCLASS
Return( Self )
/*/{Protheus.doc} Alert
Mostra mensagem
/*/
Method Alert( cMen, cTit ) Class UDCLASS
Default cMen := ''
Default cTit := 'Universo do Desenvolvedor'
MsgAlert(cMen,cTit)
Return( Nil )
🟩 Exemplo em TLPP
No TLPP, foram adicionados vários recursos importantes:
- Tipagem
- Namespace
- Métodos e variáveis com níveis de acesso (public, private, protected)
- Métodos estáticos
Abaixo, um exemplo completo com métodos public, private, protected e static:
#INCLUDE "TOTVS.CH"
User Function UDCLASSTLPP()
oUDCLASSTLPP := UDCLASSTLPP():New()
UDCLASSTLPP():updateStatic()
oUDCLASSTLPP:Alert( 'Minha Mensagem' )
// oUDCLASSTLPP:updateLogGR() //Erro, pois é private
Return(Nil)
/*/{Protheus.doc} UDCLASSTLPP
Classe generica. Funções para usos diversos..
@type class
/*/
Class UDCLASSTLPP
Public Method New() Constructor
Public Method Alert( cMen, cTit )
Private Method updateLogGR()
Protected Method updateTable()
Static Method updateStatic()
EndClass
/*/{Protheus.doc} New
Método New
/*/
Method New() Class UDCLASSTLPP
Return( Self )
/*/{Protheus.doc} Alert
Mostra mensagem
/*/
Method Alert( cMen, cTit ) Class UDCLASSTLPP
Default cMen := ''
Default cTit := 'Universo do Desenvolvedor'
::updateLogGR()
::updateTable()
MsgAlert(cMen,cTit)
Return( Nil )
/*/{Protheus.doc} updateLogGR
Atualiza logs (private)
/*/
Method updateLogGR() Class UDCLASSTLPP
conout('atualizando loggr')
Return( Nil )
/*/{Protheus.doc} updateTable
Atualiza tabela (protected)
/*/
Method updateTable() Class UDCLASSTLPP
conout('atualizando updateTable')
Return( Nil )
/*/{Protheus.doc} updateStatic
Atualiza logs (static)
/*/
Method updateStatic() Class UDCLASSTLPP
conout('atualizando static logs')
Return( Nil )
Com esses exemplos, fica claro como a chegada do TLPP tornou o desenvolvimento mais modular, moderno e seguro. Dá até gosto programar! 😎
Gostou? Compartilhe com seus amigos e deixe um comentário!
Um abraço, e até a próxima! 👋
#advpl #tlpp #totvs #protheus #classesadvpl #orientacaoaobjetos #frameworktotvs #desenvolvimentototvs #universodesenvolvedor