Clipper On Line • Ver Tópico - programação orientada a objetos ?

programação orientada a objetos ?

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

Moderador: Moderadores

 

programação orientada a objetos ?

Mensagempor alxsts » 25 Set 2018 11:09

Olá!

Estude o conteúdo do tópico xHarbour 100% Orientado a Objetos - Uma pequena introdução.

Dica: sempre que postar código fonte em seus tópicos, coloque-o entre as tags [ code ] [ /code ]. Pode usar o botão destinado a este fim, que existe na janela "POSTAR UMA RESPOSTA" (marque o texto do código fonte e clique no botão).

Capturar.JPG
Tag Code


Efeito obtido:
Function Main()

   // Exemplo de Código

   RETURN NIL
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

programação orientada a objetos ?

Mensagempor alxsts » 29 Set 2018 19:39

Olá!

Sobre o assunto, este material da Unicamp é muito bom: http://www.dca.fee.unicamp.br/cursos/POOCPP/node1.html.
Bom proveito!

OOP Programacao Orientada Objeto
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

programação orientada a objetos ?

Mensagempor JoséQuintas » 29 Set 2018 22:31

Emanuel escreveu:depois dos metodos eu me perco. não sei pra onde ir, nem o que fazer.


A questão é:
O que quer que o método faça?
Não dá pra criar um método sem saber pra que vai servir.
método é igual uma função, se sabe criar função, é só fazer o método igual.

Retorne ao link que postei, que vai ter um passo a passo.
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

programação orientada a objetos ?

Mensagempor JoséQuintas » 29 Set 2018 23:15

Da parte que se sabe o que quer....

# include "hbclass.ch"
# include "inkey.ch"

PROCEDURE Main()

   LOCAL oClasse := Cadastro():New()

   Config()   
   oClasse:Execute()
   
   RETURN
   
CREATE CLASS Cadastro
   
   VAR    nOpc      INIT 1
   METHOD Execute()
   METHOD Tela()
   METHOD Menu()
   METHOD Inclui()
   METHOD Altera()
   METHOD Exclui()
   METHOD Lista()
     
   ENDCLASS
   
METHOD Execute() CLASS Cadastro

   CLS
   ::Tela()
   DO WHILE .T.
      ::Menu()
      DO CASE
      CASE LastKey() == K_ESC
         EXIT
      CASE ::nOpc == 1
         ::Inclui()
      CASE ::nOpc == 2
         ::Altera()
      CASE ::nOpc == 3
         ::Exclui()
      CASE ::nOpc == 4   
         ::Lista()
      CASE ::nOpc == 5
         EXIT
      ENDCASE
   ENDDO

   RETURN NIL

METHOD Tela() CLASS Cadastro
         
      @ 0, 0 to 3, maxcol () DOUBLE // contorno do box
      @ 1, 2 SAY "SISTEMA DE CADASTRO PARA PESSOAS FISICAS"
      @ 1, maxcol () -15 SAY "Data:"+Dtoc(Date()) // exibir data
      @ 2, maxcol () -15 SAY "Hora:"+Time() // exibe hora
      @ 2, 2 SAY "cadastro de clientes"
      @ 4, 0 to MaxRow(), maxcol ()

      RETURN NIL

METHOD Menu() CLASS Cadastro
     
      @10, 23 to 18, 50 DOUBLE // contorno do menu
      @10, 25 SAY ".: CADASTRAR CLIENTES :."
      @12, 26 prompt "cadastro " message " cadastro de novo cliente "
      @13, 26 prompt "alteracao" message " altera dados de um cliente "
      @14, 26 prompt "exclusao " message " cancelar cadastro de cliente"
      @15, 26 prompt "listagem " message " consulta de clientes "
      @17, 26 prompt "sair " message " sair do sistema "

      MENU to ::nOpc
     
      RETURN NIL
     
METHOD inclui() CLASS Cadastro

   cls
   ?"inclusao de usuarios"
   Inkey(0)
   cls

   RETURN NIL

METHOD altera() CLASS Cadastro

   cls
   ?"alteracao de clientes"
   ?"tecle algo"
   Inkey(0)
   cls

   RETURN NIL

METHOD Exclui() CLASS Cadastro

   cls
   ?"exclusao de clientes"
   ?"tecle algo"
   Inkey(0)
   cls

   RETURN NIL

METHOD lista() CLASS Cadastro

   cls
   ?"listagem de clientes"
   ?"tecle algo"
   Inkey(0)
   cls

   RETURN NIL

FUNCTION config()

   SET DATE BRITISH // converte data para a versao dd/mm/yy
   SET CENTURY ON // exibe o ano em quatro digitos
   SET delimiters on// ativa os delimitadores
   SET delimiters to "[]" // informa como serao os delimitadores
   SET wrap on // quando chega no ultimo prompt ele volta ao primeiro
   SET message to MaxRow() center // exibe menssagem na ultima linha

   RETURN NIL
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

programação orientada a objetos ?

Mensagempor Emanuel » 02 Out 2018 11:42

sr. Quintas..
Obrigado pelo conselho
JoséQuintas escreveu:A questão é:
O que quer que o método faça?
Não dá pra criar um método sem saber pra que vai servir.
método é igual uma função, se sabe criar função, é só fazer o método igual.


Eu consegui construir o fonte... mas acabei pegando o seu exemplo pra deixar mais organizado
JoséQuintas escreveu:Da parte que se sabe o que quer....



//programa cadastra e exclui arquivos de uma tabela dbf

# include "hbclass.ch"
# include "inkey.ch"
REQUEST DBFCDX

procedure main()

    LOCAL oClasse := Cadastro():New()

    config()
    oClasse:Execute()

RETURN

CREATE CLASS cadastro
   
    VAR    nOpc      INIT 1
    METHOD Execute()
    METHOD Tela()
    METHOD Menu()
    METHOD Inclui()
    METHOD Exclui()

ENDCLASS   
   
//configurações de inicialização
FUNCTION config()

    SET DELETE ON // excluir elemento de uma tabela
    SET ESCAPE ON // Esc para fechar a tela a qualquer momento
    SET DATE BRITISH // converte data para a versao dd/mm/yy
    SET CENTURY ON // exibe o ano em quatro digitos
    SET delimiters on// ativa os delimitadores
    SET delimiters to "::" // informa como serao os delimitadores
    SET wrap on // quando chega no ultimo prompt ele volta ao primeiro
    SET message to MaxRow() center // exibe menssagem na ultima linha
    use cadastro alias registros
    index on codigo to registros
    set index to registros
     
RETURN
   
//menu opções
METHOD Execute() CLASS cadastro

    ::tela()
    DO WHILE .T.
        ::menu()
        DO CASE
            CASE LastKey() == K_ESC; EXIT
            CASE ::nOpc == 1; ::Inclui()
            CASE ::nOpc == 2; ::Exclui()
            CASE ::nOpc == 3; EXIT
        ENDCASE
    ENDDO

RETURN NIL

//tela de apresentação
METHOD Tela() CLASS cadastro

    @ 0, 0 to 3, maxcol () DOUBLE
    @ 1, 2 say "SISTEMA DE CADASTRO PARA PESSOAS FISICAS"
    @ 1, maxcol () -15 say "Data:"+Dtoc(date())
    @ 2, maxcol () -15 SAY "Hora:"+Time()
    @ 2, 2 say "cadastro de clientes"
    @ 4, 0 to MaxRow(), maxcol ()

RETURN NIL

//opções do menu
METHOD menu() CLASS cadastro

    ::tela()
    @ 13, 24 to 20, 50 DOUBLE
    @ 14, 26 prompt "  Efetuar cadastrando  " message "preencher formulario para cadastro"
    @ 16, 26 prompt "    excluir cadastro   " message "apagar clientes da tabela"
    @ 18, 26 prompt "         sair          " message "fechar programa"

    Menu to ::nOpc
   
RETURN NIL

//incluindo um cliente na tabela
METHOD Inclui() CLASS cadastro

    local cNome := space(30)
    local nTele := 0
    local cCpf  := 0
    local dDate := ctod( "//" )
    local cod := 0
    CLS

    DbGoBottom()
    cod := codigo
    cod++
    read
   
    ::tela()

    //formulário para preencher
    @ 07, 05 SAY "Digite seu nome....:" get cNome
    @ 09, 05 SAY "Numero para contato:" get nTele
    @ 11, 05 say "numero de cpf......:" get cCpf 
    @ 13, 05 say "Data de nascimento.:" get dDate
    read
    CLS

    //salvando na tabela
    append blank
    REPLACE NOME     WITH cNome, ;
            CONTATO  WITH nTele, ;
            DATE     WITH dDate, ;
            CPF      WITH cCpf , ;
            codigo   WITH cod   
    wait "cadastro efetuado com sucesso!"
    CLS
RETURN NIL

//excluindo arquivo da tabela
METHOD Exclui() CLASS cadastro

    public codCli := 0
    CLS

    ::tela()

    @ 07, 05 say "digite o codigo do cliente:" get codCli
    read
   
    if DbSeek( codCli )
        DELETE
        wait "Registro apagado com sucesso"
    else
        wait "ESSE REGISTRO NAO EXISTE !"
    endif
    CLS
RETURN NIL



E aqui esta a pequena tabela que criei tbm

request DBFCDX
procedure main()
    registros := { ;
    { "codigo"   , "N", 03, 0 }, ;
    { "NOME"     , "C", 30, 0 }, ;
    { "CONTATO"  , "N", 12, 0 }, ;
    { "DATE"     , "D", 08, 0 }, ;
    { "CPF"      , "N", 12, 0 }  ;
    }
    DbCreate( "cadastro", registros, "DBFCDX", "MYALIAS" )
    Browse()
RETURN



agradeço muito a vcs
vcs são feras :-Y :))
Emanuel
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 24
Data de registro: 20 Set 2018 14:39
Cidade/Estado: parnaiba-pi
Curtiu: 12 vezes
Mens.Curtidas: 0 vez

programação orientada a objetos ?

Mensagempor alxsts » 02 Out 2018 12:52

Olá!

Muito bom! Parabéns! :-Y :-Y :-Y :-Y
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

programação orientada a objetos ?

Mensagempor Emanuel » 09 Out 2018 08:43

Ola pessoal!
bom dia
eu estou querendo usar o postgresql em vez de dbf usando esse mesmo programa so pra entender como funciona o postgres

alguem tem algum exemplo ou algum material sobre o uso do postgres no xharbour?

desde ja sou grato a todos
Emanuel
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 24
Data de registro: 20 Set 2018 14:39
Cidade/Estado: parnaiba-pi
Curtiu: 12 vezes
Mens.Curtidas: 0 vez

programação orientada a objetos ?

Mensagempor momente » 18 Mar 2019 15:20

Amigos,

Estou estudando este tópico dos senhores, ma verdade preciso criar um método da minha classe para Destruir o Objeto, vocês teriam um exemplo, pois estou necessitando muito disso. :-o

Não esta dando certo o que eu fiz.

Obrigado meus amigos!
Rogerio L. Momenté
Nada é tão perfeito que não possamos melhorar.
Nunca se explique. Seus amigos não precisam e seus inimigos não vão acreditar.
www.looksystem.com.br
Avatar de usuário

momente
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 496
Data de registro: 03 Mar 2005 11:53
Cidade/Estado: São Carlos-SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

programação orientada a objetos ?

Mensagempor JoséQuintas » 18 Mar 2019 17:59

Muito incompleta a pergunta.

oObjeto := NIL


Isso destrói o objeto dentro do Harbour.

Se o objeto precisa fazer coisas antes de ser destruído... aí é outra história... Destruir janelas e outras coisas, por exemplo.
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

programação orientada a objetos ?

Mensagempor momente » 19 Mar 2019 11:41

Olá José Quintas,

Vou explicar melhor, tenho uma rotina que gera um xml de NFSe, o que esta acontecendo que se por algum motivo desisto de fazer a nota depois que gerou o xml, e sem sair da rotina processo novamente outro xml, ele gera um arquivo novo, porém com o conteúdo novo e na sequencia o conteúdo do xml anterior. Coloquei "oObj:=Nil", mas não adiantou. Gerei um método :End() na classe, onde coloco oObj:=NIL, também não deu certo! :-o

Valeu pelo retorno!
Rogerio L. Momenté
Nada é tão perfeito que não possamos melhorar.
Nunca se explique. Seus amigos não precisam e seus inimigos não vão acreditar.
www.looksystem.com.br
Avatar de usuário

momente
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 496
Data de registro: 03 Mar 2005 11:53
Cidade/Estado: São Carlos-SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

programação orientada a objetos ?

Mensagempor JoséQuintas » 19 Mar 2019 13:30

Uma coisa é uma coisa, e outra coisa é outra coisa.

oObjeto := Classe():New()
DO WHILE .T.
   ...
ENDDO


DO WHILE .T.
   oObjeto := Classe():New()
   ...
ENDDO
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

programação orientada a objetos ?

Mensagempor momente » 19 Mar 2019 15:15

JoséQuintas,

Obrigado meu amigo, matou em cima, estava bobeando na :New()

Certíssimo agora!!!

:{
Rogerio L. Momenté
Nada é tão perfeito que não possamos melhorar.
Nunca se explique. Seus amigos não precisam e seus inimigos não vão acreditar.
www.looksystem.com.br
Avatar de usuário

momente
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 496
Data de registro: 03 Mar 2005 11:53
Cidade/Estado: São Carlos-SP
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Anterior



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 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