Clipper On Line • Ver Tópico - xHarbour 100% Orientado a Objetos - Uma pequena introdução

xHarbour 100% Orientado a Objetos - Uma pequena introdução

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

Moderador: Moderadores

 

xHarbour 100% Orientado a Objetos - Uma pequena introdução

Mensagempor Stanis Luksys » 12 Mai 2007 07:44

Olá pessoal,

Como todos sabemos, o xHarbour é um poderoso tradutor que transforma código xBase em código C, e sendo C uma linguagem hibrida, podemos tanto escrever programas estruturados e procedurais, como orientados a objetos.

Mas então afinal, o que é esta tal de Programação Orientada a Objetos?

Bom, acho que eu não sou nenhum especialista e nem a pessoa mais indicada para explicar este conceito tão amplo, mas vou tentar aqui demonstrar na prática como aplica-lo com xHarbour.

Um dos erros mais comuns que tenho visto é as pessoas acharem que tudo que é for Windows é OOP, e não é verdade. Muitas pessoas partem do princípio de quem um botão ou um textbox é um objeto, e que é nisso que se fundamenta o conceito. Totalmente errado. Como veremos aqui, neste tipo de programação as entidades do nosso sistema (como Clientes, Fornecedores etc) que são verdadeiramente os nosso objetos.

Note que sistemas Visual Basic, Delphi e até C++ NÃO SÃO em sua imensa maioria orientados a objetos. A orientação a objetos é parte do planejamento de software que o desenvolvedor deve fazer, e não a linguagem ou ferramenta utilizada! Só pra constar, linguagens mais modernas como JAVA sempre são OOP.

Em todas estas linguagens a criação de objeto depende de CLASSES, e classes costumam vir acompanhadas de propriedades e métodos.

O objeto em sí, em termos práticos, acaba por ser aquela variavel que recebe para si toda uma classe. (Não é extamante isso mas assim é facil entender... E poderá ser visto no código)

Então, como dito, nosso objeto pode ser um cliente, pois clientes tem caracteristicas em comum entre si, e formam uma classe, assim como animais e vegetais (poético não?) são diferentes entre si, mas agrupados possuem caracteristicas muito semelhantes.

Vamos ver uma classe de clientes, com seus métodos e propriedades:

Propriedades comuns a clientes:
- Codigo;
- Nome;
- Telefone;
- Cor do cabelo;
- etc

Metodos comuns a clientes:
- Consultar
- Incluir
- Alterar
- Morrer - Isso mais tecnicamente falando seria chamado de exclusão... hehe
- etc

Bom pessoal, na internet existe muito material a este respeito, minha intenção era mesmo só de mostra isso do jeito que a gente gosta, no código!

Vou continuar na próxima postagem com os fontes.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

xHarbour OOP - Continuando....

Mensagempor Stanis Luksys » 12 Mai 2007 08:03

Vamos inciar criando um arquivo chamado TCliente.prg, onde ficará a nossa classe e todos métodos relativos a clientes.

Daqui pra baixo tudo é o mesmo arquivo, vou separar só pra explicar passo a passo:

#include "hbclass.ch"  // cabeçalho para uso de classe

CLASS TCliente

   DATA   codigo
   DATA   nome

   METHOD novo()
   METHOD recuperarPorCodigo( cCod )
   METHOD incluir()

ENDCLASS

Bom, muitissimo simples, criamos uma classe com o nome TCliente e definimos duas propriedades: nome e código; e três métodos: novo, recuperarPorCodigo e incluir.

Vamos ver agora o que faz cada método:
METHOD novo() CLASS TCliente

   ::codigo :=   NIL
   ::nome  :=   NIL
   
RETURN Self

Este método acima simplesmente incializa os dados, zera as nossas propridades, como se "nascesse" um novo cliente ainda sem caracteristicas proprias.

Uma consultinha simples:
METHOD recuperarPorCodigo( cCod ) CLASS TCliente
   
   local lRet
   
   use clientes shared new
   index on codigo to i_cod
   
   seek cCod
   if found()
      ::codigo := allTrim( clientes->codigo )
      ::nome  := allTrim( clientes->nome )
      lRet := .t.      
   else
      lRet := .f.
   endif
   
   close clientes

return lRet


Bom, aqui neste método acima ja vira programar de verdade, mas é simples...
O que fazemos é receber um código pelo parametro, buscar ele na tabela e preencher as nossas propriedades com aquelas q encontramos no registro do cliente. Se não encontrar retorna falso.

Agora o método da inclusão:
METHOD incluir() CLASS TCliente
   
   local cNovoCod
   
   use clientes shared new
   dbGoBottom()
   
   cNovoCod = strZero( val(clientes->codigo)+1, 5  )

   if ( alltrim( ::nome ) == "" )
      alert( "Campo NOME não pode ser vazio no método de inclusão!" )
      close clientes
      return .f.
   endif

   dbAppend()

   clientes->codigo := cNovoCod
   ::codigo := cNovoCod
   
   clientes->nome   := upper( ::nome )
   
   dbCommit()
   
   close clientes
   
return .t.

É o inverso da consulta, neste método nós pegamos as propriedades do nosso objeto para jogar no banco. Fazemos uma validação simples e se passar incluímos, senão retornamos falso.

Bom, acho que já deu pra começar a entender o espírito da coisa, então vamos ver onde e como usamos isso, já no sistema em sí.

Na próxima postagem vai o programa principal.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

xHarbour OOP - Programa principal

Mensagempor Stanis Luksys » 12 Mai 2007 08:15

Tudo aqui estará no arquivo clientes.prg:

Função principal:
function Main()
   local nMenu := 0
   cls
   do while .t.
      // menu principal
      @ 02, 04 to 06, 15
      @ 03, 05 prompt " Consulta "
      @ 04, 05 prompt " Inclusão "
      @ 05, 05 prompt " Exclusão "
      menu to nMenu
      do case
         case nMenu == 1 ; clienteConsulta()
         case nMenu == 2 ; clienteInclusao()
         case nMenu == 3 ; clienteAlteracao()
         otherwise ; exit
      endcase
   enddo
return NIL

Nenhum segredo, um simples menu.

Procedimento para consulta:
procedure clienteConsulta()

   local oCliente := NIL // esta var conterá o objeto cliente, seu tipo é 'o'
   local nCod       := 0
   local cTela    := saveScreen( 02, 20, 15, 75 )

   @ 02, 20 to 15, 75
   
   do while .t.

      @ 04, 24 say "Informe o código:" get nCod pict "99999" ; read
      
      if lastkey() == 27 ; exit ; end

      // criamos o objeto cliente
      oCliente := TCliente():novo()

      // usamos o MÉTODO DE PESQUISA POR CODIGO e conferimos o seu retorno
      if ! oCliente:recuperarPorCodigo( strZero( nCod, 5 ) )
         alert( "Cliente não encontrado" )
         loop   
      endif
      
      // após recuperar os dados, vamos mostrar a PROPRIEDADE NOME DO OBJETO CLIENTE
      @ 06, 24 say "Nome do cliente:  " + oCliente:nome
      
   enddo
   
   restScreen( 02, 20, 15, 75, cTela )

   return

Bom, o código está comentado nas partes principais, mas detalhando mais, o que fazemos é incializar um objeto cliente e através dele utilizar o método "recuperarPorCodigo" criado lá em cima no TCliente. Note que agora é simples acessar as propriedades deste objeto, basta usar:
objeto:propriedade

no nosso caso:
oCliente:nome

mas poderia ser:
caneta:corDaTinta

Cotinuando, vamos ver a rotina de inclusão:
procedure clienteInclusao()

   local oCliente := NIL
   local cTela    := saveScreen( 02, 20, 15, 75 )
   local cNome

   @ 02, 20 to 15, 75
   
   do while .t.

      cNome := space(30)
      @ 04, 24 say "Nome do cliente:" get cNome ; read
      
      if lastkey() == 27 ; exit ; end
      
      // criamos o objeto cliente
      oCliente := TCliente():novo()
      
      // vamos jogar esta var na PROPRIEDADE NOME do objeto
      oCliente:nome := cNome
      
      // em seguida chamamos o metodo incluir e testamos se deu certo
      if oCliente:incluir()
         alert( "Cliente cadastrado com sucesso. Codigo:" + oCliente:codigo )
      endif
      
   enddo
   
   restScreen( 02, 20, 15, 75, cTela )

   return

Aqui nós fazemos o seguinte:
1- Inicializamos o objeto oCliente.
2- Atribuimos valores as suas propriedades. (no caso só uma, o nome)
3 - Usamos o método incluir() para gravar essas propriedades no banco.


Vou concluir ainda no próximo (prometo que é o último)...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Mensagempor Stanis Luksys » 12 Mai 2007 08:29

Bom pessoal, é isso.

O exemplo é extremamente simples (o clássico nome e código).

A intenção foi apenas de demonstrar a maneira mais "moderna" e conceituada de se desenvolver uma aplicação comercial, a famosa e temida OOP. Demonstrar que usar xHarbour não é apenas recompilar um sistema com alguma GT (ou até mesmo com MiniGUI e similares). O xHarbour aparceu como uma evolução sem precedentes no mundo do xBase, possui hoje recursos que diversas linguagens modernas não possuem.

VAMOS EXPLORAR OS RECURSOS, NÃO DEIXEM DIZER E NÃO ACREDITEM QUE O XHARBOUR É UM "CLIPPER 32 BITS QUE PODE TER JANELINHA".

Vou citar algumas vantagens do uso de OOP no exemplo acima, e vamos tentar imaginar isso num sistema completo, e os impactos dessas alterações:

1 - Segurança dos dados:
Se notarmos nunca temos um comando USE no nosso programa, jamais ficamos com um aqruivo aberto lá no inicio do programa enquanto desenhamos telas, percorrendo loops e outras operações que podem ser demoradas. As tabelas são acessadas e já fechadas sempre somente no momento preciso de execução do método, uma fração de tempo ínfima.

2 - Manutenção fácil:
Avaliando nosso métodos podemos ver que validações e este tipo de coisa se tornam simples, centralizados sempre em um único local. Qualquer alteração realizada na classe, altera todo o sitema.
Se eu alterar o nome de um campo em uma tabela, só altero na classe e pronto.
Migração INSTANTANEA de DBF para Postgre ou Oracle ou qualquer banco em minutos, só altero minha classe e nada mais em todo meu sistema.

3 - Facilidade no desenvolvimento:
Vejamos como é simples, eu estou no meio daquele código imenso de relatório ou no meio de uma venda e preciso da data de nasciemento do cliente, fácil resolver:
oCliente := TCliente():novo() 
oCliente:recuperarPorCodigo( "00001" )
nascimento := TCliente():nascimento

Só isso, nada de abrir tabelas, fazer relacionamentos, nada disso.

4 - Ter um programa preparado para o futuro e ser um programador que sabe OOP: não tem preço... rsrsrsr

Claro que dei poucos exemplos, são muitas, muitas e muitas as vantagens e vocês podem conferir com o tempo. E afirmo: NÃO EXISTEM DESVANTAGENS.

Se houver interesse de alguém, posso continuar este "tutorial" e mostrar como criar suas próprias classes para acesso a banco mysql e até mesmo no próprio dbf... transformando seu programa inteiro em OOP e esquecendo de vez o modo clippero de programar.

PS1: Se alguém quiser dar uma olhada, no meu site tem há tempos já umas rotinas de menú OOP com xHarbour.

PS2: Mais tarde vou subir os arquivos deste tutorial no meu site e depois quem quiser pode baixar o pacote completo fontes + exe + dbf.

Valeu galera, espero que tenham gostado.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Re: xHarbour 100% Orientado a Objetos - Uma pequena introduç

Mensagempor Maligno » 12 Mai 2007 10:32

Como todos sabemos, o xHarbour é um poderoso tradutor que transforma código xBase em código C

A não ser que tenham feito uma mudança radical no XHarbour, que eu desconheço (e duvido), o compilador do XHarbour não converte fonte XBase em C. A proposta, aliás, nunca foi essa. Ele apenas e tão somente lê o código XBase e cria uma série de chamadas de funções que fazem um "empilhamento" de comandos, símbolos, etc. Ao final, é executada a função hb_vmExecute, que faz a VM a executar o procedimento empilhado.
Até existe um utilitário muito antigo, cujo nome não lembro, que realmente converte código XBase em C. Inclusive, ele tinha, à época, quase toda a biblioteca Clipper convertida. Lembro que funcionava tão bem que até parecia que o programa tinha mesmo sido feito em C. Mas isso é uma outra história. :)

sendo C uma linguagem hibrida, podemos tanto escrever programas estruturados e procedurais, como orientados a objetos.

C não é uma linguagem híbrida. C++ é uma linguagem OOP que permite o uso da sintaxe de C. Nem é muito usual, mas até pode-se usar o termo híbrido pra ela. Mas o XHarbour não utiliza C++, e sim C. E nem há necessidade de C++. O código C proveniente daquela "conversão" é (e precisa ser) muito simples. Talvez o time de desenvolvimento do XHarbour tenha usado C++ para alguma coisa, mas duvido que a VM tenha sido escrita em C++. Isso porque o conceito de VM utilizado pelo XHarbour já cria um razoável overhead no processamento. C++ com OOP também cria um overhead extra. Apesar da imensa facilidade de programação oferecida pelo paradigma OOP, é fato que OOP impõe um custo de processamento que poderia se tornar crítico em muitas aplicações. Aliás, justamente por essa questão de overhead, é bom que ninguém espere uma versão dotNET do XHarbour. Duvido que um dia façam. Se fizerem, será uma VM rodando dentro de outra VM, já que o dotNET trabalha com código gerenciado. Certamente a performance cairá bastante.

Em suma: OOP não é o céu na terra. Tem vantagens e desvantagens. Inclusive, por conta das desvantagens, a imensa maioria dos sistemas de base (SOs, linguagens, SGBDs, etc) são feitos no bom e velho código estruturado (C, por exemplo). Em muitos casos, OOP nem pensar.

Aliás, uma lembrança: os métodos de uma classe nada mais são que simples funções estruturadas. Logo, programar em OOP implica em criar as mesmas funções que sempre criamos em linguagens não-OOP.

Note que sistemas Visual Basic, Delphi e até C++ NÃO SÃO em sua imensa maioria orientados a objetos.

Discordo totalmente. Programas Delphi SÃO, EM SUA MAIORIA, OOP. Até porque, poucas são as pessoas que programam Delphi sem usar forms, já que se trata de uma linguagem de alto nível. O bom da linguagem, inclusive, é justamente a facilidade de uso do paradigma OOP.
Acho que posso dizer o mesmo de VB, sem conhecer muito dele. Agora, no caso de C++, se não houver código OOP, tem-se um simples fonte C com uma extensão diferente (cpp). Nada mais que isso. :)

O objeto em sí, em termos práticos, acaba por ser aquela variavel que recebe para si toda uma classe. (Não é extamante isso mas assim é facil entender... E poderá ser visto no código)

Uma outra forma bem fácil de entender: o objeto é o instanciamento de uma classe. Classe é como o projeto arquitetônico de uma casa. Uma planta. A planta é única. Mas a partir dela pode-se construir quantas casas forem necessárias. No conceito de programação, a classe é um novo tipo de dado baseado na modelagem (compreensão) de alguma coisa, e que servirá de base para a criação de um objeto, que terá dados únicos (não se misturam com dados de outro objeto) e código comum (não há replicação). Mas é claro que, o paradigma OOP tem muitas outras características que facilitam o trabalho do programador: herança, polimorfismo, sobrecarga, etc. Muitas dessas características, há algum tempo me comentaram (não comprovei e nem vou me dar ao trabalho), o XHarbour ainda não tinha implementado.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Mensagempor Stanis Luksys » 12 Mai 2007 15:15

Obrigado pelas valiosas correções.

Mas o simples fato de você usar forms não significa que você está usando OOP na estruruação do sistema. Você tem todos os objetos criados automaticamente pela ferramenta e trabalha em cima deles, e tem os seus métodos e proriedades acessíveis com cliques de mouse.

No entando muito poucas são as aplicações que realmente utilizam OOP e criam suas próprias classes e as instanciam (como queira) e trabalham diretamente com "objetos criados pelo usuário" no sistema. Dificilmente você encontra uma classe para tratamento de dados de clientes ou fornecedores por exemplo num programa VB ou Delphi. O que você encontra são rotinas comuns, que a grosso modo ainda se parecem um pouco com o modo clippero, com excessão do uso (e aí devo dizer) de classes que acessam os mais diversos bancos, e que novamente já estão prontas e oferecidas pela ferramenta.

Um exemplo é o que eu dei acima, alterando o nome de um campo no BD, mesmo em Delphi ou VB, na maioria dos casos vc percorrerá boa parte do sistema alterando querys sql.

A WHGUI também é OOP e o fato de utiliza-la não significa que seu sistema já seja OOP. Você simplesmente tem todo o controle de "objetos de tela" realizado através de classes. O resto do sistema é normal. (Foi mais eu menos daí que eu tirei o hibrido, me desculpe se usei o termo errado).

Veja que por exemplo trabalhando com Java tudo depende de classes, e nunca ouvi dizer de alguém que tenha criado um programa sem ter uma classe específica para cada entidade do sistema.

Quanto a vantagens e desvantagens, claro que existem, eu apenas me limitei a dizer a respeito de aplicações comerciais desenvolvidas com Clipper, e reafirmo que usar OOP não traz desvantagem alguma. Eu não entrei no âmbito de sistemas mais complexos, nos quais nem clipper nem xharbour deveriam ser usados.

Como eu disse no início de tudo a intenção era só mostrar o código mesmo, e como usar de fato OOP no xHarbour. E isso não se obtém usando classes de MySQL e de telas como a HWGUI.

Todo este conceito de OOP traz em sí um enorme estudo, o qual como eu afirmei não sou especialista. Está la nas primeiras frase la no topo. Inclusive recomendei que se possível procurem informações em outro lugar.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Mensagempor Maligno » 12 Mai 2007 15:49

Quando me referi a forms, me referi aos forms criados pela IDE (VB ou Delphi), que faz os cria como objetos. Mas pode-se também criar forms "na unha", claro.

Dificilmente você encontra uma classe para tratamento de dados de clientes ou fornecedores por exemplo num programa VB ou Delphi.

Uai! Mas a existência disso só depende da vontade do programador. Isso se faz com qualquer linguagem OOP. E facilmente. O que a mais tem o XHarbour por causa disso? Não entendi.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Mensagempor Stanis Luksys » 12 Mai 2007 16:17

Eu não me lembro de ter tito que o xHarbour tem algo a mais, em momento algum.

Eu disse apenas, assim como você, pode ler lá mais pra cima, que o programador é que faz a OOP e não a ferramenta. Isso em qualquer linguagem, eu disse que essas linguagens todas suportam, mas que poucos usam o conceito.

O xHarbour não tem nada a mais, e nem disse que é melhor que Delphi ou VB, apenas demonstrei o que é de fato o conceito de OOP aplicado a sistemas de informação. Este conceito não se restringe a ter classes que comandam suas telas e sua conexão com o banco. OOP deve sim partir do programador, o fato de Delphi ser OOP não significa que seu sistema seja, se assim você não o projetou.

Usando HWGUI+TMySQL no xharbour vc alcança resultados próximos ao do delphi (conceitualmente falando), só que na mão. E mesmo assim isso por sí só não é o conceito de OOP que estudamos em sistemas comerciais.

O grande "barato" da OOP é manipular através de classes os dados do seu sistemas, proveninetes de entrada de dados e leitura do bd. E isso poucos sistemas fazem.

Ter uma tela cheia de objetos até é OOP. Mas é o mínimo, o fornecido pela ferramenta.

Na hora de fazer seu projeto com diagramas de casos de uso e de classes, você nem pensa nisso (nos objetos de tela), porque já é o "padrão". A OOP do seu sistema é você quem faz, relacionando as entidades do sistema e criando métodos e propriedades para manipula-las.

Me parece que você está caindo no erro de achar que se tem objetos na tela já é OOP.

Veja só, eu não disse que o xHarbour é milagroso e o único que faz isso, eu apenas disse que ele pode fazer isso, é mais um que suporta OOP. E nem é o melhor...

Procurei demonstrar que usando xHarbour é possível realizar seu projeto todo orientado a objetos.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Mensagempor Maligno » 12 Mai 2007 17:00

Ah, sim. Agora eu entendi seu ponto de vista. :)

Mas, não. Eu não penso que um programa é OOP apenas por conter objetos criados automaticamente pela ferramenta. É um programa OOP, evidentemente. Mas eu concordo com você que há muita gente que apenas se preocupa em programar eventos, sem realmente criar classes novas que até poderiam facilitar seu trabalho muito mais.
Por outro lado, sem dúvida, há muita gente programando OOP em Delphi e VB, até porque essas ferramentas são mais antigas que o XHarbour. Os novatos sim, não tendo muita intimidade com classes, acabam se fixando apenas em programação de eventos.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6390
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Mensagempor Stanis Luksys » 12 Mai 2007 17:12

Legal,

Entramos em um consenso... rsrs

Quem me conhece sabe que eu não sou nenhum fanático por xHarbour, e não defendo seu uso frente a outras linguagens mais robustas.

Mas eu gosto de programar, e TRABALHO com xHarbour.

Para todas as outras pessoas que trabalham com ele, achei que poderia ser interessante entender um pouquinho (só um pouquinho mesmo) como funciona essa tal de OOP, porque todo mundo estrufa o peito para falar "o xHarbour é OPP", mas poucos fazem uso dessa funionalidade.

Quando fazem, em geral são as classes prontas de uma hwgui.lib ou mysql.lib, e ja acham que podem dizer "meu sistema é oop", o que não é uma verdade.

Obviamente em outras linguagens mais gente usa os conceitos de OOP, mas são linguagens com mais tempo no mercado.

Eu trabalhei já com Delphi+Oracle em duas empresas de desenvolvimento de médias para grande, e nenhuma delas utilizava de fato OOP.

Eu não ia escrever nada no começo, ia só madar bala no código mesmo, mas achei que seria melhor escrever uma introduçãozinha, e fiz rapidamente e de cabeça, logo de manhãzinha como pode ver no horário da postagem.

Suas correções só vem a aprimorar o conhecimento de quem vier a ler os tópicos, e para mim não são motivos para adversidades. Todos saímos ganhando com isso.

Valeu e até mais.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Mensagempor vagucs » 12 Mai 2007 17:31

Otimo discusão virou o topico, só confirmando as informações do maligno.

A não ser que tenham feito uma mudança radical no XHarbour, que eu desconheço (e duvido), o compilador do XHarbour não converte fonte XBase em C.


Correto, o xHarbou faz a mesma coisa que o clipper, o clipper tambem gera um OBJ que em si, tem todo o PCODE da rotina e chama o procedimento PLANKTON que executa a VM do clipper, o xHarbour não foi feito para gerar o OBJ direto pois ai perderia a facilidade de compilar em diversos SO com poucos problemas

C++ é uma linguagem OOP que permite o uso da sintaxe de C.


C++ é realmente um "PLUS" do C que adiciona a possibilidade de trabalhar orientado a objetos, o xHarbour não utiliza C++, ele é totalmente escrito em puro C, mas já compilei classes em C++ e com algumas mudanças no OBJ eu consegui usar elas em xHarbour e C sem problemas, porque no final das contas tudo é codigo executável. OOP traz mais facilidades e uma programação mais centrada e fácil de entender. Mas o OOP no xHarbour não traz tantas vantagens quanto OOP em Pascal ou C++ ou qualquer outra linguagem, pois nestas resulta em um consumo menor de memoria, ja que uma única estrutura armazena em um unico seguimento diversas informações, isto resulta em um consumo menor de memoria e uma programação mais limpa e compreensiva, isto quando todas as propriedades do objeto são usadas, agora se declarar um objeto com 300 propriedade e usar só uma, ai é realmente perda de tempo. Pois em um objeto criado, toda a área de memoria de sua estrutura é ocupada, pois quando compilado o programa executável usa estas informações da estrutura para poder saber em qual byte do seguimento a informação requerida se encontra.

Somente confirmação do que foi dito.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar de usuário

vagucs
Membro Master

Membro Master
 
Mensagens: 1466
Data de registro: 10 Jul 2004 10:45
Cidade/Estado: Ipanema - MG
Curtiu: 1 vez
Mens.Curtidas: 19 vezes

Mensagempor And » 13 Mai 2007 03:28

Só sei que gostei do tópico e se possivel quero mais (OOP). :)Pos

Abraços,
Anderson
Clipper 52e/Clipper 53b/Blinker 7/Vlib/Fglib/DBFNTX
_______________________________________________
Migrando para [x]Harbour 0.99.60 (SimpLex) + MiniGUI 1.2 Exp. (Build 22)
_______________________________________________
Assine o manifesto dos artistas pela preservação da amazônia.
Avatar de usuário

And
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 163
Data de registro: 25 Set 2005 18:31
Cidade/Estado: São Paulo/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Mensagempor Stanis Luksys » 14 Mai 2007 00:15

Então...

Na verdade mesmo, o uso de objetos já vem presente desde o Clipper 5.3, e em algumas pequenas coisas no 5.2 também. Quem já trabalha com TBrowse com certeza já se adaptou a este modo de programar.

A esperança é que o xHarbour venha a oferecer um suporte mais amplo de OOP, como herança e polimorfismo já citados pelo maligno e que as linguagens e compiladores mais evoluídos já suportam. OOP é um conceito tão grande, que existem características já na teoria que nenhuma linguagem ainda foi capaz de implementar. Acredito que Java e C# sejam as linguagens que andam na frente nesta corrida, e que exatamente por isso vêm ganhando mais e mais adeptos a cada dia.

No caso do meu pequeno exemplo acima, demonstrei o mínimo da programação orientada a objetos aplicada a sistemas comerciais. Procurei demonstrar que OOP não é simplesmente ter os seu sistema compilado com uma ferramenta que suporte OOP. O Delphi é OOP? Sim, claro, mas isso apenas significa dizer que esta ferramenta te dá este suporte, e não que seu sistema nasce OOP só pq vc fez nele. O que acontece é que os elementos e procedimentos que ele gera automaticamente sempre são baseados em objetos e classes, fazendo com que CASO VOCÊ OPCIONALMENTE continue usando o mesmo conceito, seu sistema seja de fato 100% OOP, mas se você não usar, nada feito, só a menor parte do sistema será, que aliás é a menos importante.

A aplicação da orientação a objetos, como dito no primeiro tópico, parte do desenvolvedor, e o intuito principal é fazer com que você manipule os DADOS e INFORMAÇÕES através de classes (e consequentemente objetos). Se você não faz isso, você pode estar usando Delphi, VB, HWGUI Python ou seja o que for, seu sistema NÃO utiliza conceitos de OOP.

Note que o uso de OOP no planejamento do seu sistema faz com que ele gere um "algoritmo" unico a ser implementado em qualquer linguagem (que suporte OOP) através da criação de regras de negócios, que por sua vez são implementadas na prática através de classes. Algumas ferramentas como o Visual Paradigma for UML geram classes automaticamente quando ainda estamos definindo a estrura do banco do dados, muito interessante quem quiser dar uma olhadinha. Orientação a objetos independe de linguagem de programação, cada uma usa sua sintaxe, mas todas usam o mesmo conceito.

E é exatamente isso que fazem esses frameworks que geram aplicativos finais em várias linguagens, se baseam em regras que você cria (que pode ser até em português) e transformam em classes, que depois são geradas na linguagem que você escolher. Não tenho certeza mas este próprio CoreBuilder deve trabalhar assim também, só que simplesmente você escreve as regras em sintaxe xBase.

Quem já viu um aplicativo Java sabe que sua extensão padrão é justamente *.class.

Quem tiver paciência pra testar o código que eu colei lá em cima vai entender facimente como funciona, não muda praticamente nada o estilo de programação para os métodos, são como rotinas comuns que sempre utilizamos.

Só o que muda é o conceito: Programação orientada a objetos.

Foi esta a intenção, apenas demonstrar como usar OOP no xHarbour, e que isso não se deve confundir com classes para menu, browse, get e outros objetos "pré-definidos" pela ferramenta, pois estes não fazem necessariamente parte do planejamento do software, justo porque embora no xHarbour sejam feitos "manualmente", em outras ferramentas mais robustas são disponiblizados automaticamente.

Falou!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Mensagempor Marcos » 14 Mai 2007 08:49

Parabéns pelo assunto em discussão, Stanis dispertou uma questão muito interessante, estou acompanhando e aprendendo muito com o tópico, que só tém feras é claro!
Continuem....
Atenciosamente,
_____________________________
Marcos Antonio da Silva
marcosilva90@hotmail.com
Avatar de usuário

Marcos
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 336
Data de registro: 20 Set 2003 09:16
Cidade/Estado: Cáceres/Mato Grosso
Curtiu: 6 vezes
Mens.Curtidas: 1 vez

Mensagempor sygecom » 14 Mai 2007 08:52

Tche, eu toh acompanhando tb. e quero dar parabens pela grande iniciativa do Stanis.....

Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Próximo



Retornar para Harbour

Quem está online

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