... Pague apenas R$67,00 uma única vez e tenha acesso por 1 ano aos vídeos e arquivos exemplos do site ...

Clique aqui e obtenha mais detalhes.


Utilizando Classe no Access – Programação OO no Access/Vba

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:

VBA do Access 2007/2010

 

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:

Classe no Access

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:

Classe no Access 2007/2010

 

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:

Usando classe no Access

 

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!


 

 


18 comentários

JBSR (Kartoffel)   28/05/2010 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.

Márcio Melo - Rio de Janeiro/RJ   28/05/2010 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!

Renato Novelli   31/05/2010 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

Plinio Mabesi - Anápolis-GO   02/06/2010 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...

Torres Forte - PA   05/06/2010 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   05/06/2010 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/2010 19:13:38

Muitissimo obrigado!! já estou começando a leitura... rsr

gostei da atenção...

Torres Forte - PA   05/06/2010 19:13:43

Muitissimo obrigado!! já estou começando a leitura... rsr

gostei da atenção...

Americo Carvalho   10/06/2010 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.

Nilo Souza   19/03/2011 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.

Ismael   16/09/2012 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?

Plinio Mabesi   16/09/2012 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.

Domilde   22/01/2013 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....

Plinio Mabesi   22/01/2013 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!!!

Luan   19/07/2013 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.

iara   22/07/2015 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!

Avelino Sampaio   22/07/2015 12:12:42

Iara,

se inscreva no meu fórum e refaça esta pergunta por lá.

http://www.redeaccess.com.br

Te aguardo

Willian Rocha   11/12/2015 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!





Envie seu comentário: