TLPP - LANGUAGE
Enquanto AdvPL padrão mantém, incondicionalmente, todas as propriedades e métodos com acesso público, TLPP permite trabalhar com os escopos private, protected ou public.
Esse avanço é de extrema importância, pois trabalha o conceito de encapsulamento tal qual importantes linguagens modernas de mercado.
Esse avanço é de extrema importância, pois trabalha o conceito de encapsulamento tal qual importantes linguagens modernas de mercado.
Os níveis de modificadores são:
| níveis | descrição conceitual |
|---|---|
| PRIVATE | O método ou a propriedade estarão acessíveis apenas dentro do escopo da sua classe. |
| PROTECTED | O método ou a propriedade estarão acessíveis apenas dentro do escopo da sua classe e também no escopo das classes herdadas dela. |
| PUBLIC | O método ou a propriedade estarão acessíveis de qualquer lugar, sejam funções ou classes sem relação de herança. |
Caso não seja informado, ficará assumido o escopo PRIVATE como padrão.
E esse quadro resume os acessos permitidos:
| Modificador | Dentro da Classe | Classes Filhas (Herança) | Outras classes | Funções diversas |
public | ✅ Sim | ✅ Sim | ✅ Sim | ✅ Sim |
protected | ✅ Sim | ✅ Sim | ❌ Não | ❌ Não |
private | ✅ Sim | ❌ Não | ❌ Não | ❌ Não |
Exemplo
#include "tlpp-core.th"
Class EscopeMethod
private data oComp1
public data oComp2
protected data oComp3
data oComp4
public method new()
private method teste1()
public method teste2()
protected method teste3()
EndClass
Method new() class EscopeMethod
return self
method teste1() class EscopeMethod
conout("teste1")
Return self
Method teste2() class EscopeMethod
self:oComp1 := 1
self:oComp2 := 2
self:oComp3 := 3
self:teste1()
conout("teste2")
self:teste3()
Return self
Method teste3() class EscopeMethod
conout("teste3")
return self
Function U_Escope
Local myObj := EscopeMethod():New()
myObj:oComp2 := 2
Conout("myObj:oComp2", myObj:oComp2)
/*
myObj:oComp1 := 1
conout("myObj:oComp1", myObj:oComp1)
*/ //não é possível descomentar esse trecho de código pois o atributo oComp1 é private e causará um erro de execução.
/*
myObj:oComp3 := 3
conout("myObj:oComp3", myObj:oComp3)
*/ //não é possível descomentar esse trecho de código pois o atributo oComp3 é protected e causará um erro de execução.
//myObj:teste1() - não é possível descomentar esse trecho de código pois o método teste1 é private e causará um erro de execução.
myObj:teste2()
//myObj:teste3() - não é possível descomentar esse trecho de código pois o método teste3 é protected e causará um erro de execução.
return
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas