VB.6 - Simulando Herança
Houve tempos em que a discussão sobre o não suporte a herança pelo Visual Basic gerava intermináveis discussões entre os críticos e os simpatizantes da linguagem. A impressão que se tinha ao acompanhar estes debates era que o fato de não implementar a herança de classe tornava o VB uma linguagem 'pobre' , como se a herança fosse a grande panacéia para o todos os males do programador. Bastava usar herança e todos os seus problemas estariam resolvidos...
Felizmente estes tempos já são passados...
Para saber mais sobre o assunto leia também os artigos :
VB .NET - Finalmente uma linguagem orientada a objetos VB5/VB6 - Pondo em prática a Programação orientada a objetos VB.NET - Orientação a objetos : Conceitos básicos em 10 lições Meu primeiro projeto orientado a objetos : Cadastro de Clientes |
Já sabemos que o VB6 suporta somente herança de interface e não da suporte a herança de implementação e neste artigo vamos mostrar como podemos simular a herança no VB6.
A herança de
interface funciona assim :
|
Vamos abrir o VB6 e criar um novo projeto do tipo Standard EXE chamado herancaVB.
A seguir, no menu Project, selecione a opção Add Class Module para incluir um modulo de classe chamado Cliente.
Inclua o seguinte código na classe Cliente:
Nossa classe Cliente possui a propriedade Nome definida.
Repita o passo anterior incluindo um modulo de classe chamado Endereco e inclua o seguinte código nesta classe:
Nossa classe Endereco possui as seguintes propriedades definidas: Endereco e Cep
Nosso objetivo será fazer com que a classe Cliente herde as propriedades definidas na classe Endereco.
Fazer isto no VB.NET seria muito simples. Como dá suporte a herança basta usar a cláusula inherits assim:
Public Class Cliente inherits Endereco (VB.NET)
é pronto a herança já esta sendo usada.
Nota: Para saber mais sobre herança no VB.NET acompanhe os artigos:
|
Mas como obter o mesmo resultado no Visual Basic 6 ?
Para fazer isto altere a classe Cliente incluindo o código conforme abaixo:
O código que esta destacado é o código que incluímos na classe Cliente para simular a herança. Vamos entender o que foi feito...
A declaração :
Private oEndereco as Endereco
declara uma variável chamada oEndereco do tipo Endereco , e, Endereco é justamente a classe que desejamos herdar.
A seguir declaramos o inicializador(um tipo de construtor) da classe de forma que quando a classe for iniciada será criado um novo objeto Endereco que é do tipo da classe Endereco.
Public Sub
class_Initialize() Set oEndereco = New Endereco End Sub Public Sub class_terminate() Set oEndereco = Nothing End Sub |
Quando a classe for destruída devemos limpar da memória a alocação do objeto usada: Set oEndereco = Nothing
A seguir em todas as propriedades da classe Endereco que desejamos herdar usamos o objeto oEndereco para armazenar as propriedades da classe Cliente
Public Property
Get Endereco() As String Endereco = oEndereco.Endereco End Property Public Property Let Endereco(novoValor As String) oEndereco.Endereco = novoValor End Property Public Property Get Cep() As String Cep = oEndereco.Cep End Property Public Property Let Cep(novoValor As String) oEndereco.Cep = novoValor End Property |
Hein, mas pera aí... isso não é herança ??? (quase...)
Vamos mostrar como usar a implementação no formulário do projeto:
Altere o nome do formulário para frmHeranca e inclua um controle ListBox e um controle Button;
A seguir inclua o seguinte código no evento Click do botão de comando:
O intellisense mostrando o acesso as propriedades da classe | O código completo incluído no formulário |
Neste código criamos uma instância da classe Cliente e a seguir usamos as propriedades da classe Cliente. Note que as propriedades Endereco e Cep definidas na classe Endereco foram herdadas na classe Cliente como queríamos.
Ao executar o projeto teremos:
Conclusão: "Quem ri por último ri mais tarde... "
Quem falou que não podíamos usar herança no VB6 ???
Por enquanto é só , até o próximo artigo...
Nota: artigo adaptado de uma colaboração anônima (infelizmente não tenho o nome do autor original...)
José Carlos Macoratti