Classes - Harbour - > Declaracao de variaveis.

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

mateus301
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 24 Mar 2012 12:47
Localização: marialva/pr

Classes - Harbour - > Declaracao de variaveis.

Mensagem 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
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Classes - Harbour - > Declaracao de variaveis.

Mensagem por alxsts »

Olá!

Não testei. Teste:

Código: Selecionar todos

VAR oTela AS HBObject():New()
HBObject() é a classe base de todas as classes.
[]´s
Alexandre Santos (AlxSts)
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Classes - Harbour - > Declaracao de variaveis.

Mensagem 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 !
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
mateus301
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 24 Mar 2012 12:47
Localização: marialva/pr

Classes - Harbour - > Declaracao de variaveis.

Mensagem 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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Classes - Harbour - > Declaracao de variaveis.

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Classes - Harbour - > Declaracao de variaveis.

Mensagem por alxsts »

Olá!

O tempo passa mas ensina. Creio que a resposta esperada era

Código: Selecionar todos

 VAR oTela INIT TAlgumaClasse():New()
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Classes - Harbour - > Declaracao de variaveis.

Mensagem 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
Imagem
Responder