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

Criando classes no Visual Basic

 

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 :
  • Você cria uma interface de um componente reutilizável definindo em um módulo de classe uma classe com as definições das propriedades sem nenhum código de implementação;
  • Para usar a interface definida acima em outra classe você deve usar a palavra chave implements seguida do nome da interface ;

 

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