Clipper On Line • Ver Tópico - Métodos estáticos em Harbour

Métodos estáticos em Harbour

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

Moderador: Moderadores

 

Métodos estáticos em Harbour

Mensagempor André Corrêa » 10 Mai 2019 13:23

Boa tarde,

Existe algum meio de criar ou simular em Harbour o conceito de MÉTODO ESTÁTICO?
Em outras linguagens, usa-se esse modificador para indicar que um método pertence à CLASSE e não à variável de instância.
Isso permite acessá-lo sem a necessidade de instanciar um objeto dessa classe.
Pesquisei e testei bastante, mas não encontrei nada a respeito em Harbour.

Obrigado,
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar de usuário

André Corrêa
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 81
Data de registro: 03 Nov 2015 06:46
Cidade/Estado: Caraguatatuba/SP
Curtiu: 8 vezes
Mens.Curtidas: 3 vezes

Métodos estáticos em Harbour

Mensagempor asimoes » 10 Mai 2019 13:35

►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Métodos estáticos em Harbour

Mensagempor André Corrêa » 10 Mai 2019 14:56

asimoes,

Agradeço pelo link, mas já tinha lido essa documentação, assim como as dos sites abaixo, mas não encontrei nada a respeito dos
métodos estáticos, será que deixei passar algo?

https://www.kresin.ru/en/manuals.html
http://harbourlanguage.blogspot.com/
http://www.marinas-gui.org/projects/harbour_manual/
https://harbour.github.io/doc/
https://vivaclipper.wordpress.com/?s=harbour

Alguém poderia explicar ou confirmar se existe a possibilidade de criar um método estático em Harbour?

Obrigado,
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar de usuário

André Corrêa
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 81
Data de registro: 03 Nov 2015 06:46
Cidade/Estado: Caraguatatuba/SP
Curtiu: 8 vezes
Mens.Curtidas: 3 vezes

Métodos estáticos em Harbour

Mensagempor André Corrêa » 10 Mai 2019 15:49

A solução é mais simples do que havia pensado e não utiliza o modificador STATIC.
Basta declarar o método com escopo público e acessá-lo usando o nome da classe, com parêntesis, conforme abaixo.

CLASS TMyClass

  PUBLIC:
    METHOD meuMetodo()

ENDCLASS

METHOD meuMetodo() CLASS TMyClass
RETURN "MÉTODO ESTÁTICO"

// para chamar o método sem instanciar a classe
TMyClass():meuMetodo()
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar de usuário

André Corrêa
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 81
Data de registro: 03 Nov 2015 06:46
Cidade/Estado: Caraguatatuba/SP
Curtiu: 8 vezes
Mens.Curtidas: 3 vezes

Métodos estáticos em Harbour

Mensagempor JoséQuintas » 10 Mai 2019 18:56

Pergunta estranha.... rs

Isso é normal de qualquer classe, nem precisa declarar público.
De forma reduzida:

CREATE CLASS Test
   METHOD Nome() INLINE "Qualquer"
   END CLASS

? Test: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

Métodos estáticos em Harbour

Mensagempor André Corrêa » 13 Mai 2019 11:48

Quintas,

No momento da dúvida, nenhuma pergunta é estranha. Não vim "de mãos vazias",
já tinha pesquisado, só não estava olhando pelo prisma correto para a questão.
Estou voltando a estudar orientação a objetos com Harbour e não me lembrei da
forma correta de chamar o método sem precisar instanciar a classe.
Em outras linguagens, geralmente, é necessário declarar a classe como estática.
Quanto a não precisar do PUBLIC, entendo que é devido a ser o escopo padrão.

De qualquer forma, se chamo assim, não funciona:
TMinhaClasse:MeuMetodo()


E assim funciona:
TMinhaClasse():MeuMetodo()


Talvez seja uma particularidade da IDE.

Obrigado pelos retornos.
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar de usuário

André Corrêa
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 81
Data de registro: 03 Nov 2015 06:46
Cidade/Estado: Caraguatatuba/SP
Curtiu: 8 vezes
Mens.Curtidas: 3 vezes

Métodos estáticos em Harbour

Mensagempor JoséQuintas » 13 Mai 2019 14:21

TMinhaClasse:MeuMetodo()

Isso dá erro porque isso indica a variável TMinhaClasse.

TMinhaClasse()

Isso funciona, porque TMinhaClasse() é o nome da classe, e é o que retorna a classe construída e pronta pra uso.
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

Métodos estáticos em Harbour

Mensagempor André Corrêa » 13 Mai 2019 15:09

JoséQuintas escreveu:TMinhaClasse:MeuMetodo()

Isso dá erro porque isso indica a variável TMinhaClasse.

TMinhaClasse()

Isso funciona, porque TMinhaClasse() é o nome da classe, e é o que retorna a classe construída e pronta pra uso.


Entendi. É que no seu exemplo, ficou Test:Nome(), achei que funcionasse dessa forma aí pra você.
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar de usuário

André Corrêa
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 81
Data de registro: 03 Nov 2015 06:46
Cidade/Estado: Caraguatatuba/SP
Curtiu: 8 vezes
Mens.Curtidas: 3 vezes

Métodos estáticos em Harbour

Mensagempor JoséQuintas » 13 Mai 2019 15:25

André Corrêa escreveu:Entendi. É que no seu exemplo, ficou Test:Nome(), achei que funcionasse dessa forma aí pra você.


Realmente, meu exemplo tava errado.
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




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 8 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