Clipper On Line • Ver Tópico - Classes - Harbour - > Declaracao de variaveis.

Classes - Harbour - > Declaracao de variaveis.

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

Moderador: Moderadores

 

Classes - Harbour - > Declaracao de variaveis.

Mensagempor mateus301 » 01 Set 2012 00:38

Ola, hoje pela orientação a objetos no harbour temos varios tipois de declaraçoes de variaveis... Segue um exemplo :
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
mateus301
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 15
Data de registro: 24 Mar 2012 12:47
Cidade/Estado: marialva/pr
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Classes - Harbour - > Declaracao de variaveis.

Mensagempor alxsts » 01 Set 2012 02:49

Olá!

Não testei. Teste:
VAR oTela AS HBObject():New()
HBObject() é a classe base de todas as classes.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Classes - Harbour - > Declaracao de variaveis.

Mensagempor Imatech » 01 Set 2012 11:42

Olá mateus301, alxsts !
.
.
.
Por favor, estudem o exemplo abaixo:
.
.
.
..\tests\clsdata.prg

/*
* $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
Avatar de usuário

Imatech
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 350
Data de registro: 24 Ago 2010 23:48
Cidade/Estado: Goiânia-GO
Curtiu: 4 vezes
Mens.Curtidas: 27 vezes

Classes - Harbour - > Declaracao de variaveis.

Mensagempor mateus301 » 01 Set 2012 17:02

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.
mateus301
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 15
Data de registro: 24 Mar 2012 12:47
Cidade/Estado: marialva/pr
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Classes - Harbour - > Declaracao de variaveis.

Mensagempor JoséQuintas » 01 Set 2012 19:16

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, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classes - Harbour - > Declaracao de variaveis.

Mensagempor alxsts » 09 Mar 2020 18:51

Olá!

O tempo passa mas ensina. Creio que a resposta esperada era
 VAR oTela INIT TAlgumaClasse():New()
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Classes - Harbour - > Declaracao de variaveis.

Mensagempor bencz » 10 Mar 2020 08:37

CLASS Usuario

PUBLIC:
   METHOD NEW() CONSTRUCTOR

   // ........
   VAR oTela INIT NIL
   
ENDCLASS

METHOD NEW() CLASS USUARIO
   ::oTELA := ClasseTela():New()
RETURN SELF
Imagem
Avatar de usuário

bencz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 517
Data de registro: 28 Abr 2012 17:36
Curtiu: 6 vezes
Mens.Curtidas: 34 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro