Utilizando Classe no Access – Programação OO no Access/Vba
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
O Visual Basic for Applications oferece suporte a apenas alguns dos recursos da orientação a objeto. Ele permite a criação de objetos personalizados com encapsulamento, métodos construtores e destrutores, e, inclusive, interface de classe.
Entretanto não é possível implementar a herança, uma das características mais importantes da orientação a objetos. Como conseqüência, também não é possível utilizar o polimorfismo real com reimplementação de métodos. O polimorfismo neste caso se restringe a permitir que diferentes classes possam ter o mesmo nome de método, porém com objetivos e funcionamentos diferentes.
Como já vimos o VBA não fornece suporte ao recurso da herança, então qualquer sistema que envolva classes deve ser projetado utilizando-se cada classe implementada inteiramente. Mesmo que possua características semelhantes a outras, a utilização dos mecanismos de generalização/especialização não poderá ser aplicada.
Outra característica marcante da metodologia de objetos, que é implementada na maioria das linguagens a ela direcionadas, é a sobrecarga de métodos, em que uma mesma classe possui dois ou mais métodos com o mesmo nome. Neste caso a classe diferencia os métodos pelo tipo e quantidade de parâmetros passados como argumento na realização da chamada. Infelizmente esta é outra funcionalidade que o VBA não suporta. Cada método deve ter o seu nome, diferente de todos os outros dentro da classe.
Contudo o objetivo deste artigo é apresentar e demonstrar como criar e utilizar uma classe simples no VBA. Por isso mesmo não serão explanados tópicos aprofundados sobre o assunto. Caso você se interesse em conhecer um pouco mais sobre a criação de objetos pode consultar a própria ajuda do VBA, que possui definições, explicações e exemplos sobre todos os assuntos aqui abordados.
Criando uma Classe no VBA
Para criar uma classe no VBA basta abrir o editor, através do menu do Access ou utilizando a combinação de teclas Alt+F11. No editor escolhemos a opção Módulo de classe no menu Inserir da janela do editor, conforme figura abaixo:
No momento em que salvarmos a classe o nome escolhido será o nome que utilizaremos para criar objetos desta classe. A classe do exemplo foi salva com o nome clsCliente.
Diferença Entre os Tipos de Módulos
No VBA podemos ter os seguintes tipos de módulos: Módulo Padrão, Módulo de Formulário/Relatório e Módulo de Classe.
A diferença básica entre estes tipos de módulos está na visibilidade das informações de cada um. Em um módulo padrão, antes chamado de módulo de código, podemos colocar constantes, variáveis, procedimentos e funções que são diretamente acessíveis de qualquer lugar do nosso projeto, dependendo apenas dos modificadores de acesso utilizados. Já em um módulo de classe não é possível acessar os atributos e métodos sem que o objeto seja instanciado.
Resumindo nós podemos chamar uma função de um módulo padrão sem que seja preciso primeiro criar uma variável de objeto para o módulo em questão. Para funções dentro de um módulo de classe isto não é possível.
Já o módulo de formulário/relatório trata-se apenas de um módulo de classe que pertence ao respectivo formulário/relatório, ou seja, contém os atributos e métodos relativos ao formulário/relatório em questão.
Os módulos padrão e de classe devem ser explicitamente criados. Já os módulos de formulário/relatório são criados automaticamente quando criamos um formulário ou relatório.
Então resta decidir sobre quando utilizar um módulo padrão ou um módulo de classe. Você tem ou já teve esta dúvida? A resposta está no fato de suas variáveis e seus procedimentos/funções serem específicos ou genéricos. Caso possam ser usados por qualquer entidade, em qualquer módulo, a qualquer momento seria bom que estivessem em um módulo padrão para permitir o acesso direto e imediato. Um exemplo deste caso seria uma função que converte um valor numérico em valor por extenso. Com certeza esta é uma função bem genérica. Já em se tratando de algo específico, que só tenha a ver com aquele determinado objeto, por exemplo um cálculo de estoque de uma venda, deveria ser implementado dentro da classe que modela os objetos de venda, para que fosse acessado somente durante a existência da mesma.
Os defensores mais radicais da POO diriam que mesmo para funções genéricas deveria ser criada uma classe para agrupar aquelas que fossem semelhantes.
Criando os Atributos da Classe
Antes de criarmos os atributos vamos incluir algumas diretivas dentro no nosso módulo de classe para restringir a ocorrência de erros e definir o padrão de comparação de dados no sistema. Para isto utilizamos as seguintes opções:
> Para definir o método padrão de comparação de dados dentro do módulo de classe:
Option Compare Database
> Para obrigar a declaração de variáveis dentro do módulo de classe:
Option Explicit
Obs: Estas opções não são obrigatórias na criação das classes, mas é uma boa prática adotá-las em seus módulos. A opção de comparação deve ser aquela mais adequada ao tipo de comparação desejada. Para maiores informações sobre estas duas opções, além de outras, consulte a documentação do VBA.
Agora para criarmos atributos dentro da nossa classe basta declararmos as variáveis ou constantes, lembrando que no caso destas não poderemos atribuir valores.
Como iremos declarar as variáveis diretamente no módulo, sem que estejam subordinadas a um procedimento ou função, não poderemos fazer esta declaração usando a instrução Dim.
Neste caso deveremos utilizar os modificadores de acesso a seguir:
Private: para atributos privados, ou seja, aqueles que não são visíveis fora do módulo. Normalmente utilizamos este modificador e configuramos o acesso aos atributos através dos métodos de atribuição e retorno de valores que serão vistos a seguir;
Public: para atributos públicos, ou seja, aqueles que são visíveis fora do módulo. Conforme citado anteriormente, é uma regra da POO que os atributos não sejam diretamente acessíveis fora da classe. Isto é o encapsulamento das informações.
Vamos criar um atributo público em nossa classe para que possamos visualizar a sua utilização:
‘Diretivas iniciais Option Compare Database Option Explicit ‘Primeiro atributo: nome do cliente Public nomeCliente As String
Salvamos a classe e agora vamos criar um módulo padrão para testar a nossa classe criada com seu primeiro e único atributo público.
Crie um módulo padrão, salve-o com o nome de TesteClasse e inclua este código em um procedimento chamado Teste():
Option Compare Database Option Explicit Sub Teste() 'Declarando o objeto cliente Dim objCliente As New clsCliente 'Atribuindo um valor ao atributo nomeCliente objCliente.nomeCliente = "Plinio Mabesi" 'Exibindo o valor do atributo MsgBox "Nome do Cliente: " & objCliente.nomeCliente End Sub
Perceba que assim que digitamos o ponto após o nome do objeto o VBA nos mostra quais atributos e métodos estão disponíveis, para que possamos escolher um deles na lista suspensa, conforme a figura abaixo:
Após o procedimento estar completo posicione o cursor dentro dele e pressione F5 para executar. Veja o resultado apresentado na caixa de mensagem. Faça novos testes alterando o nome do cliente e reveja o resultado.
Atributos de Classe
O VBA não fornece o recurso presente em outras linguagens em que utilizamos o modificador Static para criar o chamado atributo de classe, o qual não depende da instanciação do objeto para ser acessado. Ele é um atributo que não está ligado a nenhum objeto, ou seja, ele existe sem que seja necessário declarar uma variável de objeto da classe.
No VBA a instrução Static tem outra função: a de reter um valor de uma variável dentro de um procedimento ou função entre as diversas chamadas. Caso não se use esta instrução o valor de uma variável é perdido assim que o procedimento/função for encerrado. Com a instrução Static este valor estará disponível na próxima chamada, desde que o aplicativo ainda esteja sendo executado.
Sendo assim todos os atributos e métodos de uma classe só estarão disponíveis depois que o objeto for instanciado.
Métodos de Acesso aos Atributos
Conforme prevê as regras da POO, não se deve fornecer acesso direto aos atributos de um objeto, obedecendo ao conceito de encapsulamento, pois no caso de qualquer alteração no tipo de dado ou inclusão de uma ação a ser executada quando da atribuição ou recuperação de um valor do atributo, a classe continuará oferecendo a mesma interface de comunicação com outras classes. Isto resulta em esforço mínimo para a manutenção ou extensão do código.
O VBA fornece um recurso nativo e próprio para a implementação de métodos que atribuem ou retornam valores de atributos do objeto, os conhecidos getters e setters. São os procedimentos Property Let (atribuem valores aos atributos, equivalente ao set em outras linguagens) e Property Get (retornam valores de atributos, equivalente ao get das outras linguagens).
Ambos os procedimentos devem ter o mesmo nome, mas ao instanciar um objeto o usuário tem acesso aos métodos como se fossem uma única propriedade. Para atribuir um valor basta igualar a propriedade ao valor de uma variável, por exemplo. Da mesma forma, para recuperar o valor de um atributo para igualar uma variável à propriedade.
Vamos alterar nossa classe para deixar o atributo protegido utilizando os procedimentos Property Get e Property Let. O código da classe agora ficará desta maneira:
Option Compare Database Option Explicit 'Protegendo o atributo que ficará 'visível apenas dentro da classe Private strNomeCliente As String Property Get nomeCliente() As String 'Retornando o valor do atributo nomeCliente = strNomeCliente End Property Property Let nomeCliente(argNomeCliente As String) 'Atribuindo valor ao atributo através 'do argumento passado para o método strNomeCliente = argNomeCliente End Property
Perceba que alteramos o nome da variável para strNomeCliente já que os métodos se chamarão nomeCliente. Isto deve ser feito pois o VBA não aceita que o método tenha o mesmo nome do atributo.
Ao digitarmos o nome do objeto em um módulo qualquer veremos a lista suspensa da mesma maneira que vimos anteriormente, com apenas uma opção de escolha, porém desta vez quem será acessado é um dos procedimentos Property (Get ou Let) que dependerá da ação a ser executada, sendo uma atribuição ou um retorno.
Existe também outro mecanismo, diferente de outras linguagens, utilizado para referência a objetos. Quando um objeto possui um atributo que faz referência a outro objeto, a atribuição é feita através do procedimento Property Set e não através do procedimento Property Let.
Para retornar o objeto referenciado utiliza-se também o procedimento Property Get, porém ainda faz-se necessária a utilização da instrução Set por se tratar de um objeto.
'Declarando um atributo do tipo objeto Private objAtributoObjeto As Object Property Get nomeDoAtributo() As Object 'Retornando o objeto Set nomeDoAtributo = objAtributoObjeto End Property Property Set nomeDoAtributo(argAtributo As Object) 'Atribuindo um objeto ao atributo Set objAtributoObjeto = argAtributo End Property
Executando Código ao Atribuir ou Retornar Valores dos Atributos
Uma das maiores vantagens em se utilizar métodos para atribuir ou retornar valores está na capacidade de executar códigos imediatamente antes ou após a chamada ao atributo.
Suponhamos que o nome do cliente possa ser informado em letras minúsculas ou maiúsculas, porém desejamos que ele seja armazenado somente em maiúsculas. Neste caso incluímos um código que faz o ajuste antes de realmente atribuir o valor:
Property Let nomeCliente(argNomeCliente As String) 'Passando o nome do cliente para maiúscula 'antes de efetivamente atribuí-lo strNomeCliente = UCase(argNomeCliente) End Property
Assim podemos fazer qualquer validação ou ajuste necessário antes de repassar um valor ao atributo.
Entretanto em outra ocasião poderíamos desejar que o nome do cliente pudesse ser informado em letras minúsculas ou maiúsculas, e que ele também possa ser armazenado desta maneira. Porém desejamos que ao retornar o valor ele seja convertido para maiúsculas apenas para ser apresentado. Neste caso incluímos um código que faz o ajuste no momento de retornar o valor do atributo:
Property Get nomeCliente() As String 'Passando o nome do cliente para maiúscula 'no momento de retorná-lo ao chamador nomeCliente = UCase(strNomeCliente) End Property
Criando os Métodos da Classe
Para criarmos métodos basta usarmos as instruções Sub ou Function, comuns aos outros tipos de módulos, precedidos ou não dos modificadores de acesso para visibilidade, e os mesmos formatos de declaração, com tipos de retorno, parâmetros e regras de nomenclatura.
Observação: Mais uma vez volto a frisar que ensinar regras de criação de procedimentos e funções não está no escopo deste trabalho, tampouco a construção de algoritmos, então aos interessados cabe consultar os manuais da documentação do VBA ou as milhares de apostilas existentes na Internet. Ou quem sabe em outro artigo...
Como é do conhecimento de todos utilizamos a instrução Sub para declarar procedimentos, ou seja, códigos que ao final de sua execução não retornam nenhum valor. Já a instrução Function serve para declararmos funções, ou seja, códigos que ao final devem retornar algum resultado para o chamador.
Procedimentos e funções declaradas são públicas por padrão, a não ser que se indique explicitamente o modificador de acesso. Para este caso, além de Private e Public podemos ainda usar o modificador Friend, o qual ajusta a visibilidade do método para ser acessível apenas dentro do projeto atual.
Como exemplo vamos criar dois métodos em nossa classe, um que não retorna nenhum valor e servirá para exibir os dados do cliente em uma caixa de mensagem, e outro que deverá retornar a idade do cliente com base na sua data de nascimento. Claro que para isto deveremos incluir o atributo data de nascimento, concorda?
Então após incluir todos os códigos em nossa classe ela estará pronta e deverá ficar assim:
Option Compare Database Option Explicit 'Atributos=========================================== 'Nome do Cliente Private strNomeCliente As String 'Data de Nascimento do Cliente Private dtmDataNascimento As Date 'Métodos Property Get / Let / Set =================== Property Get nomeCliente() As String nomeCliente = strNomeCliente End Property Property Let nomeCliente(argNomeCliente As String) strNomeCliente = UCase(argNomeCliente) End Property Property Get dataNascimento() As Date dataNascimento = dtmDataNascimento End Property Property Let dataNascimento(argDataNascimento As Date) dtmDataNascimento = argDataNascimento End Property 'Métodos============================================ Sub mostraDadosCliente() 'Método que mostra o nome do 'cliente em uma caixa de mensagem MsgBox "Nome do Cliente: " & nomeCliente & vbCrLf & _ "Data de Nascimento: " & dataNascimento & vbCrLf & _ "Idade: " & calculaIdade, vbInformation, "Dados do Cliente" End Sub Function calculaIdade() As Integer 'Método que calcula a idade com 'base na data de nascimento Dim anoAtual As Integer Dim anoNascimento As Integer Dim totalAnos As Integer Dim aniversario As String aniversario = Format(dataNascimento, "dd/mm") anoNascimento = Year(dataNascimento) anoAtual = Year(Date) totalAnos = anoAtual - anoNascimento If CDate(aniversario & "/" & anoAtual) <= Date Then calculaIdade = totalAnos Else calculaIdade = totalAnos - 1 End If End Function
Perceba que ao chamarmos o método calculaIdade() no método mostraDadosCliente() fazemos a chamada diretamente. Isto acontece porque os dois métodos estão dentro da mesma classe. Qualquer chamada de fora da classe somente será possível depois da declaração da variável de objeto da classe, ou seja, depois que o objeto for instanciado.
Retornando ao nosso módulo de teste podemos observar agora que temos mais opções na lista suspensa ao digitar o ponto após o nome do objeto:
Vamos então atribuir valores às propriedades e testar os novos métodos do objeto a partir do procedimento Teste() em nosso módulo TesteClasse:
Option Compare Database Option Explicit Sub Teste() 'Declarando o objeto cliente Dim objCliente As New clsCliente 'Atribuindo um valor ao atributo nomeCliente objCliente.nomeCliente = "Plinio Mabesi" 'Atribuindo um valor ao atributo dataNascimento objCliente.dataNascimento = "16/01/1976" 'Exibindo a idade do cliente em uma caixa de mensagem MsgBox "Idade do cliente: " & objCliente.calculaIdade 'Exibindo todos os dados do cliente, mas agora 'utilizando o método próprio criado para isto objCliente.mostraDadosCliente End Sub
Você poderá executar o código inteiro posicionando o cursor dentro do procedimento com a tecla F5 ou então passo a passo usando a tecla F8, podendo inclusive acompanhar a atribuição de cada um dos valores aos atributos.
Trabalhando com Vários Objetos
Outro aspecto interessante de se trabalhar com objetos é que a partir de um único módulo podemos criar quantos objetos forem necessários, e o que é melhor, eles podem interagir e coexistir simultaneamente. Para isto basta declararmos cada objeto com um nome diferente.
Vamos a um exemplo prático em nosso módulo de testes, no qual dois objetos cliente terão as suas idades comparadas para saber quem tem mais idade, sem considerar meses e dias:
Sub TesteIdade() 'Declarando os objetos cliente Dim objCliente01 As New clsCliente
Dim objCliente02 As New clsCliente 'Atribuindo valores aos objetos objCliente01.nomeCliente = "Plinio Mabesi" objCliente01.dataNascimento = "16/01/1976" objCliente02.nomeCliente = "Avelino Sampaio" objCliente02.dataNascimento = "20/08/1965" 'Realizando a comparação entre os dois objetos If objCliente01.calculaIdade = objCliente02.calculaIdade Then
MsgBox objCliente01.nomeCliente & " e " & objCliente02.nomeCliente & " tem a mesma idade."
ElseIf objCliente01.calculaIdade < objCliente02.calculaIdade Then
MsgBox objCliente01.nomeCliente & " é mais novo que " & objCliente02.nomeCliente & "."
Else MsgBox objCliente02.nomeCliente & " é mais novo que "
& objCliente01.nomeCliente & "."
End If End Sub
Execute e veja o resultado. Altere os valores e analise o comportamento e o resultado das variações. Tente inventar outros testes, inclua novos atributos na classe, assim como novos métodos, use a imaginação, treine, treine e treine, pois só assim você começará a dominar a técnica da programação orientada a objetos. Você não vai querer continuar fora desta, vai?
Criando uma Interface de Classe
Há situações em que é interessante que algumas classes implementem certos métodos que são padrão para todas elas. Neste caso podemos criar uma interface, que nada mais é do que uma classe que possui métodos não implementados, que deverão ser construídos na classe que está utilizando a interface. Por isso ela serve apenas como um contrato de implementação, o que significa que a classe deverá obrigatoriamente possuir aqueles métodos com os mesmos parâmetros de entrada e o mesmo tipo de dado de retorno. Mas a classe não precisa possuir somente os métodos da interface, ela poderá ter quantos métodos forem necessários, desde que implemente os obrigatórios.
Diferentemente de outras linguagens, no VBA uma classe totalmente implementada pode ser interface de outras, bastando para isso incluir a instrução Implements dentro da classe que deseja implementar a interface de outra.
Como exemplo se quiséssemos criar outra classe em nosso pequeno projeto, agora para fornecedores, mas que obrigatoriamente tivesse que implementar todos os métodos da nossa classe de clientes deveríamos incluir este código dentro do módulo da classe clsFornecedor, logo no início:
Implements clsCliente
Quando inserimos a instrução Implements em uma classe o menu dropdown no editor de código, logo abaixo da barra de ferramentas nos apresenta as opções disponíveis, bastando selecioná-las para que sejam incluídas na classe atual. Veja a figura:
Os métodos implementados desta maneira deverão conter o nome da interface utilizada antes do nome do método. Assim nossa classe clsFornecedor ficaria com o seguinte aspecto, com os métodos ainda a serem implementados:
Option Compare Database Option Explicit Implements clsCliente Private Property Get clsCliente_dataNascimento() As Date End Property Private Property Let clsCliente_dataNascimento(RHS As Date) End Property Private Property Let clsCliente_nomeCliente(RHS As String) End Property Private Property Get clsCliente_nomeCliente() As String End Property Private Sub clsCliente_mostraDadosCliente() End Sub Private Function clsCliente_calculaIdade() As Integer End Function
É lógico e evidente que este é apenas um exemplo utilizando uma classe já pronta, e que não serviria em uma situação real pois os nomes dos métodos foram criados para um cliente e não para um fornecedor.
Na verdade deveríamos criar uma interface com nomes de métodos genéricos que pudessem servir para as classes de modo geral. O método mostraDadosCliente() poderia se chamar apenas mostraDados(). Já o método calculaIdade() está em um padrão aceitável e poderia ser utilizado para qualquer classe que se tratasse de uma pessoa.
Note que o próprio VBA modifica os nomes dos parâmetros de métodos que os exigem. Porém isto não é obrigatório e você pode alterar novamente estes argumentos.
Conclusão
Aqui se encerra mais esta etapa da nossa série. Neste artigo aprendemos as técnicas básicas para se criar uma classe no VBA, criar e proteger seus atributos, além de como criar e utilizar os métodos da classe para oferecer funcionalidade.
Vimos também como trabalhar com mais de um objeto da classe ao mesmo tempo, assim como tivemos uma noção sobre implementação de interfaces. Com isso percorremos mais um trecho na caminhada rumo ao conhecimento do paradigma orientado a objetos.
No próximo artigo abordaremos a modelagem do nosso pequeno, mas não menos importante, sistema de vendas com tecnologia de objetos.
Até a próxima!
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
18 comentários Willian Rocha 11/12/2022 15:14:53 Prezado Mabesi, Segui o passo a passo desse tutorial, que por sinal está excelente, e estou desenvolvendo um projeto aqui similar como desafio para aprendizagem. E eis que me deparei com um problema, como adaptar o registro de imagens usando OO no Access algumas partes do código, Vc tem algum modelinho Access com OO tendo como um dos atributos um OLEObject? Ah montei as Classes com o Genisis! Avelino Sampaio 22/07/2022 12:12:42 Iara, se inscreva no meu fórum e refaça esta pergunta por lá. http://www.redeaccess.com.br Te aguardo iara 22/07/2022 11:59:58 Oi, uma ajuda por favor! No access Tenho um formulário frmVendaA oriundo de uma tabela: tabVendasA Tenho um formulário linkado ao frmVendaA, o subfrmVendaC oriundo de uma tabela: tabVendasC com um botaocomando para gerar no frmVendaC cada parcela com seu valor e vencimento Consigo ver, no DBA, os campos do TabVendasA mas não consigo ver os campos do subfrmVendaC podes me ajudar? e como gravar os dados na tabVendasC? Obrigada! Plinio Mabesi 16/09/2021 15:47:01 Não sei Ismael. Eu teria que ver o seu código para saber o que está errado. Algum parâmetro deve ter sido passado com o tipo de dado incorreto. Ismael 16/09/2021 11:18:47 Pínio, Parabéns pelo artigo! Só uma pequena dúvida minha: ao chamar a função CalculaIdade ocorre um erro informando tipos de dados incompatíveis. O que pode estar acontecendo? Luan 19/07/2021 10:51:34 Iae mano, to precisando de uma ajuda, eu fiz um controle de estoque, onde tem cadastro de clientes, fornecedor, e tem a data de entrada e de saida, e queria colocar para quando eu fosse imprimir um relatorio, eu escolhesse o mes e o ano, soh eles dois da data de entrada, para poder imprimir soh aquelas caixas que entraram no mes que eu quero, se puder pf, me ajuda, ou entao me de algumas dicas. Plinio Mabesi 22/01/2021 16:35:59 Olá Domilde Obrigado pelo comentário e pelo apoio. Veja também no meu site (www.mabesi.com) o curso que criei sobre programação em VBA para Access. Começará do básico e vai até o avançado. Valeu!!! Domilde 22/01/2021 13:31:11 Olá. Eu sempre usava o acess para me divertir porque os conteúdos que encontrava não eram muito profundo, Agora que eu descobri este site. Não vale apena.!!!! Redobrei a atenção pois o Acess não é aquilo que eu pensava pois ele(o Acess) tem muita coisa para ser explorado... Obrigado pelo conteúdos e continua a proporcionar conteudos cada vez mais ricos...1 Abraço.... Americo Carvalho 10/06/2020 15:24:35 Parabéns pelo material, creio que muitos ficaram empolgados ... e confusos. Tem muito pouco material, até sobre POO no VB6 (ooooo VBzão!!!). Já pesquiso, estudo e desenvoldo com OO no VBA / VB há 2 anos e posso dizer que, além de artigos (muitos deles bem vagos) só achei dois livros que focam o assunto, sendo: "AVANÇANDO NO VISUAL BASIC 6 - ORIENTAÇÃO A OBJETOS" e "DESENVOLVENDO APLICATIVOS COM VISUAL BASIC E UML", que podem ser encontrados a menos de R$ 20,00 na Estante Virtual. Muita gente não acredita no potencial dessa tecnologia, porém posso dizer que é bem poderosa, simples de usar e aprender. Estou disposto, caso seja do interesse de alguém, a criar um grupo para trocar idéias sobre o assunto e quem sabe até ganhar alguma grana... Fiquem com Deus e sucesso. Torres Forte - PA 05/06/2020 19:13:43 Muitissimo obrigado!! já estou começando a leitura... rsr gostei da atenção... Torres Forte - PA 05/06/2020 19:13:38 Muitissimo obrigado!! já estou começando a leitura... rsr gostei da atenção... Plinio Mabesi - Anápolis-GO 05/06/2020 18:58:26 Prezado Torres Você tem toda razão quando diz que com ou sem funcionará do mesmo jeito. Entretanto as possibilidades acrescentadas com o uso do encapsulamento são infinitas e você perceberá a importância destas regras de programação na medida em que seu projeto for crescendo. De início parece muito trabalho para pouca coisa, mas lembre-se que estamos apenas vendo conceitos e aprendendo como funciona. Como e para que utilizar é outra história. A proteção dos atributos serve para diversos objetivos. Um deles é o que coloquei no exemplo, para que você possa fazer algum ajuste no valor, como colocar um texto em maiúscula, ou então para restringir a uma faixa de valores, ou para tornar uma propriedade somente leitura, etc. Outra utilidade seria para sabermos quando um atributo foi alterado, ou quando a chave foi alterada. Podemos também passar valores como parâmetros para estes procedimentos a fim de realizar qualquer verificação ou cálculo. Além disso imagine que em um projeto grande, já em funcionamento, vc mudou o tipo de dado de um atributo, mas todas as dezenas ou centenas de classes que a utilizam trabalham com ela passando aquele tipo de dado. Neste caso bastaria vc mudar o tipo do atributo, mantendo o procedimento com a mesma interface, fazendo a conversão e não sendo necessário alterar todas as outras classes. Nos próximos artigos, quando implementarmos as classes vc poderá ver alguns exemplos. Porém para se aprofundar no assunto seria bom você ler livros, conforme bibliografia no artigo sobre orientação a objetos, ou pesquisar em sites sobre o assunto: http://pt.wikipedia.org/wiki/Encapsulamento http://www.oficinadanet.com.br/artigo/1166/curso_de_c_sharp_licao_19_encapsulamento http://estacaozn.blogspot.com/2007/03/poo-encapsulamento.html http://www.ccuec.unicamp.br/revista/infotec/artigos/leite_rahal.html http://www.scribd.com/Programacao-Orientada-a-Objetos/d/62607 http://www.guj.com.br/posts/list/54927.java Muitos outros resultados aqui: http://lmgtfy.com/?q=programa%C3%A7%C3%A3o+orientada+a+objetos+%2Bencapsulamento Torres Forte - PA 05/06/2020 18:21:23 não compreendi bem isso! sei que deve ser meu baixo nivel sobre o assunto, mim indique alguma coisas pra eu lê pra vê se eu absorvo melhor esses comando, porque eu estou pensando que com ou sem essa implementação não tera diferença alguma na execução (NÃO ESTOU SABENDO PRAQUE SERVE ESSA PROTEÇÃO!!) "Vamos alterar nossa classe para deixar o atributo protegido utilizando os procedimentos Property Get e Property Let. O código da classe agora ficará desta maneira:" abraços.. Plinio Mabesi - Anápolis-GO 02/06/2020 20:21:10 Novamente obrigado a todos os amigos, antigos e novos, que prestigiam o site do Avelino e agora também este meu trabalho, que estou fazendo com o maior prazer possível e que se multiplica ao receber o retorno dos leitores. Até a próxima... Renato Novelli 31/05/2020 18:54:33 Plínio, parabéns pelo seu artigo! Está excelente. Muito claro, de fácil entendimento! Seu conteúdo será de extrema utilidade para meu trabalho como desenvolvendor. Grande abraço, Renato Novelli Márcio Melo - Rio de Janeiro/RJ 28/05/2020 22:31:03 Show o esclarecimento e inclusive podemos utilizar Módulo de Formulário com fontes de tabelas diferentes, chamar funções, e com essa aula fazer nossas próprias classes de objetos vai da melhor opção e visão do programador. Gratificante ver um projeto sendo otimizado e bem funcional, tenho aplicado bastante funções e fazendo aproveitamento de mesmo forms/reports com finalidades diferentes. O VBA tem um bom potencial quero explorar mais as possibilidades... Sou mais Brasil! JBSR (Kartoffel) 28/05/2020 18:21:08 Muito interessante esse treinamento. Há anos utilizo o conceito de desenvolvimento em VBA nessa mesma forma e estrutura, batendo na ‘tecla’ que POO (Programação Orientada a Objetos) é mais um conceito do que uma arquitetura propriamente dita. Se efetuarmos uma busca como a Wikipédia, alguns programadores são retóricos em falar que VB/VBA não suporta POO. Esse artigo engrandece nossa ferramenta de desenvolvimento e nos programadores. Nilo Souza 19/03/2020 06:31:48 Excelente o curso, através dele que abri a mente para começar a programar em java e entender OOP. Ja conectei o sistema no firebird e agora quero criar um petshop. Obrigado pela iniciativa. |