Olá a todos da lista, já desenvolvi em clipper a uns bons 15 anos atrás, após isto migrei para o Visual Foxpro e tenho uma serie de sistemas que precisarei migrar, agora que a Microsoft resolveu descontinuar a linguagem e a compatibilidade com o Windows.
Como qualquer programador eu não gosto da perspectiva de refazer o que já fiz, mas, já que vou precisar (re)fazer de qualquer jeito, pretendo fazer as coisas do jeito certo.
Estou começando a descobrir o harbour agora, e bastante animado com a possibilidade de poder criar minhas próprias classes com o hbclass.ch e utilizar bibliotecas gráficas multiplataforma como hbQt. Tenho feito diversos testes antes de começar qualquer coisa, e estou precisando de uma ajudinha no que se refere a sintaxe e as possibilidades das classes que posso criar com o hbclass.ch:
1) Como criar propriedades estáticas? Por exemplo, digamos que eu tenha uma classe que herda da QDialog, e quero adicionar um contador estático para saber quantos dialogos eu tenho abertos, como é a sintaxe para declarar um contador destes dentro da classe?
2) Propriedades protected e private. Em meus testes, a sintaxe
CLASS minhaClasse
PRIVATE:
DATA minhaPropriedadePrivada
ENDCLASS
não compilou, porém, é a mesma sintaxe que encontrei em diversos exemplos aqui do fórum e em outros locais, estou fazendo alguma coisa errada?
3)Existe alguma coisa semelhante ao instanceOf do php5 em harbour? Em algumas ocasiões, principalmente para melhor debugar é interessante saber que tipo de instancia está sendo usada, porém até o momento, estou colocando um método getClassName() em cada classe que faço. Existe um meio melhor?
4) Herança multipla / Interfaces - O harbour possui suporte a herança multipla? Na pratica não devo utilizar muito este recurso, mas, em alguns casos evita bastante cópia de bloco. E como o C++ permite, e o harbour gera código C antes de fazer o executável, achei conveniente levantar a dúvida...
5) Antigamente, eu escrevia um códigozinho mandraque em C, e linkava o obj no meu executável. Sei que isto também é possível em harbour provavelmente até melhor do que no saudoso clipper, eu posso criar classes diretamente em C++ e de alguma maneira simples utilizá-las em meus PRGs? Ou isto funciona apenas para funções?
6) Já existe alguma coisa pronta em harbour para facilitar o uso de patterns como o MVC ou então a abstração da base dados (algo semelhante ao hibernate do java)?
É isto ai, desculpe o texto longo e muito obrigado a todos que puderem dispensar algum tempo nisto.
Um grande abraço
=NuNuNO==
( Que teve medo de criar um tópico para cada pergunta, então colocou tudo num lugar só)
Orientação a Objetos em Harbour
Moderador: Moderadores
-
=NuNuNO= Griesbach
- Usuário Nível 1

- Mensagens: 12
- Registrado em: 10 Fev 2011 18:18
- Localização: Curitiba/PR
- Contato:
-
=NuNuNO= Griesbach
- Usuário Nível 1

- Mensagens: 12
- Registrado em: 10 Fev 2011 18:18
- Localização: Curitiba/PR
- Contato:
Re: Orientação a Objetos em Harbour
Olá novamente,
É com grande prazer que anuncio que a simples leitura da hbclass e algumas horinhas de tentativa e erro já me deram algumas das respostas, que irei postar para talvez ajudar alguém que também esteja começando, e pra matar a curiosidade alguém que por ventura também se interesse por OO.
1) Propriedades estáticas: Não é muito bonito, mas me atendeu perfeitamente. A variável é declarada estática no escopo do método, então ela nunca perde seu valor e todas as instâncias da mesma classe podem acessa-la.
2) Escopo dentro da classe: Minha confusão foi com os termos, não existe PRIVATE em [x]harbour, e sim HIDDEN. Descobri que posso declarar métodos e variaveis com os seguintes alteradores de escopo:
HIDDEN : Visíveis apenas para a classe que os declara, e não para classes filhas
PROTECTED: Visíveis para a classe que os declara e também para as classes filhas
EXPORTED: Visivel para todo mundo que pode acessar a classe
3) Funções de casting em tempo de execução: Todas as classes herdam automaticamente de HBOBJECT, que por sua vez implementa os métodos className() e isKindOf que permitem em tempo de execução saber quem são as instâncias.
4) Herança multipla: Sim, basta na clausula INHERIT separar o nome das classes por virgula.
5) Usar classes C++ dentro do PRG: Ainda não tentei, mas, se o QT faz, tem jeito.
6) Abstração de base de dados, e modelos para MVC. Não achei nada do genero já existente, estou implementando meu "hibernate de pobre" e meu "MVC de pobre" para entre outras coisas me ambientar com a sintaxe. Se algum deles ficar/parecer útil posso disponibiliza-lo sem problemas.
Um grande abraço
=NuNuNO==
( Que não teria abandonado o Clipper se ele tivesse estes recursos a 15 anos atrás... )
É com grande prazer que anuncio que a simples leitura da hbclass e algumas horinhas de tentativa e erro já me deram algumas das respostas, que irei postar para talvez ajudar alguém que também esteja começando, e pra matar a curiosidade alguém que por ventura também se interesse por OO.
1) Propriedades estáticas: Não é muito bonito, mas me atendeu perfeitamente. A variável é declarada estática no escopo do método, então ela nunca perde seu valor e todas as instâncias da mesma classe podem acessa-la.
Código: Selecionar todos
METHOD _staticContador(action, value) CLASS estatico
STATIC contador := 0
if(action == 'set')
contador := value
endif
RETURN contador
HIDDEN : Visíveis apenas para a classe que os declara, e não para classes filhas
PROTECTED: Visíveis para a classe que os declara e também para as classes filhas
EXPORTED: Visivel para todo mundo que pode acessar a classe
3) Funções de casting em tempo de execução: Todas as classes herdam automaticamente de HBOBJECT, que por sua vez implementa os métodos className() e isKindOf que permitem em tempo de execução saber quem são as instâncias.
4) Herança multipla: Sim, basta na clausula INHERIT separar o nome das classes por virgula.
5) Usar classes C++ dentro do PRG: Ainda não tentei, mas, se o QT faz, tem jeito.
6) Abstração de base de dados, e modelos para MVC. Não achei nada do genero já existente, estou implementando meu "hibernate de pobre" e meu "MVC de pobre" para entre outras coisas me ambientar com a sintaxe. Se algum deles ficar/parecer útil posso disponibiliza-lo sem problemas.
Um grande abraço
=NuNuNO==
( Que não teria abandonado o Clipper se ele tivesse estes recursos a 15 anos atrás... )
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Orientação a Objetos em Harbour
Olá!
Quanto ao item 5 acima, pode-se incluir no código fonte [x]Harbour código fonte escrito em C++. Basta inclur entre as diretivasPara ler um tópico básico e didático que ilustra o uso de OOP em [x]Harbour, clique aqui.
Quanto ao item 5 acima, pode-se incluir no código fonte [x]Harbour código fonte escrito em C++. Basta inclur entre as diretivas
Código: Selecionar todos
#pragma BEGINDUMP
// código fonte escrito em C
#pragma ENDDUMP
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
Re: Orientação a Objetos em Harbour
C e/ou C++? Tem uma grande diferença entre as duas.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
=NuNuNO= Griesbach
- Usuário Nível 1

- Mensagens: 12
- Registrado em: 10 Fev 2011 18:18
- Localização: Curitiba/PR
- Contato:
Re: Orientação a Objetos em Harbour
Fiz alguns testes rápidos, e o C ansi compila numa boa, o C++ infelizmente não... Ele parece nem reconhecer a declaração class...
porem tentando com o cout << "eu sou o cout" << endl; ele não compilou, não encontrou a iostream...
Talvez isto seja contornável, amanhã vou tentar com um pouco mais de persuasão (definindo path de include e talvez alguma lib padrão do mingw)...
Um grande abraço
=NuNuNO==
( Que está muito agradecido pelo tópico básico e didatico e o lerá com carinho )
Código: Selecionar todos
FUNCTION testeCpp()
RETURN testCpp()
#pragma BEGINDUMP
#include "hbapi.h"
#include <stdio.h>
HB_FUNC( TESTCPP )
{
printf("eu sou um printf ");
}
#pragma ENDDUMP
Talvez isto seja contornável, amanhã vou tentar com um pouco mais de persuasão (definindo path de include e talvez alguma lib padrão do mingw)...
Um grande abraço
=NuNuNO==
( Que está muito agradecido pelo tópico básico e didatico e o lerá com carinho )
- mhackervix
- Usuário Nível 3

- Mensagens: 105
- Registrado em: 11 Fev 2008 02:06
- Localização: ES
Orientação a Objetos em Harbour
No Xailer (IDE para [x]Habour) tem as Classes TDataSource, TDataSet, TField, etc... que implementam uma abstração de base de dados no [x]Habour.=NuNuNO= Griesbach escreveu:6) Já existe alguma coisa pronta em harbour para facilitar o uso de patterns como o MVC ou então a abstração da base dados (algo semelhante ao hibernate do java)?
att.
Mhackervix, Msc.
