Página 1 de 1
Classes - Harbour - > Declaracao de variaveis.
Enviado: 01 Set 2012 00:38
por mateus301
Ola, hoje pela orientação a objetos no harbour temos varios tipois de declaraçoes de variaveis... Segue um exemplo :
Código: Selecionar todos
CLASS Usuario
EXPORTED:
VAR cName AS STRING INIT Space( 10 )
METHOD Login()
HIDDEN:
METHOD DigitaSenha()
METHOD SenhaInvalida()
METHOD CadastraUserNew()
METHOD GravaNovoUsuario()
METHOD setNome()
METHOD MostraNomeDoUsuario()
VAR cSenha AS STRING INIT Space( 0 )
VAR nCodigo AS NUMERIC INIT 0
VAR aArray AS ARRAY INIT {}
// VAR oTela AS OBJECT ?????????
ENDCLASS
como perceberam a parte comentada do codigo "VAR oTela AS OBJECT

??????"... gostaria de saber como posso declarar meu objetos, do mesmo jeito que declaro os array e numericos no escopo da classe.
Nao esta dando problema isso porque o harbour aceita q eu nao coloque o tipo mas é uma duvida que esta me matando. VLW
Classes - Harbour - > Declaracao de variaveis.
Enviado: 01 Set 2012 02:49
por alxsts
Olá!
Não testei. Teste:
HBObject() é a classe base de todas as classes.
Classes - Harbour - > Declaracao de variaveis.
Enviado: 01 Set 2012 11:42
por Imatech
Olá mateus301, alxsts !
.
.
.
Por favor, estudem o exemplo abaixo:
.
.
.
..\tests\clsdata.prg
Código: Selecionar todos
/*
* $Id: clsdata.prg 17835 2012-07-18 13:41:31Z vszakats $
*/
PROCEDURE Main()
LOCAL o := HBObject():New()
QOut( "o:Data1 => ", o:Data1 )
QOut( "o:ClassData1 => ", o:ClassData1 )
QOut( "o:Data2 => ", o:Data2 )
QOut( "o:ClassData2 => ", o:ClassData2 )
o:Test()
RETURN
FUNCTION TBaseObject()
STATIC oClass
IF oClass == NIL
oClass := HBClass():New( "TBaseObject" )
oClass:AddData( "Data1" )
oClass:AddClassData( "ClassData1" )
oClass:AddMethod( "NewBase", @NewBase() )
oClass:AddMethod( "Test", @Test() )
oClass:AddMethod( "Method1", @Method1Base() )
oClass:AddMethod( "Method2", @Method2Base() )
oClass:Create()
ENDIF
RETURN oClass:Instance()
STATIC FUNCTION NewBase()
LOCAL self := QSelf()
::Data1 := 1
::ClassData1 := "A"
RETURN self
STATIC FUNCTION Test()
LOCAL self := QSelf()
QOut( "Inside ::Test() " )
QOut( "calling ::Method1() " )
::Method1()
RETURN self
STATIC FUNCTION Method1Base()
LOCAL self := QSelf()
QOut( "I am Method1 from TBaseObject" )
::Method2()
RETURN self
STATIC FUNCTION Method2Base()
LOCAL self := QSelf()
QOut( "I am Method2 from TBaseObject" )
RETURN self
FUNCTION HBObject()
STATIC oClass
IF oClass == NIL
oClass := HBClass():New( "HBObject", "TBaseObject" )
oClass:AddData( "Data2" )
oClass:AddClassData( "ClassData2" )
oClass:AddMethod( "New", @New() )
oClass:AddMethod( "Method1", @Method1() )
oClass:AddMethod( "Method2", @Method2() )
oClass:Create()
ENDIF
RETURN oClass:Instance()
STATIC FUNCTION New()
LOCAL self := QSelf()
::TBaseObject:NewBase()
::Data1 := 1
::ClassData1 := "A"
::Data2 := 2
// ClassData2 override ClassData1
::ClassData2 := "B"
RETURN self
STATIC FUNCTION Method1()
LOCAL self := QSelf()
QOut( "I am Method1 from HBObject" )
::TBaseObject:Method1()
RETURN self
STATIC FUNCTION Method2()
LOCAL self := QSelf()
QOut( "I am Method2 from HBObject" )
RETURN self
Olá mateus301, alxsts !
Classes - Harbour - > Declaracao de variaveis.
Enviado: 01 Set 2012 17:02
por mateus301
Ola alxsts e Imatech ! Primeiramente quero agradecer pelas respostas.
alxsts , tentei oq vc disse, mas infelizmente nao obtive sucesso, nem compilou. XD
Imatech, analisei o codigo que voce colocou ai, mas nao achei a resposta que estava procurando. Percebi que isso é como o harbour trata a HBObject().
Aguardo a ajuda de voces Obrigado.
Classes - Harbour - > Declaracao de variaveis.
Enviado: 01 Set 2012 19:16
por JoséQuintas
Também briguei um pouco com isso, mas acabei adotando o New(). Motivos:
- Não dá pra criar uma classe de objetos diretamente em inicialização
- Fica fácil identificar o uso de uma classe. Se procurar nos fontes :New() vai encontrar facilmente a criação (apesar que não pode existir uma classe e uma função com nomes iguais)
- E pra ficar usando cada vez de um jeito, melhor usar sempre de um jeito só: New() que sempre funciona
Já vi em alguns fontes Initialize() ou algo assim, não sei se houve alguma mudança pra pegar automático com este nome.
Classes - Harbour - > Declaracao de variaveis.
Enviado: 09 Mar 2020 18:51
por alxsts
Olá!
O tempo passa mas ensina. Creio que a resposta esperada era
Classes - Harbour - > Declaracao de variaveis.
Enviado: 10 Mar 2020 08:37
por bencz
Código: Selecionar todos
CLASS Usuario
PUBLIC:
METHOD NEW() CONSTRUCTOR
// ........
VAR oTela INIT NIL
ENDCLASS
METHOD NEW() CLASS USUARIO
::oTELA := ClasseTela():New()
RETURN SELF