Página 2 de 2

programação orientada a objetos ?

Enviado: 25 Set 2018 11:09
por alxsts
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).
Tag Code
Tag Code
Efeito obtido:

Código: Selecionar todos

Function Main()

   // Exemplo de Código

   RETURN NIL

programação orientada a objetos ?

Enviado: 29 Set 2018 19:39
por alxsts
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

programação orientada a objetos ?

Enviado: 29 Set 2018 22:31
por JoséQuintas
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.

programação orientada a objetos ?

Enviado: 29 Set 2018 23:15
por JoséQuintas
Da parte que se sabe o que quer....

Código: Selecionar todos

# 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

programação orientada a objetos ?

Enviado: 02 Out 2018 11:42
por Emanuel
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....

Código: Selecionar todos


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

Código: Selecionar todos


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 :))

programação orientada a objetos ?

Enviado: 02 Out 2018 12:52
por alxsts
Olá!

Muito bom! Parabéns! :-Y :-Y :-Y :-Y

programação orientada a objetos ?

Enviado: 09 Out 2018 08:43
por Emanuel
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

programação orientada a objetos ?

Enviado: 18 Mar 2019 15:20
por momente
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!

programação orientada a objetos ?

Enviado: 18 Mar 2019 17:59
por JoséQuintas
Muito incompleta a pergunta.

Código: Selecionar todos

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.

programação orientada a objetos ?

Enviado: 19 Mar 2019 11:41
por momente
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!

programação orientada a objetos ?

Enviado: 19 Mar 2019 13:30
por JoséQuintas
Uma coisa é uma coisa, e outra coisa é outra coisa.

Código: Selecionar todos

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

Código: Selecionar todos

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

programação orientada a objetos ?

Enviado: 19 Mar 2019 15:15
por momente
JoséQuintas,

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

Certíssimo agora!!!

:{