Página 3 de 3
Cadastro poderoso usando classe
Enviado: 25 Mai 2015 14:59
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.
Cadastro poderoso usando classe
Enviado: 25 Mai 2015 22:32
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
Cadastro poderoso usando classe
Enviado: 26 Mai 2015 02:38
por rochinha
Amiguinhos,
Show-de-bola, :-Y
Cadastro poderoso usando classe
Enviado: 26 Mai 2015 17:00
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
Cadastro poderoso usando classe
Enviado: 09 Jun 2015 13:00
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
Cadastro poderoso usando classe
Enviado: 09 Jun 2015 13:08
por JoséQuintas
Não entendi, defina melhor o que quer dizer com "como fazer isto nos itens de uma compra ou venda".
Cadastro poderoso usando classe
Enviado: 09 Jun 2015 14:16
por cl@udio
Usando uma classe para controlar os itens....
Está e minha dúvida.
Obrigado pela atenção.
Claudio
Cadastro poderoso usando classe
Enviado: 09 Jun 2015 14:56
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.
Cadastro poderoso usando classe
Enviado: 09 Jun 2015 18:38
por cl@udio
Obrigado José.
Vou dar uma estudada no assunto com calma, quando conseguir.
Ai posto alguma duvida especifica.
Claudio
Cadastro poderoso usando classe
Enviado: 09 Jun 2015 20:22
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
Cadastro poderoso usando classe
Enviado: 10 Jun 2015 10:42
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.
Cadastro poderoso usando classe
Enviado: 14 Set 2015 17:02
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! 
Cadastro poderoso usando classe
Enviado: 14 Set 2015 18:19
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").
Cadastro poderoso usando classe
Enviado: 14 Set 2015 19:11
por JoséQuintas
Tem toda razão.
Em todo caso, talvez isto exemplifique melhor o que disse, incluindo o instanciar:
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.
Cadastro poderoso usando classe
Enviado: 16 Set 2015 17:17
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!
