Mês corrido sem nenhuma postagem aqui no blog, mas para o mês não passar em branco vamos dar continuidade à orientação a objetos no VBA.
Uma maneira que sempre vejo as pessoas explicando classes, diz que uma maneira de entendê-las é pensando num animal.
Um animal é um ser vivo. Porém não podemos dizer que todos são iguais, cada um tem suas características (propriedades) e suas ações (métodos), pois bem, em nosso exemplo usaremos esta idéia para desenvolver nossas classes.
Neste exemplo criaremos diversas classes, todas elas serão derivadas (Herança) da classe Animal, e cada uma das outras classes terão os mesmos métodos com cada uma executando uma ação distinta , isto em orientação a objetos é chamado de polimorfismo,sendo capacidade do objeto assumir diversas formas em sua existência (instância).
Bom vamos lá!
Inserindo um Módulo de classe no nosso projeto, chamaremos esta classe de Animal, nela será inserido o seguinte código
Public Property Let Sou(nValue As String) End Property Public Property Get Sou() As String End Property Public Function Falar() End Function Public Function Mostrar() End Function
Repare que os métodos definidos estão vazios, porque na verdade a implementação (guarde este nome) desta classe será feita nas classes derivadas dela.
Agora iremos criar um segundo módulo de classe, este será chamado de Cachorro, ora se o cachorro é um animal ele (no nosso exemplo) irá possuir os dois métodos que definimos Falar e Mostrar, mas como digo ao meu cachorro que ele é um cachorro? (no programa viu)
O Código para a classe que criamos é o seguinte
Implements Animal Private nValor As String Private Function Animal_Falar() As Variant Application.Speech.Speak "au au au" End Function Private Function Animal_Mostrar() As Variant MsgBox nValor & ":Au Au" End Function Private Property Let Animal_Sou(Tipo_Animal As String) nValor = Tipo_Animal End Property Private Property Get Animal_Sou() As String Animal_Sou = nValor End Property
Analisando este código vemos que a primeira linha utiliza o implements , neste momento o nosso cachorro fica sabendo que é um animal!
Depois definimos os métodos que serão ativados quando o nosso Animal (neste caso um cachorro) for criado, nos métodos Animal_Falar e Animal_Mostrar definimos as ações que serão executadas.
Nas Linhas Get/Let Animal_Sou , definimos ao animal de qual tipo ele será. Com o Let definimos o valor, e por isto é necessário uma váriavel local declarada como NValor, de onde será retornada quando utilizarmos o Get.
Seguindo esta mesma Lógica, criaremos mais duas Classes, a Gato com o seguinte código
'Classe Gato Implements Animal Private nValor As String Private Function Animal_Falar() As Variant Application.Speech.Speak "miau miau" End Function Private Function Animal_Mostrar() As Variant MsgBox nValor & ":Miau Miau" End Function Private Property Let Animal_Sou(Tipo_Animal As String) nValor = Tipo_Animal End Property Private Property Get Animal_Sou() As String Animal_Sou = nValor End Property
E a classe Homem (Sim somos animais, como alguns políticos sempre me fazem o desprazer de lembrar)
'Classe Homem Implements Animal Private nValor As String Private Function Animal_Falar() As Variant Application.Speech.Speak "oi tudo bem?" End Function Private Function Animal_Mostrar() As Variant MsgBox nValor & ": Eu Falo, penso, logo existo!" End Function Private Property Let Animal_Sou(Tipo_Animal As String) nValor = Tipo_Animal End Property Private Property Get Animal_Sou() As String Animal_Sou = nValor End Property
Para este exemplo usaremos estas classes...
Agora realmente vem a implementação das classes criadas...Crie um formulário , nele coloque um combobox, e dois botões. Mantenha os mesmos nomes de criação.
Para o formulário utilize o seguinte código:
Private Sub CommandButton1_Click() 'Instancia a classe animal, e define qual o animal selecionado no combo, executando a ação Falar Dim ObjAnimal As Animal Select Case ComboBox1 Case "Cachorro" Set ObjAnimal = New Cachorro Case "Gato" Set ObjAnimal = New Gato Case "Homem" Set ObjAnimal = New Homem End Select acao "f", ObjAnimal Set ObjAnimal = Nothing End Sub Private Sub CommandButton2_Click() 'Instancia a classe animal, e define qual o animal selecionado no combo, executando a ação Mostrar Dim ObjAnimal As Animal Select Case ComboBox1 Case "Cachorro" Set ObjAnimal = New Cachorro Case "Gato" Set ObjAnimal = New Gato Case "Homem" Set ObjAnimal = New Homem End Select acao "m", ObjAnimal Set ObjAnimal = Nothing End Sub Private Sub UserForm_Initialize() 'Preenche o comboBox ComboBox1.Clear ComboBox1.AddItem "Cachorro" ComboBox1.AddItem "Gato" ComboBox1.AddItem "Homem" End Sub Sub acao(x As String, obj As Animal) 'Selecione qual a ação selecionada de acordo com o botão... Select Case x Case "f" obj.Falar Case "m" obj.Sou = ComboBox1.Text obj.Mostrar End Select End Sub
Agora temmos tudo que precisamos para testar os conceitos de herança e polimorfismo no VBA.
Execute o formulário, selecionando as opções no combo e clicando nos botões. Caso seja selecionado o Falar o Excel irá emitir o som, no mostrar ele irá exibir um msgbox com a seleção feita.
Meu formulário foi criado da seguinte maneira...
BAIXE AQUI O EXEMPLO
[]'s
E até a próxima
6 comentários:
Aqui deu erro:
Sub acao(x As String, obj As Animal
Erro de Compilação:
O tipo definido pelo usuário não foi definido.
José baixe o exemplo que anexei no POST, ele esta igual ao POST pois foi a origem do mesmo.
Teste ai e qualquer coisa fale.
É no seu exemplo deu certinho. Estranho é que fiz e refiz passo a passo e não deu certo. Devo ter feito algo errado.
Muito obrigado pela sua atenção e parabéns pelo seu Blog está demais.
Valeu José!
muito show!!!
a orientação objetos deixa tudo mais bonito.
Bom post.
Postar um comentário