Escolar Documentos
Profissional Documentos
Cultura Documentos
Visual Basic 2005
Visual Basic 2005
Vamos supor que você precisa desenvolver um projeto para calculo de áreas e que de início deverá
calcular a área do retângulo, do triângulo e do quadrado.
Como um bom conhecedor dos conceitos da programação orientada a objetos (POO) você cria um
novo projeto no Visual Basic 2005 Express e imediatamente no menu Project inclui uma classe
usando a opção Add Class dando ao arquivo o nome Areas.vb.
A seguir você decide, baseado na sua experiência na POO, criar um classe chamada Retangulo com
as seguintes características:
Muito bem, você já pode obter a área do retângulo usando o método getArea() e definindo as
propriedades Altura e Base. Até aqui nada de especial.
Você parte então todo entusiasmado para criar sua segunda classe, a classe Triangulo, que irá
calcular a área do triângulo. O código usado esta mostrado a seguir:
Para encerrar você cria a classe Quadrado contendo uma propriedade , o construtor e o método
getArea(), conforme código abaixo:
Após terminar as classes você implementou em um formulário, Form1.vb do projeto, o código para
fazer os testes.
A interface criada usou apenas três botões conforme figura abaixo:
Após terminar todo este trabalho você analisou melhor o seu código e percebeu o seguinte:
Atento a estes detalhes você se convenceu que pode otimizar o código usado. Você então resolveu
aplicar seus conhecimentos avançados de orientação a objeto e usar o conceito de classes abstratas.
No VB.NET uma classe é definida como abstrata através do uso do modificador MustInherit. Então
para criar uma classe abstrata do VB.NET você precisa preceder a palavra chave Class com o
modificador MustInherit.
Um método que possui somente a assinatura(declaração) sem qualquer implementação pode também
ser chamado de um método abstrato. Para declarar um método como abstrato no VB .NET você
precisa usar o modificador MustOverride pois os métodos abstratos precisam ser sobrescritos e
implementados nas classes filhas com a mesma assinatura com o qual foi definido na classe pai.
Uma classe precisa ser definida como abstrata se possuir pelo menos um método abstrato; ela pode
no entanto conter diversos métodos não abstratos. Lembre-se que você não pode instanciar uma
classe Abstrata como faz com uma classe comum visto que ela não esta totalmente implementada.
Com base nestes conceitos você definiu uma classe Forma com o seguinte código:
3 Construtores
2 Propriedades
1 método abstrato (MustOverride)
Note que o método foi definido sem qualquer implementação e deverá ser sobrescrito nas classes
filhas.
Agora podemos redefinir a classe Retangulo que deverá herdar da classe Forma. Ao final a classe
deverá ficar assim:
MyBase.New(lado, base)
A nova classe Retangulo sobrescreve o método getArea() e foi implementando com a mesma
assinatura da classe abstrata (Forma) e retornando o valor da área do retângulo.
Vamos fazer o mesmo com a classe Triangulo que deverá ficar com o seguinte código:
A nova classe Triangulo também possui um construtor que chama o construtor da classe Pai e
implementa o método getArea() com a mesma assinatura da classe abstrata Forma, mas retornando o
valor da área do triângulo.
A classe Quadrado também deve ser alterada. Veja como ficou o seu código:
Na classe Quadrado temos o método getArea() também sobrescrevendo o método definido na classe
Pai e definido com a mesma assinatura mas retornando o valor da área do quadrado.
Agora só falta alterar o código do formulário para testar cada uma das classes que agora herdam da
classe abstrata Forma. O código deverá ser alterado conforme abaixo:
Uma observação importante que deve ser feita ao código acima é que agora estamos sempre usando a
mesma variável (variável de referência e não um objeto concreto) para tratar as instâncias de todas
as classes filhas: Retangulo, Triangulo e Quadrado; a variável f.
Note também que a mesma variável f agora é usada para chamar o mesmo método getArea() obtendo
resultados diferentes.
Quando você usa o mesmo método com a mesma assinatura e com diferentes implementações e
diferentes execuções obtendo resultados diferentes você tem o que chamamos de Polimorfismo.
Definição Acadêmica:
Outra definição:
Polimorfismo, originário do grego, significa "muitas formas" (poli = muitas, morphos = formas).
Ele permite que referências de tipos de classes mais abstratas representem o comportamento das
classes concretas que referenciam. Assim, um mesmo método pode apresentar várias formas, de
acordo com seu contexto. O polimorfismo é importante pois permite que a semântica de uma
interface seja efetivamente separada da implementação que a representa.
http://pt.wikipedia.org/wiki/Polimorfismo
Então, sem querer querendo, você acabou usando um recurso muito valioso da programação
orientada a objetos: a reutilização de código com encapsulamento e herança.