Utilizando Classe no Access - A Classe Cliente
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Por: Plinio Mabesi
Chegou enfim a hora de criarmos a primeira parte funcional do nosso sistema. Depois de todo o sistema estar modelado e também estarem codificadas as classes auxiliares, vamos então dar vida ao programa.
A primeira classe a ser codificada será a classe Cliente. Após apresentar a estrutura da classe faremos a implementação da interface gráfica que manipulará os dados dos objetos.
Caso necessário relembre os conceitos anteriores sobre atributos, métodos, acesso às propriedades do objeto, instâncias e demais ensinamentos sobre a programação orientada a objetos, vistos nos primeiros artigos.
A Classe Cliente
O objetivo desta classe, conforme dito anteriormente, é oferecer funcionalidades de inclusão, consulta, atualização e exclusão dos objetos do tipo cliente.
Este é o código da classe, com todos os seus atributos e métodos, que se utilizam de funções próprias, bem como dos métodos dos objetos das classes Utilitario e ConexaoBD.
Código da classe:
Option Compare Database Option Explicit 'Objeto da classe Utilitario Private objUtil As New aclUtilitario 'Atributos da Classe 'Atributo de backup e atributo identificador da Classe 'PK - Código que identifica o cliente. Private bkpCodCliente As Variant Private lngCodCliente As Variant 'Classe social do cliente, calculada de acordo com a renda. Private strClasse As Variant 'CPF do cliente. Private strCpf As Variant 'E-mail do cliente. Private strEmail As Variant 'Nome completo do cliente. Private strNomeCliente As Variant 'Renda mensal do cliente, em reais. Private curRenda As Variant 'Métodos Get, Set e Let da Classe Property Get codCliente() As Variant codCliente = lngCodCliente End Property Property Let codCliente(argCodCliente As Variant) lngCodCliente = argCodCliente If IsEmpty(bkpCodCliente) Then bkpCodCliente = lngCodCliente End If End Property Property Get classe() As Variant classe = strClasse End Property Property Get cpf() As Variant cpf = strCpf End Property Property Let cpf(argCpf As Variant) If Not IsNull(argCpf) Then If Not objUtil.validaCPF(argCpf) Then MsgBox "O CPF <" & Format(argCpf, "000\.000\.000\-00") & _
"> não é válido.", vbExclamation, "CPF Inválido" strCpf = Null Else strCpf = argCpf End If Else strCpf = argCpf End If End Property Property Get email() As Variant email = strEmail End Property Property Let email(argEmail As Variant) If Not IsNull(argEmail) Then If Not objUtil.validaEmail(argEmail) Then If MsgBox("O E-mail <" & argEmail & "> não possui um formato válido." _
& vbCrLf & "Deseja incluir este e-mail?", vbQuestion + vbYesNo, _
"E-mail Inválido") = vbYes Then strEmail = argEmail End If Else strEmail = argEmail End If Else strEmail = argEmail End If End Property Property Get nomeCliente() As Variant nomeCliente = strNomeCliente End Property Property Let nomeCliente(argNomeCliente As Variant) If Not IsNull(argNomeCliente) Then strNomeCliente = objUtil.nomeProprio(argNomeCliente) Else strNomeCliente = argNomeCliente End If End Property Property Get renda() As Variant renda = curRenda End Property Property Let renda(argRenda As Variant) curRenda = argRenda 'Alterar classe quando o valor da 'renda for alterado strClasse = calculaClasse() End Property 'Método Existe [Com conhecimento de SQL] 'Verifica a existência do objeto Cliente na tabela correspondente
'no Banco de Dados Function existe(argCodCliente As Variant) As Boolean On Error GoTo Err_existe Dim objCon As New aclConexaoBD Dim rstExiste As Recordset Dim strSql As String existe = False strSql = "Select * " & _ "From Cliente " & _ "Where codCliente = " & objCon.valorSql(argCodCliente) Set rstExiste = objCon.consulta(strSql) If rstExiste.RecordCount > 0 Then existe = True End If 'Fecha o Recordset existe rstExiste.Close Exit_existe: Set rstExiste = Nothing Exit Function Err_existe: existe = False GoTo Exit_existe End Function 'Método Incluir [Com conhecimento de SQL] 'Inclui um novo objeto na tabela correspondente dentro do Banco de dados Private Function incluir() As Boolean On Error GoTo Err_incluir Dim objCon As New aclConexaoBD Dim strSql As String strSql = "Insert Into " & _ "Cliente(codCliente,classe,cpf,email,nomeCliente,renda) " & _ "Values(" & objCon.valorSql(codCliente) & "," _
& objCon.valorSql(classe) & "," & objCon.valorSql(cpf) _
& "," & objCon.valorSql(email) & "," & objCon.valorSql(nomeCliente) _
& "," & objCon.valorSql(renda) & ")" incluir = (objCon.executa(strSql) > 0) If incluir Then 'Atualiza os campos de backup bkpCodCliente = codCliente End If Exit_incluir: Exit Function Err_incluir: incluir = False GoTo Exit_incluir End Function 'Método Excluir [Com conhecimento de SQL] 'Exclui o objeto atual na tabela correspondente dentro do Banco de dados Function excluir() As Boolean On Error GoTo Err_excluir Dim objCon As New aclConexaoBD Dim strSql As String strSql = "Delete From Cliente " & _ "Where codCliente = " & objCon.valorSql(codCliente) excluir = (objCon.executa(strSql) > 0) Exit_excluir: Exit Function Err_excluir: excluir = False GoTo Exit_excluir End Function 'Método Obter [Com conhecimento de SQL] 'Recupera o objeto Cliente através dos argumentos informados Function obter(argCodCliente As Variant) As Boolean On Error GoTo Err_obter Dim objCon As New aclConexaoBD Dim rstObter As Recordset Dim strSql As String strSql = "Select * " & _ "From Cliente " & _ "Where codCliente = " & objCon.valorSql(argCodCliente) Set rstObter = objCon.consulta(strSql) If rstObter.RecordCount = 0 Then obter = False Exit Function End If 'Atualiza os campos de backup e os identificadores codCliente = argCodCliente bkpCodCliente = argCodCliente 'Atualiza os campos restantes strClasse = rstObter.Fields("classe") cpf = rstObter.Fields("cpf") strEmail = rstObter.Fields("email") nomeCliente = rstObter.Fields("nomeCliente") renda = rstObter.Fields("renda") obter = True 'Fecha o Recordset obter rstObter.Close Exit_obter: Set rstObter = Nothing Exit Function Err_obter: obter = False MsgBox Err.Description GoTo Exit_obter End Function 'Método Salvar [Com conhecimento de SQL] 'Salva o objeto atual na tabela correspondente dentro do Banco de dados Function salvar() As Boolean On Error GoTo Err_salvar Dim objCon As New aclConexaoBD Dim strSql As String If existe(bkpCodCliente) Then strSql = "Update Cliente " & _ "Set codCliente = " & objCon.valorSql(codCliente) _
& ", classe = " & objCon.valorSql(classe) _
& ", cpf = " & objCon.valorSql(cpf) & ", email = " _
& objCon.valorSql(email) & ", nomeCliente = " _
& objCon.valorSql(nomeCliente) & ", renda = " _
& objCon.valorSql(renda) _
& " Where codCliente = " & objCon.valorSql(bkpCodCliente) salvar = (objCon.executa(strSql) > 0) Else salvar = incluir End If If salvar Then 'Atualiza as variáveis de backup com o novo valor da chave bkpCodCliente = codCliente End If Exit_salvar: Exit Function Err_salvar: salvar = False GoTo Exit_salvar End Function 'Método calculaClasse 'Calcula a classe social do objeto atual baseado na 'renda informada e devolve uma letra correspondente 'à sua classificação dentro das faixas salariais. Private Function calculaClasse() As String If renda >= 15300 Then calculaClasse = "A" ElseIf renda >= 7650 Then calculaClasse = "B" ElseIf renda >= 3060 Then calculaClasse = "C" ElseIf renda >= 1020 Then calculaClasse = "D" ElseIf renda > 0 Then calculaClasse = "E" Else calculaClasse = "" End If End Function 'Fim da classe...
Pontos Importantes
Nesta primeira classe referente a um objeto atualizável, com atributos modificáveis, passíveis de serem persistidos, podemos notar alguns pontos de interesse para o aprendizado da metodologia, conforme a seguir.
1. Atributos do tipo Variant: Como podemos encontrar objetos cujos campos não são de preenchimento obrigatório devemos manter a possibilidade de atribuir valores nulos aos atributos dos objetos, os quais serão reconhecidos pelo método valorSql(), da classe ConexaoBD, e convertidos da maneira correta para armazenagem na tabela. Caso utilizássemos atributos com os tipos pré-definidos não teríamos como reconhecer um atributo nulo de maneira tão fácil. Neste caso teríamos que procurar métodos alternativos de convenção e tratamento de valores que representariam a nulidade de atributos, como por exemplo uma seqüência de comprimento zero em uma string, ou um valor negativo que provavelmente nunca seria atribuído a um campo de código para chave primária, entre outros. Contudo, para o nosso projeto, contando com a facilidade da atribuição de valores e seus tipos às variáveis do tipo Variant, e a funcionalidade do método valorSql() esta será a forma que adotaremos.
'Nome completo do cliente. Private strNomeCliente As Variant
2. Criação do atributo de backup do objeto: Apesar de não ser necessário quando se usa atributos identificadores do tipo auto-numeração, esta é uma técnica que possibilita a alteração do código identificador do objeto permitindo salvar as modificações posteriormente, já que o antigo valor, que continua armazenado no banco de dados, ainda estará disponível no atributo de backup. Quando se usa qualquer tipo de código personalizado como a chave primária este recurso torna-se indispensável.
'Atributo de backup e atributo identificador da Classe 'PK - Código que identifica o cliente. Private bkpCodCliente As Variant Private lngCodCliente As Variant
3. Validação de dados no momento da atribuição do valor: Neste caso podemos visualizar na prática como validar um dado antes de atribuí-lo ao objeto. Como exemplo verificamos a validade de um CPF fornecido pelo usuário, permitindo ou não a sua utilização. Esta é uma tarefa que evita falhas de digitação e incorreções nos dados armazenados.
Property Let cpf(argCpf As Variant) If Not IsNull(argCpf) Then If Not objUtil.validaCPF(argCpf) Then MsgBox "O CPF <" & Format(argCpf, "000\.000\.000\-00") _
& "> não é válido.", vbExclamation, "CPF Inválido" strCpf = Null Else strCpf = argCpf End If Else strCpf = argCpf End If End Property
4. Conversão de dados no momento da atribuição do valor: Neste caso podemos visualizar na prática como alterar um dado fornecido pelo usuário antes de atribuí-lo ao objeto. Esta tarefa é útil na padronização das informações armazenadas. Como exemplo armazenamos todos os nomes dos clientes no padrão de nomes próprios, com a primeira letra de cada parte do nome em maiúsculas e o restante em minúsculas. Esta funcionalidade é oferecida pelo método nomeProprio() da classe Utilitario, representada pelo objeto objUtil.
Property Let nomeCliente(argNomeCliente As Variant) If Not IsNull(argNomeCliente) Then strNomeCliente = objUtil.nomeProprio(argNomeCliente) Else strNomeCliente = argNomeCliente End If End Property
5. Determinação de uma propriedade baseada em outra: Apesar de não ser uma boa prática e estar diretamente contra as Formas Normais, esta funcionalidade foi colocada apenas para servir de exemplo. Aqui determinamos a classe social a que o cliente pertence a partir da sua renda informada. Para isto utilizamos o método calculaClasse() da própria classe Cliente. A informação é atribuída à propriedade classe e armazenada no banco de dados, lembrando mais uma vez que esta não é uma prática recomendada em sistemas profissionais.
Property Let renda(argRenda As Variant) curRenda = argRenda 'Alterar classe quando o valor da 'renda for alterado strClasse = calculaClasse() End Property
6. Ajuste de código SQL: Para que possamos montar nossas classes sem nos preocupar com o formato SQL dos dados, utilizamos a classe ConexaoBD e seus métodos para fazer todos os ajustes e nos deixar resolver os problemas mais sérios, que requerem nossa atenção. Veja que para nós não será necessário descobrir se o atributo e do tipo texto, data ou numérico. O método valorSql() se encarrega disto. Aqui a classe está representada pelo objeto objCon.
strSql = "Select * " & _ "From Cliente " & _ "Where codCliente = " & objCon.valorSql(argCodCliente)
7. Atributo classe: Para o cálculo da classe social a partir da renda foi utilizada uma tabela fictícia de exemplo, a qual não representa fielmente os valores publicados pelos órgãos competentes.
Outra funcionalidade importante que podemos encontrar nos códigos é o tratamento de erros com a instrução On Error. Apesar de não ser detalhado neste curso é altamente recomendado que o leitor pesquise e compreenda a sua utilização. Foram colocados exemplos simples nos métodos, porém o correto entendimento deste recurso possibilita alta capacidade de resolução de problemas na programação, evitando que possíveis e prováveis erros no projeto ou na implementação sejam visíveis para o usuário final de maneira inadequada.
Mais Funções Auxiliares
Neste projeto não utilizaremos códigos com auto-numeração diretamente nas tabelas. Sendo assim necessitaremos de uma função que realize esta tarefa.
Criaremos então um módulo padrão que conterá todas as funções auxiliares que necessitarmos durante o curso. Ele se chamará Funcoes e nossa primeira função será chamada proximoCodigo().
Este será o código da função:
Function proximoCodigo(argCampo As String, argTabela As String, _
Optional criterio As String = "") As Long proximoCodigo = Nz(DMax(argCampo, argTabela, criterio), 0) + 1 End Function
Ela receberá como parâmetros o nome do campo, o nome da tabela e um critério de busca opcional, devolvendo um número que será o próximo código livre daquele campo numérico da tabela informada.
Desta maneira a função será genérica e servirá para qualquer tabela que contenha um campo chave de código numérico ordenado.
A Interface Gráfica
Para que possamos visualizar e manipular os dados dos clientes devemos criar um formulário com campos para preenchimento e botões de comando que coordenem as ações sobre os dados.
A seguir serão definidas as características para o formulário no qual iremos trabalhar com os dados dos objetos relativos aos clientes. As especificações de design são apenas sugestões, porém as informações de origem de dados, bloqueio de campos e formatos de dados são obrigatórias, sob pena de não obter a funcionalidade desejada. Estas especificações estarão marcadas com um asterisco vermelho ao lado.
No formulário teremos uma lista contendo os clientes cadastrados, um campo de texto para realizar buscas, alguns campos de texto para digitação das informações e os botões de comando para criar, salvar e excluir registros.
Obs: Somente as propriedades que foram alteradas para um valor diferente do padrão serão apresentadas. Para as demais utilize o padrão do sistema ou o valor que desejar, desde que não comprometa a funcionalidade do sistema.
Formulário
Nome: FCliente Largura: 20cm Altura: Cabeçalho (1cm) / Detalhe (10cm) Legenda: Sistema de Vendas Estilo da borda: fino Seletores de registro: Não Botões de navegação: Não Linhas divisórias: Não Barras de rolagem: Nenhuma Caixa de controle: Sim Botão Fechar: Sim Botões Min Max: Nenhum Popup: Sim Janela Restrita: Não
Controle Listbox
Nome: lstCliente * Origem da linha: SELECT Cliente.codCliente, Cliente.nomeCliente,
Format(Cliente.cpf,"000\.000\.000-00") AS cpf FROM Cliente
ORDER BY Cliente.nomeCliente; * Tipo de Origem da Linha: Tabela/Consulta * Coluna acoplada: 1 * Número de colunas: 3 * Largura das colunas: 0cm;5cm;3cm * Largura: 8cm Cor do fundo: Cinza claro
Controles Textbox
Nome: txtPesquisa * Cor do fundo: Amarelo Alinhamento: Esquerda Nome: txtCodigo * Ativado: Não * Bloqueado: Sim * Cor do fundo: Cinza Alinhamento: Centro Nome: txtCpf * Cor do fundo: Azul claro Máscara de entrada: 000.000.000\-00;;_ * Alinhamento: Centro Nome: txtNome * Cor do fundo: Azul claro Alinhamento: Esquerda Nome: txtEmail * Cor do fundo: Azul claro Alinhamento: Esquerda Nome: txtRenda * Cor do fundo: Azul claro Alinhamento: Direita Formato: Unidade Monetária Nome: txtClasse * Ativado: Não * Bloqueado: Sim * Cor do fundo: Cinza Alinhamento: Centro
Botões de Comando
Nome: btnNovo * Legenda: Novo Cor da Fonte: Azul escuro Nome: btnSalvar * Legenda: Salvar Cor da Fonte: Azul escuro Nome: btnExcluir * Legenda: Excluir Cor da Fonte: Vermelho escuro
Como sugestão de design os campos deverão estar posicionados conforme demonstrado na figura a seguir, assim como devem ser adicionadas as legendas dos campos, as quais não foram descritas anteriormente:
Códigos do Formulário
Para que nosso formulário seja capaz de manipular os dados dos objetos cliente deveremos implementar as funcionalidades necessárias que permitam criar um novo cliente, buscar um cliente já cadastrado, editar seus dados, salvá-lo ou excluí-lo.
Sendo assim criaremos algumas funções genéricas que sejam úteis para quantos procedimentos delas necessitem, reaplicando o conceito da reutilização de código. Além disso incluiremos os códigos dos campos que possuem eventos, além dos botões de comando.
Todos os códigos a seguir deverão ser colocados no módulo do formulário FCliente.
1. Pesquisa de clientes: Para facilitar a busca de clientes por qualquer parte do nome utilizaremos um campo de texto cujo valor será o elemento condicional para o código SQL que será atribuído ao controle lstCliente, atualizando sua propriedade Origem da Linha após cada alteração realizada no campo de pesquisa. Para isto devemos colocar o código no evento Ao Alterar do campo txtPesquisa.
Private Sub txtPesquisa_Change() lstCliente.RowSource = "SELECT Cliente.codCliente, Cliente.nomeCliente, " & _
"Format(Cliente.cpf,'000\.000\.000-00') AS cpf " & _ "FROM Cliente " & _ "WHERE nomeCliente Like '*" & txtPesquisa.Text & "*' " & _ "ORDER BY Cliente.nomeCliente;" lstCliente.Requery End Sub
2. Limpeza dos campos: Para efetuar a limpeza dos campos de preenchimento utilizaremos um procedimento genérico cuja função será a de atribuir o valor nulo a todos os campos de texto e enviar o foco ao campo txtCpf.
Private Sub limpaCampos() txtCodigo = Null txtCpf = Null txtNome = Null txtEmail = Null txtRenda = Null txtClasse = Null txtCpf.SetFocus End Sub
3. Novo registro: Para a criação de um novo registro em branco simplesmente iremos chamar o procedimento limpaCampos() no evento Ao Clicar do botão btnNovo.
Private Sub btnNovo_Click() Call limpaCampos End Sub
4. Atualização de campos: Assim como fizemos um procedimento genérico que limpa os campos para a criação de um novo registro teremos também um que preencha os campos com as informações de um objeto cliente passadas como parâmetro, ou seja, o procedimento recebe um objeto completo e lança os valores de seus atributos nos campos do formulário.
Private Sub atualizaCampos(argCliente As clsCliente) txtCodigo = argCliente.codCliente txtCpf = argCliente.cpf txtNome = argCliente.nomeCliente txtEmail = argCliente.email txtRenda = argCliente.renda txtClasse = argCliente.classe End Sub
5. Escolha de cliente: Já que teremos também que trabalhar com clientes já cadastrados, devemos implementar alguma maneira de recuperar suas informações. Faremos isto utilizando a Listbox lstCliente, que utilizará o procedimento atualizaCampos() para preencher os campos com as informações do objeto do cliente que foi clicado.
Private Sub lstCliente_Click() Dim objCliente As New clsCliente Dim codigoCliente As Long codigoCliente = lstCliente.Value If objCliente.obter(codigoCliente) Then Call atualizaCampos(objCliente) End If End Sub
6. Montagem de um objeto: Esta também é uma função genérica que será utilizada por outros procedimentos ou funções. Seu objetivo é criar um novo objeto cliente, coletar os dados digitados nos campos, atribuir ao objeto criado, e devolvê-lo para quem chamou a função.
Private Function buscaCampos() As clsCliente Set buscaCampos = New clsCliente If IsNull(txtCodigo) Then txtCodigo = proximoCodigo("codCliente", "Cliente") End If buscaCampos.codCliente = txtCodigo buscaCampos.cpf = txtCpf buscaCampos.nomeCliente = txtNome buscaCampos.email = txtEmail buscaCampos.renda = txtRenda End Function
7. Salvando um cliente: Depois de informados os dados de um novo cliente, ou alterados os dados de um cliente já cadastrado, necessitaremos de um procedimento que efetue a gravação destes dados. Para isto o botão btnSalvar conterá o código necessário no evento Ao Clicar. Ele fará uso da função buscaCampos(), a qual montará o objeto a ser salvo, e também o método salvar() do objeto, apresentando uma mensagem ao usuário com o resultado da operação. Após salvar os dados de um cliente também deveremos atualizar a Listbox para que apresente estes dados, sejam eles novos ou apenas alterados.
Private Sub btnSalvar_Click() Dim objCliente As clsCliente If Not IsNull(txtCpf) And Not IsNull(txtNome) Then Set objCliente = buscaCampos If objCliente.salvar Then MsgBox "O cliente foi salvo com sucesso.", vbInformation, _
"Salvar Cliente" lstCliente.Requery Call atualizaCampos(objCliente) Else MsgBox "Ocorreu um erro durante o salvamento.", vbExclamation, _
"Salvar Cliente" End If Else MsgBox "Informe os dados do cliente.", vbExclamation, "Salvar Cliente" End If End Sub
8. Excluindo um cliente: Além de criar e alterar os dados de um cliente, é importante que também possamos excluí-lo definitivamente de nosso cadastro. Logo devemos também implementar a funcionalidade para o botão btnExcluir, que conterá o código necessário também no evento Ao Clicar. Ele também deverá fazer uso da função buscaCampos() para a montagem do objeto a ser excluído, pois caso contrário a classe não saberá que objeto deve ser excluído. Em seguida utilizaremos o método excluir() do objeto, apresentando uma mensagem ao usuário com o resultado da operação. É claro que após excluir um cliente também deveremos atualizar a Listbox para que a mesma reflita as alterações realizadas.
Private Sub btnExcluir_Click() Dim objCliente As clsCliente If Not IsNull(txtCodigo) Then If MsgBox("Confirma a exclusão do registro?", vbQuestion + vbYesNo, _
"Excluir Cliente") = vbYes Then Set objCliente = buscaCampos If objCliente.excluir Then MsgBox "O registro foi excluído com sucesso.", vbInformation, _
"Excluir Cliente" lstCliente.Requery Call limpaCampos Else MsgBox "Ocorreu um erro durante a exclusão.", vbExclamation, _
"Excluir Cliente" End If End If End If End Sub
Estes são os procedimentos e funções básicas para que a interface possa manipular os objetos. Não se esqueça de que para efetuar os testes deveremos utilizar um CPF válido devido à verificação realizada.
Sistema de Exemplo
A partir deste artigo será disponibilizado o link para download do sistema de vendas no estado de desenvolvimento em que se encontrar o projeto.
Recomendo aos estudiosos desenvolvedores que o consultem apenas para tirar dúvidas e realizar comparações. Aqueles que realmente quiserem aprender façam toda a codificação e a montagem das telas manualmente. Somente assim a sua mente irá se defrontar com as dificuldades do processo e assimilará os passos necessários para a resolução dos problemas e a conclusão dos objetivos.
Segue o link para download:
Como ainda não há uma tela principal abra o formulário FCliente diretamente na janela Banco de Dados (Access 2003-) ou no Painel de Navegação (Access 2007+).
Conclusão
Enfim demos início à parte mais empolgante do curso, na qual podemos ver o sistema realmente operando, manipulando os objetos. Pudemos ver como se dá a interação entre objetos, a verificação de atributos, a montagem de códigos SQL para busca, alteração, inserção e exclusão de dados, além de visualizar procedimentos simples de tratamento de erros.
Nunca é demais relembrar que o objetivo maior de todas as etapas do curso é apresentar de forma didática, da maneira mais simples possível, a utilização de objetos em projetos do Access/VBA. Sendo assim não considere as implementações apresentadas como o padrão de fato da programação. Muita coisa foi simplesmente omitida ou modificada, mesmo partindo dos próprios padrões que utilizo em meus projetos reais para que fosse alcançada a objetividade necessária ao entendimento por parte de usuários iniciantes ou com pouca experiência na POO.
A lição mais importante deste artigo foi realmente a visualização da dinâmica da utilização dos objetos na manipulação de informações, tanto na sua apresentação quanto na sua persistência.
A partir deste momento, creio, ficará cada vez mais fácil a percepção da operação com objetos, desde que o leitor compreenda bem o que foi visto até agora, pois estes conceitos iniciais são a base da orientação a objetos. Apesar de não contarmos com as outras faces da OO, como a herança por exemplo, com certeza a mente do leitor já começará a visualizar melhor as infinitas possibilidades que a metodologia fornece. Porém relembro que para conseguir dominar a técnica é imprescindível continuar treinando, criando seus próprios códigos, fazendo experiências, resolvendo problemas com a aplicação do paradigma, lendo outros materiais e compartilhando conhecimento, seja com colegas de trabalho, amigos ou em fóruns sobre o assunto.
No próximo artigo, que será muito parecido com este, faremos a implementação da classe Produto, com sua respectiva interface gráfica. Isto ajudará a massificar os conhecimentos adquiridos nesta etapa, pois tudo será relembrado.
Até o próximo...
Artigos Relacionados
Utilizando Classe no Access - Introdução
Utilizando Classe no Access - Parte 1 - Orientação a Objetos
Utilizando Classe no Access - Parte 2 - Programação OO no Access/Vba
Utilizando Classe no Access - Parte 4 - As Classes Auxiliares
Utilizando Classe no Access - Parte 5 - A Classe Cliente
Utilizando Classe no Access - Parte 6 - A Classe Produto
Utilizando Classe no Access - Parte 7 - As Classes Venda e Detalhe de Venda
Utilizando Classe no Access - Parte 8 - Finalização do Sistema
Utilizando Classe no Access - Parte 9 - Genesis: A Ferramenta Case
Utilizando Classe no Access - Parte 10 - Conclusão
Como estudar com o Pesquisador de Objetos
6 comentários Renato Novelli 25/08/2020 14:44:43 Mais uma vez, tenho o prazer de parabenizá-lo pelo excelente artigo! O material aqui publicado tem melhorado muito meu entendimento acerda de programação O.O., além do que tem tornado meus aplicativos melhores e seu código muito mais legível! Muito obrigado por compartilhar essas informações valiosíssimas! Mauricio Mendes 10/08/2020 08:24:59 Chou de bola, ou melhor, chou de aula, adorei, estou esperando o proximo. Plinio Mabesi 02/08/2020 21:10:38 Olá mais uma vez Márcio e Torres, e agora o Cleverson! Obrigado a todos e continuem conosco... cleverson ribeiro - Manaus/AM 02/08/2020 19:20:05 grande curso. já tá na minha biblioteca na seção BESTSELER. Abraços. Torres Forte - PA 29/07/2020 12:14:53 Cara esse curso e realmente impolgante.... estou pronto pra o proximo... ABRAÇO Márcio Melo - Rio de Janeiro/RJ 27/07/2020 01:15:09 Imagina um banco de dados todo construído em O.O., teria uma forte consistência em todos os procedimentos, o acesso a tabela controlado otimizando a rede, evitária o problema de conrrupção de tabela, traria outra vida ao access, parabéns pelos artigos, postei em meu site (http://iniciantejoomla.com/web-links/access) indicando essa verdadeira fonte de conhecimento, forte abraço a todos... Sou mais Brasil!!! |