Métodos estáticos em Harbour

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

Moderador: Moderadores

Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Métodos estáticos em Harbour

Mensagem por André Corrêa »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Métodos estáticos em Harbour

Mensagem por asimoes »

►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 do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Métodos estáticos em Harbour

Mensagem por André Corrêa »

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 do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Métodos estáticos em Harbour

Mensagem por André Corrêa »

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.

Código: Selecionar todos

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

Métodos estáticos em Harbour

Mensagem por JoséQuintas »

Pergunta estranha.... rs

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

Código: Selecionar todos

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

? Test: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/
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Métodos estáticos em Harbour

Mensagem por André Corrêa »

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:

Código: Selecionar todos

TMinhaClasse:MeuMetodo()
E assim funciona:

Código: Selecionar todos

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

Métodos estáticos em Harbour

Mensagem por JoséQuintas »

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 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/
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Métodos estáticos em Harbour

Mensagem por André Corrêa »

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

Métodos estáticos em Harbour

Mensagem por JoséQuintas »

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 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/
Responder