Como é a orientação a objeto no Harbour
Moderador: Moderadores
-
Jorge Luiz
- Usuário Nível 1

- Mensagens: 36
- Registrado em: 08 Jul 2024 20:23
- Localização: Piauí
Como é a orientação a objeto no Harbour
Como é a orientação a objeto no Harbour
O arquivo que quero inserir a orientação a objeto está logo abaixo
https://iatagancursos.github.io/Megusta ... do/prg.zip
O arquivo que quero inserir a orientação a objeto está logo abaixo
https://iatagancursos.github.io/Megusta ... do/prg.zip
-
Jorge Luiz
- Usuário Nível 1

- Mensagens: 36
- Registrado em: 08 Jul 2024 20:23
- Localização: Piauí
Re: Como é a orientação a objeto no Harbour
Queria que meu código Harbour fosse Orientado a Objeto
Tem como?
Tem como?
-
Jorge Luiz
- Usuário Nível 1

- Mensagens: 36
- Registrado em: 08 Jul 2024 20:23
- Localização: Piauí
- JoséQuintas
- Administrador

- Mensagens: 20525
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 2 vezes
Re: Como é a orientação a objeto no Harbour
Acho que não é assim que funciona, não é mudar qualquer fonte pra objeto.
OS FONTES atuais já estão confusos, parece duplicação, e com análises não necessárias, pra não dizer coisa errada.
O endereço sugere se tratar de alguém criando apostilas pra ensinar alguma coisa, o que não é incentivador.
A princípio vai precisar de muito tempo, sem vantagem aparente.
Acho que exageraram no suposto exemplo, o que deixa na dúvida a finalidade.
OS FONTES atuais já estão confusos, parece duplicação, e com análises não necessárias, pra não dizer coisa errada.
O endereço sugere se tratar de alguém criando apostilas pra ensinar alguma coisa, o que não é incentivador.
A princípio vai precisar de muito tempo, sem vantagem aparente.
Acho que exageraram no suposto exemplo, o que deixa na dúvida a finalidade.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
-
Jorge Luiz
- Usuário Nível 1

- Mensagens: 36
- Registrado em: 08 Jul 2024 20:23
- Localização: Piauí
Re: Como é a orientação a objeto no Harbour
Estou criando o Megusta
União das linguagens de programação Java, Javascript, Typescript, Node.js, PHP, Python, Clipper, Rust, C/C++, ASSEMBLY e WebAssembly.
Veja o código no Github
https://iatagancursos.github.io/Megusta ... cipal.html
União das linguagens de programação Java, Javascript, Typescript, Node.js, PHP, Python, Clipper, Rust, C/C++, ASSEMBLY e WebAssembly.
Veja o código no Github
https://iatagancursos.github.io/Megusta ... cipal.html
-
Jorge Luiz
- Usuário Nível 1

- Mensagens: 36
- Registrado em: 08 Jul 2024 20:23
- Localização: Piauí
Re: Como é a orientação a objeto no Harbour
Apoie meu trabalho Open Source 

https://github.com/sponsors/iataganCursos

Ajude a manter projetos abertos e cursos gratuitos!

Seu apoio fortalece o ecossistema Open Source
Contribua para o desenvolvimento contínuo

Incentive a produção de conteúdo educacional livre

Apoie iniciativas que democratizam o conhecimento

Faça parte dessa missão colaborativa

Cada contribuição conta para o futuro

Obrigado por apoiar projetos abertos e educação gratuita

Curso Gratuito de Programação, Eletrônica e Robótica
https://ouka.com.br/
Aprenda programação e robótica totalmente grátis!

Entre no grupo do Telegram
https://t.me/+nge23AaS2jFkOGMx
Participe das discussões, tire dúvidas e compartilhe conhecimento.

Cursinho Pré-vestibular Comunitário
https://iatagan.com.br/
Prepare-se para o vestibular com apoio gratuito e solidário.

Sabia que o tempo não é retilíneo e sim aleatório?
https://teoriadotempo.blogspot.com/
Reflexões sobre o tempo, física e filosofia.

Minha experiência com Burnout e Computação
https://jorgeia.blogspot.com/
Como o estudo intenso de programação me levou ao limite — e o que aprendi com isso.

Livro publicado na Uiclap
https://loja.uiclap.com/titulo/ua56735/
De R$61,38 por R$48,59!
Explore ideias sobre tecnologia, filosofia e sociedade.
https://github.com/sponsors/iataganCursos
Ajude a manter projetos abertos e cursos gratuitos!
Seu apoio fortalece o ecossistema Open Source
Contribua para o desenvolvimento contínuo
Incentive a produção de conteúdo educacional livre
Apoie iniciativas que democratizam o conhecimento
Faça parte dessa missão colaborativa
Cada contribuição conta para o futuro
Obrigado por apoiar projetos abertos e educação gratuita
Aprenda programação e robótica totalmente grátis!
Participe das discussões, tire dúvidas e compartilhe conhecimento.
Prepare-se para o vestibular com apoio gratuito e solidário.
Reflexões sobre o tempo, física e filosofia.
Como o estudo intenso de programação me levou ao limite — e o que aprendi com isso.
-
Jorge Luiz
- Usuário Nível 1

- Mensagens: 36
- Registrado em: 08 Jul 2024 20:23
- Localização: Piauí
-
Jorge Luiz
- Usuário Nível 1

- Mensagens: 36
- Registrado em: 08 Jul 2024 20:23
- Localização: Piauí
Re: Como é a orientação a objeto no Harbour
JoséQuintas
Você entendeu o que quero fazer?
Deixa pra lá!
Estou vendo que não existe Orientação a Objeto no Clipper / Harbour
Você entendeu o que quero fazer?
Deixa pra lá!
Estou vendo que não existe Orientação a Objeto no Clipper / Harbour
-
alxsts
- Colaborador

- Mensagens: 3169
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
- Curtiram: 5 vezes
Re: Como é a orientação a objeto no Harbour
Olá!
Creio que a melhor resposta para a questão do título do tópico é: pesquise, estude, teste.
Se tivesse feito isto, não teria escrito:
Tutorial OOP Harbour Classes
Creio que a melhor resposta para a questão do título do tópico é: pesquise, estude, teste.
Se tivesse feito isto, não teria escrito:
Segue um texto gerado por IA, contendo Conceitos básicos:Jorge Luiz escreveu: 26 Jul 2026 15:48 Deixa pra lá!
Estou vendo que não existe Orientação a Objeto no Clipper / Harbour
Nota: nas versões do Clipper acima de 5.0, a OOP poderia ser aplicada, basicamente com a mesma sintaxe acima, utilizando-se a biblioteca Class(y).A programação orientada a objetos (POO) no Harbour é feita usando comandos próprios como CLASS e ENDCLASS para criar moldes, definir dados e criar funções que pertencem aos objetos.
A biblioteca nativa que gerencia a POO no Harbour é a HBClass. Ela permite criar sistemas modulares, reutilizáveis e fáceis de manter.
1. Estrutura Básica de uma Classe
Para definir uma classe, usamos os comandos CLASS e ENDCLASS. Dentro dela, definimos as características (DATA) e os comportamentos (METHOD).
Exemplo de Sintaxe:
2. Desenvolvendo os MétodosCódigo: Selecionar todos
#include "hbclass.ch" CLASS Cliente // Atributos (Variáveis da classe) DATA ID INIT 0 DATA Nome INIT "" DATA Saldo INIT 0.00 // Métodos (Funções da classe) METHOD New( nId, cNome ) CONSTRUCTOR METHOD Depositar( nValor ) METHOD VerSaldo() ENDCLASS
Os métodos declarados dentro da classe precisam ser desenvolvidos fora dela. Usamos a sintaxe METHOD NomeDoMetodo() CLASS NomeDaClasse.
Nota Importante:
Dentro do método, usamos a palavra-chave :: (que significa self:) para acessar as variáveis e métodos do próprio objeto.
3. Instanciando e Usando o ObjetoCódigo: Selecionar todos
// Método Construtor (Instancia o objeto) METHOD New( nId, cNome ) CLASS Cliente ::ID := nId ::Nome := cNome return Self // Método para alterar o saldo METHOD Depositar( nValor ) CLASS Cliente if nValor > 0 ::Saldo += nValor endif return NIL // Método para exibir informações METHOD VerSaldo() CLASS Cliente ? "Cliente:", ::Nome ? "Saldo Atual: R$", Transform( ::Saldo, "@E 999,999.99" ) return NIL
Para criar e utilizar o objeto no seu programa principal, usamos o operador : (dois pontos).
4. Encapsulamento (Controle de Acesso)Código: Selecionar todos
PROCEDURE Main() LOCAL oCliente // Criando uma nova instância da classe Cliente oCliente := Cliente():New( 101, "Carlos Andrade" ) // Executando os métodos oCliente:Depositar( 1500.50 ) oCliente:VerSaldo() // Acessando um dado diretamente (se for público) ? "ID do Cliente consultado diretamente:", oCliente:ID return
Por padrão, as variáveis DATA são públicas. Para proteger seus dados contra modificações diretas e indevidas, use as diretivas de visibilidade:
EXPORTED: (Padrão) Acessível por qualquer parte do programa.
PROTECTED: Acessível apenas pela própria classe e por suas subclasses (herança).
HIDDEN: Acessível estritamente apenas pela própria classe onde foi criada.
5. Herança (Reutilização de Código)Código: Selecionar todos
CLASS ContaBancaria PROTECTED: DATA NumeroConta DATA Saldo INIT 0 EXPORTED: METHOD New( cNumero ) CONSTRUCTOR METHOD ObterSaldo() ENDCLASS METHOD New( cNumero ) CLASS ContaBancaria ::NumeroConta := cNumero return Self METHOD ObterSaldo() CLASS ContaBancaria return ::Saldo // Programa externo
A herança permite que uma classe filha herde todas as características e métodos de uma classe pai (FROM).
6. Métodos Inline (Atalhos rápidos)Código: Selecionar todos
// Classe Pai CLASS Pessoa DATA Nome INIT "" DATA Email INIT "" ENDCLASS // Classe Filha que herda de Pessoa CLASS PessoaFisica FROM Pessoa DATA CPF INIT "" ENDCLASS PROCEDURE TesteHeranca() LOCAL oPF := PessoaFisica():New() // Atributos herdados da classe Pessoa oPF:Nome := "Maria Souza" oPF:Email := "maria@email.com" // Atributo exclusivo da classe PessoaFisica oPF:CPF := "123.456.789-00" return
Se o seu método executa apenas uma linha de comando simples, você não precisa desenvolvê-lo fora da classe. Pode criá-lo diretamente como INLINE.
Código: Selecionar todos
CLASS Calculadora // Método inline sem necessidade de bloco externo METHOD Somar( a, b ) INLINE ( a + b ) METHOD Subtrair( a, b ) INLINE ( a - b ) ENDCLASS
7. Polimorfismo (Sobrescrita de Métodos)
O polimorfismo acontece quando uma classe filha herda um método da classe pai, mas altera o comportamento dele para se adequar à sua própria realidade. No Harbour, basta redefinir o METHOD na classe filha com o mesmo nome e criar a nova lógica.
Exemplo Prático:
Sistema de Folha de Pagamento
Código: Selecionar todos
#include "hbclass.ch" // ----------------------------------------------------------- // CLASSE PAI: Funcionario // ----------------------------------------------------------- CLASS Funcionario DATA Nome INIT "" DATA SaldoBase INIT 0.00 METHOD New( cNome, nSal ) CONSTRUCTOR METHOD CalcularSalario() ENDCLASS METHOD New( cNome, nSal ) CLASS Funcionario ::Nome := cNome ::SaldoBase := nSal return Self METHOD CalcularSalario() CLASS Funcionario return ::SaldoBase // ----------------------------------------------------------- // CLASSE FILHA 1: Gerente (Ganha o salário base + bônus de 20%) // ----------------------------------------------------------- CLASS Gerente FROM Funcionario // Sobrescreve o método do Pai para aplicar o bônus METHOD CalcularSalario() ENDCLASS METHOD CalcularSalario() CLASS Gerente return ::SaldoBase * 1.20 // ----------------------------------------------------------- // CLASSE FILHA 2: Vendedor (Ganha salário base + comissão fixa) // ----------------------------------------------------------- CLASS Vendedor FROM Funcionario DATA Comissao INIT 500.00 // Sobrescreve o método do Pai para somar a comissão METHOD CalcularSalario() ENDCLASS METHOD CalcularSalario() CLASS Vendedor return ::SaldoBase + ::Comissao
Executando o Polimorfismo:
8. Exemplo Prático:Código: Selecionar todos
PROCEDURE Main() LOCAL oFunc1, oFunc2 oFunc1 := Gerente():New( "Alice Souza", 5000.00 ) oFunc2 := Vendedor():New( "Bruno Lima", 2000.00 ) // O mesmo método "CalcularSalario()" age de formas diferentes (Polimorfismo) ? "Salario da Gerente " + oFunc1:Nome + ": R$", oFunc1:CalcularSalario() // Retorna 6000.00 ? "Salario do Vendedor " + oFunc2:Nome + ": R$", oFunc2:CalcularSalario() // Retorna 2500.00 return
POO integrada com DBF (Banco de Dados)
Mapear tabelas de banco de dados (neste caso, arquivos .DBF) para objetos é um padrão de projeto muito eficiente conhecido como Data Mapper ou Active Record.
A classe abaixo gerencia a tabela PRODUTOS.DBF. Ela é responsável por abrir o arquivo, carregar os dados para a memória dentro do objeto, salvar alterações e fechar o arquivo de forma limpa.
9. Usando a Classe de Banco de Dados no Programa Principal:Código: Selecionar todos
#include "hbclass.ch" // ----------------------------------------------------------- // CLASSE: ProdutoDBF // ----------------------------------------------------------- CLASS ProdutoDBF // Atributos que espelham os campos do DBF DATA Codigo INIT 0 DATA Descricao INIT "" DATA Preco INIT 0.00 // Controle interno do arquivo PROTECTED: DATA AreaTrabalho INIT 0 EXPORTED: METHOD New() CONSTRUCTOR METHOD Localizar( nCodigo ) METHOD Salvar() METHOD Fechar() ENDCLASS // Construtor: Abre o banco de dados e guarda a área de trabalho METHOD New() CLASS ProdutoDBF // Se o DBF não existir, cria a estrutura básica if !File( "PRODUTOS.DBF" ) DbCreate( "PRODUTOS.DBF", { ; { "CODIGO" , "N", 6, 0 }, ; { "DESCRICAO", "C", 40, 0 }, ; { "PRECO" , "N", 10, 2 } ; } ) endif // Abre o arquivo de forma compartilhada USE PRODUTOS SHARED NEW ::AreaTrabalho := Select() // Guarda o ponteiro desta tabela return Self // Busca um produto pelo código e carrega para as variáveis do objeto METHOD Localizar( nCodigo ) CLASS ProdutoDBF LOCAL lAchou := .F. Select( ::AreaTrabalho ) LOCATE FOR field->CODIGO == nCodigo if Found() ::Codigo := field->CODIGO ::Descricao := field->DESCRICAO ::Preco := field->PRECO lAchou := .T. else ::Codigo := nCodigo ::Descricao := "PRODUTO NAO ENCONTRADO" ::Preco := 0.00 endif return lAchou // Salva os dados atuais do objeto de volta no arquivo DBF METHOD Salvar() CLASS ProdutoDBF Select( ::AreaTrabalho ) // Tenta localizar para atualizar, se não achar, cria um registro novo LOCATE FOR field->CODIGO == ::Codigo if !Found() APPEND BLANK endif // Bloqueia o registro para gravação segura (padrão de rede) if RLock() field->CODIGO := ::Codigo field->DESCRICAO := ::Descricao field->PRECO := ::Preco DbUnlock() ? "Dados gravados com sucesso no DBF!" else ? "Erro: Registro travado por outro usuario." endif return NIL // Fecha o arquivo DBF de forma segura ao encerrar o objeto METHOD Fechar() CLASS ProdutoDBF Select( ::AreaTrabalho ) USE return NIL
Código: Selecionar todos
PROCEDURE Main() LOCAL oProd // 1. Inicializa o objeto (abre o banco de dados por baixo dos panos) oProd := ProdutoDBF():New() // 2. Criando e salvando um novo produto oProd:Codigo := 10 oProd:Descricao := "Teclado Mecanico RGB" oProd:Preco := 249.90 oProd:Salvar() // 3. Modificando os dados em memória e salvando a alteração oProd:Preco := 229.00 // Aplicando um desconto oProd:Salvar() // 4. Consultando outro produto para testar a busca ? "--- Testando Busca ---" if oProd:Localizar( 10 ) ? "Codigo encontrado:", oProd:Codigo ? "Nome do Produto: ", oProd:Descricao ? "Preco de Venda: R$", oProd:Preco endif // 5. Fecha os arquivos de dados abertos pelo objeto oProd:Fechar() return
Tutorial OOP Harbour Classes
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20525
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 2 vezes
Re: Como é a orientação a objeto no Harbour
UéJorge Luiz escreveu: 26 Jul 2026 15:48 JoséQuintas
Você entendeu o que quero fazer?
Deixa pra lá!
Estou vendo que não existe Orientação a Objeto no Clipper / Harbour
Pediu pra transformar em objeto, e agora diz que não existe.
Criou um projeto em seu nome, e quer que outras pessoas façam o seu trabalho?
E agora ofende a linguagem de todos, como forma de forçar isso.
Não é assim que se consegue colaboração.
Aliás... seu trabalho parece uma idiotice.
Diz que quer mostrar como fazer a mesma coisa com linguagens diferentes, mas quer criar trocentas classes em harbour pra fazer isso.
Isso está fugindo do que foi proposto.
quer mostrar como usar objeto?
pra isso não precisa criar uma novela de objetos.
Então, deixa de fazer sentido do que se trata.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/