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
22:27
Bruno Leite


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