Cadastro poderoso usando classe

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cadastro poderoso usando classe

Mensagem por JoséQuintas »

Bom saber que o post está sendo útil.

Tem coisas sobre classes que ainda nem conheço.
Mas com a parte básica já dá pra fazer muita coisa.

O importante sobre classe é deixar tudo fácil de entender, usar, e alterar.

Outro exemplo... deixar opção pra 3 menus diferentes, com visual diferente...

Na classe principal, uma variável, e a escolha:

Código: Selecionar todos

VAR nEstiloMenu INIT 1
...
DO CASE
CASE ::nEstiloMenu == 1
   ::MenuClassico()
CASE ::nEstiloMenu == 2
   ::MenuGrafico()
CASE ::nEstiloMenu == 3
   ::MenuTestando()
ENDCASE
Tudo continua funcionando como era antes, mas podemos testar 3 menus diferentes.
Mesmo com fonte misturado, continua organizado em blocos.
E só precisa mexer na classe principal.

Pra acionar o menu diferente num determinado cadastro:

Código: Selecionar todos

oFrm := CadastroClass():New()
oFrm:nEstiloMenu := 2
oFrm:Execute()
E quanto estiver tudo ok, só alterar o valor default direto na classe, e já vai alterar todos de uma vez.
Foi assim que fiz meus testes pra alterar o menu de texto pra ícones.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cadastro poderoso usando classe

Mensagem por JoséQuintas »

Desviar o assunto, sobre o cadastro, mas ainda sobre classe.
Lembrei do ADO.

Código: Selecionar todos

cnConnection :=    win_OleCreateObject( "ADODB.Connection" )
cnConnection:ConnectionString := "Driver={MySQL ODBC 3.51 Driver};Server=" + cServer + ";" + "Port=" + Ltrim( Str( nPort ) ) + ;
      ";Option=131072;Stmt=;Database=" + cDatabase + ";User ID=" + cUser + ";Password=" + cPassword + ";Collation=latin1;"
cnConnection:CursorLocation    := 3   // local recordset
cnConnection:CommandTimeOut    := 120 // seconds
cnConnection:ConnectionTimeOut := 120 // seconds
cnConnection:Open()
oTemporario := cnConnection:Execute( "SELECT * FROM CLIENTES" )
DO WHILE .NOT. oTemporario:Eof()
     ? oTEmporario:Fields( "NOME" ):Value
   oTemporario:MoveNext()
ENDDO
oTemporario:Close()
cnConnection:Close()
O que tem a ver?
É uma classe também.
Tem as "variáveis" (propriedades), :ConnectionString, :CursorLocation, :CommandTimeOut, :ConnectionTimeOut
Tem as "funções" (métodos): :Open(), :Execute(), :Eof(), :Fields(), :MoveNext(), :Close()
(Pra ser mais correto são duas classes: uma é a conexão, e a outra é o recordset (espécie de arquivo temporário na memória).

A diferença é que essas "classes" fazem parte do Windows, e não temos acesso aos fontes.

Se o post serviu pra aprender o que é classe, vai deixar mais claro muita coisa que antes podia ser estranha.
Até mesmo aquilo de usar o Excel:

Código: Selecionar todos

oExcel := win_OleCreateObject( "Excel.Application" )
oExcel:Open( "xxxxx" )
...
Classe faz parte de tudo que é programação Windows.
Talvez o que mais confunda nos manuais, pra quem não está acostumado, seja o nome diferente.

Classe, chama-se objeto
Função, chama-se método do objeto
Variável, chama-se propriedade do objeto
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Cadastro poderoso usando classe

Mensagem por rochinha »

Amiguinhos,

Show-de-bola, :-Y
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cadastro poderoso usando classe

Mensagem por JoséQuintas »

Fico feliz.

Talvez tenha faltado dizer:

Código: Selecionar todos

oFrm1 := CadastroClass():New()
oFrm1:cOpc := "C"

oFrm2 := CadastroClass():New()
oFrm2:cOpc == "I"
As variáveis oFrm1 e oFrm2 contém tudo da classe, começam sendo uma cópia da original.
Mas cada uma tem sua vida própria, e uma não interfere na outra.


Ah, sim.....
Tem outra parte legal pra criar classe: Relatórios
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
cl@udio
Usuário Nível 2
Usuário Nível 2
Mensagens: 88
Registrado em: 25 Jan 2007 16:47

Cadastro poderoso usando classe

Mensagem por cl@udio »

Parabéns, excelente exemplo.
Uma duvida que eu tenho seria como fazer isto nos itens de uma compra ou venda.
Vc teria um exemplo como este para postar.
Claudio
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cadastro poderoso usando classe

Mensagem por JoséQuintas »

Não entendi, defina melhor o que quer dizer com "como fazer isto nos itens de uma compra ou venda".
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
cl@udio
Usuário Nível 2
Usuário Nível 2
Mensagens: 88
Registrado em: 25 Jan 2007 16:47

Cadastro poderoso usando classe

Mensagem por cl@udio »

Usando uma classe para controlar os itens....
Está e minha dúvida.
Obrigado pela atenção.
Claudio
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cadastro poderoso usando classe

Mensagem por JoséQuintas »

Provavelmente está se referindo ao pedido contendo ítens.
Começa usando a classe para o pedido, para o "cabeçalho" do pedido: número, cliente, etc.
De qualquer jeito, isso precisa de inclusão, alteração, exclusão e consulta, igual a qualquer cadastro.


Mesmo que o restante fique parecido com o que tem hoje, eles interligados pela classe já pode reduzir variáveis, e te incentivar a separar em mais blocos.

Exemplo do que poderia separar, o nome é autoexplicativo:

Código: Selecionar todos

METHOD BrowseItens()
METHOD IncluiAlteraExcluiUmItem()
METHOD ConfirmaPedido() 
METHOD SomaPedido() 
METHOD BaixaUmItem() // chamado pelo confirma pedido pra cada item
METHOD CalculaUmItem() // pra calcular impostos/etc, chamado pelo SomaPedido()
METHOD AtualizaFinanceiro()
METHOD AtualizaEstoque()
METHOD MostraPedido()
Só exemplos, do que poderia ser separado em métodos/funções.
A classe de cadastro vai atender o "cadastro" de pedidos.
Para os itens, mesmo que não ajude diretamente, facilita a organização/divisão em blocos.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
cl@udio
Usuário Nível 2
Usuário Nível 2
Mensagens: 88
Registrado em: 25 Jan 2007 16:47

Cadastro poderoso usando classe

Mensagem por cl@udio »

Obrigado José.
Vou dar uma estudada no assunto com calma, quando conseguir.
Ai posto alguma duvida especifica.
Claudio
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cadastro poderoso usando classe

Mensagem por JoséQuintas »

Na prática, você vai estudando o melhor jeito de usar, onde achar melhor.
Por exemplo, pode ter uma classe somente com variáveis.

Código: Selecionar todos

CREATE CLASS Cadastro
   VAR Codigo
   VAR Nome
   VAR Endereco
   VAR Cidade
   ENDCLASS
No que isso ajuda?
Exemplo:

Código: Selecionar todos

oRemetente := Cadastro():New()
oRemetente:Codigo := 5
oRemetente:Nome := "TESTE"
oRemetente:Endereco := "ALGUM LUGAR"
oRemetente:Cidade := "OUTRO LUGAR"

oDestinatario := Cadastro():New()
oDestinatario:Codigo := 10
oDestinatario:Nome := "TESTE2"
oDestinatario:Endereco := "OUTRO LUGAR"
oDestinatario:Cidade := "MAIS UM"

EmiteConhecimento( oRemetente, oDestinatario )
Facilita ter um conjunto de informações, pra não inventar muito nome de variável, e pra transferir entre módulos.
Só exemplo.

Classe é um conjunto de informações, que pode ser só variável, ou só rotinas, ou tudo junto.
Chamam de objeto.
Daí vém aquele termo: "programação orientada a objetos", ou OOP.

Como cada um tem um jeito de programar, cada um vai descobrindo aonde isso pode ajudar.

A propósito... dá pra usar normalmente também em GETs.

Código: Selecionar todos

@ 1, 0 SAY "Remetente: " GET oRemetente:Nome
@ 2, 0 SAY "Destinatario:" GET oDestinatario:Nome
READ
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Cadastro poderoso usando classe

Mensagem por sygecom »

José Quintas, você é o cara,muito obrigado por compartilhar esses post, ficou de fato muito bem explicado e fácil de entender. Abraços.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Duda 'Sgluber'
Usuário Nível 3
Usuário Nível 3
Mensagens: 148
Registrado em: 11 Mar 2013 21:57
Localização: Interior de São Paulo

Cadastro poderoso usando classe

Mensagem por Duda 'Sgluber' »

Quintas,

eu estava procurando por um "tutorial" do básico da OOP (ou POO, em bom português), já que os meus conhecimentos são bastante superficiais, e encontrei esta sua bela contribuição.

Vale a pena ler todas as mensagens postadas aqui, mas eu gostaria de destacar 3 trechos que chamaram a minha atenção pela simplicidade, clareza e objetividade:

1) A título de curiosidade, é normal nos componentes Windows falarmos de propriedades e métodos.
São essas duas coisas aí: variável e função.


2) Classe faz parte de tudo que é programação Windows.
Talvez o que mais confunda nos manuais, pra quem não está acostumado, seja o nome diferente.
Classe, chama-se objeto
Função, chama-se método do objeto
Variável, chama-se propriedade do objeto


3) Classe é um conjunto de informações, que pode ser só variável, ou só rotinas, ou tudo junto.
Chamam de objeto.
Daí vém aquele termo: "programação orientada a objetos", ou OOP.
Como cada um tem um jeito de programar, cada um vai descobrindo aonde isso pode ajudar.


Parabéns e muito obrigado - mensagem inicial curtida! Imagem
Comecei pra valer nos tempos do MSX e nunca mais parei... grande caminhada! :-)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Cadastro poderoso usando classe

Mensagem por alxsts »

Olá!

Só para clarear este ponto:
José Quintas escreveu:Classe, chama-se objeto
Na verdade, uma classe de objetos é o nome dado à representação abstrata de algo do mundo real, em um sistema informatizado. Um objeto, por sua vez, é uma instância de uma classe.

Por exemplo: em uma tela de cadastro de frete, posso ter o remetente, o destinatário e a transportadora. Posso ter apenas uma classe (a classe "clsPessoa"), e instanciá-la 3 vezes, criando assim 3 objetos: oRemetente, o Destinatario e oTransportador. Os atributos ou variáveis de instância de cada objeto fariam a diferença entre eles. Os métodos ou comportamentos padrões de cada um dos objetos seriam os mesmos herdados da classe pai ("clsPessoa").
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cadastro poderoso usando classe

Mensagem por JoséQuintas »

Tem toda razão.

Em todo caso, talvez isto exemplifique melhor o que disse, incluindo o instanciar:

Código: Selecionar todos

oPDF := PDFClass():New()
oPDF é o objeto, porque a partir daí ele passou a existir, e a classe dentro dele, pra ele. (instanciar)
A classe por si só, o programa nem sabe que ela existe antes disso. Errei ao dizer que ela é o objeto.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Avatar do usuário
Duda 'Sgluber'
Usuário Nível 3
Usuário Nível 3
Mensagens: 148
Registrado em: 11 Mar 2013 21:57
Localização: Interior de São Paulo

Cadastro poderoso usando classe

Mensagem por Duda 'Sgluber' »

Motivado pelo assunto tratado neste tópico e pelas mensagens postadas, resolvi pesquisar por material básico e didático a respeito de OOP (ou POO) e acabei de postar este tópico.

Para quem está começando, vale a pena! Imagem
Comecei pra valer nos tempos do MSX e nunca mais parei... grande caminhada! :-)
Responder