O ainda muito usado Visual Basic 6.0 ou o nosso atualíssimo VBA (Visual Basic For Applications) contido no MS Office, por sua natureza, não são linguagens que implementam todas as características de uma linguagem totalmente orientada a objetos como o Java ou até mesmo seu irmão mais novo VB.net (C# também).
Os quatro pilares da orientação a objetos são: (1) abstração, (2) encapsulamento, (3) polimorfismo e (4) herança.
Não pretendo entrar nos detalhes de cada um desses tópicos mas, apenas esclarecer que o VBA não é uma linguagem que permite herança e, consequentemente, não permite polimorfismo através de herança.
… mas …
Mas VBA (e VB6) permitem polimorfismo através de implementação de interfaces.
Vamos ao exemplo:
Primeiramente criamos um módulo de classe que apenas declara uma função chamada [fazerCalculo] e servirá de interface para outras classes.
Em segundo lugar, implementamos esta interface nas classes que irão implementar o método [fazerCalculo] (no caso Soma e Subtracao). Entenda-se implementar o método por torná-lo de fato útil, ou seja, codificar o seu comportamento. Lembre-se que na classe Calculador que apenas serviria de interface, o método [fazerCalculo] não sofreu nenhuma implementação.
Abaixo a implementação das classes Soma e Subtracao (sem ç e ~) através da instrução da linguagem [Implements]:
Por último segue o exemplo de utilização dessas classes (Soma e Subtracao) que implementam a inteface Calculador.
Repare que em função de um parâmetro definido como ENUM da função calcular, teremos a classe correta instanciada e a operação escolhida realizada.
Observe que a implementação do método [fazerCalculo] é, então, decidida em tempo de execução.
Se quiser fazer o download desta planilha que utilizei para escrever este post por favor clique neste Calculo.zip.
Leia também:
Sabe para que serve o Módulo de Classe do VBA ?
Re-aproveitando eventos no VBA – The Observer Pattern – Eventos em interfaces não dá …
VBA, organizando coleções seguindo princípios da orientação a objetos.
Pingback: Re-aproveitando eventos no VBA – The Observer Pattern – Eventos em interfaces não dá … | Pedro Abs
Pingback: Desenvolvendo VBA e XML, utilizando a API SAX (Simple API for XML) | Pedro Abs
Pingback: Desenvolvendo VBA e XML, utilizando a API DOM (Document Object Model) | Pedro Abs
Artigo esclarecedor objetivo. Muito bom!
GostarGostar
Pedro, bom dia.
Cara, tudo relacionado a Módulos de Classes eu desconhecia, até encontrar seu site.
Estou boquiaberto com as explicações … com certeza esta entrando para os favoritos.
Agora, deixa eu aproveitar e perguntar uma coisa: você disse que não é possível realização de herança no VBA, mas poderia criar um procedimento em Módulo de Classe em um Suplemento Excel ou COM, e este ser utilizado por outro arquivo?
Aguardo sua resposta ansiosamente.
Abraços!!!
GostarGostar
Mikel, obrigado de suas palavras. Peço para que você entre em contato abaixo e quando você me enviar um e-mail, lhe informo meu telefone ou Skype.
https://pedroabs.wordpress.com/entre-em-contato/
GostarGostar
Então Mikel, você pode re-aproveitar funcionalidades desenvolvidas colocando-as dentro de um plugin do MS Excel ou compilando-as em uma DLL COM. Porém, quando eu me refiro a herança, quero dizer re-aproveitar funcionalidades dentro do seu próprio código. Herança é um conceito que as linguagens totalmente orientadas a objetos como Java, C++, e outras (.net) implementam. Herança significa uma classe herdar características de uma superclasse. Comumente nos referimos a herança com a pequena frase “é um”, por exemplo: Carro é um Veiculo. Poderíamos ter uma classe Carro que herdasse as funcionalidades da classe Veiculo….
GostarGostar
Dá uma olhada neste artigo também:
https://pedroabs.wordpress.com/2013/09/03/sabe-para-que-serve-o-modulo-de-classe-no-vba-excel-word-access-etc/
GostarGostar