VB.NET -
Primeiros passos - Conceitos - VI Continuando nossa série de artigos (ou diria curso) sobre VB.NET - Primeiros passos , vou continuar a falar das características da OOP (orientação a objeto ) presentes no VB.NET . OOP significa : OOP - Object Oriented Programming Language ; Neste artigo vou falar sobre sobrecarga , sobreposição , classes abstratas e Interfaces. Eu já escrevi um artigo abordando o conceito de sobrecarga , veja o link abaixo:
Sobrecarga
Um método pode ser uma rotina ou função , a diferença é que a função irá retornar um valor e a rotina não , mas tanto as rotinas como as funções aceitam argumentos que você passa para o método realizar uma operação. Geralmente você dá um nome característico a uma função ou rotina de forma a poder identificá-la. Ex: calculaSoma , calculaProduto , ...
Existem situações no entanto onde os métodos que precisamos usar fazem operações idênticas mas aceitam argumentos diferentes. Por exemplo : você pode precisar de um método que imprima uma string e precisar que o mesmo método imprima um valor numérico inteiro.
Você poderia criar dois métodos com nomes diferentes : ImprimeString e ImprimeNúmero . Mas na verdade os métodos estão fazendo a mesma coisa : usando o método Print para imprimir o argumento.
O VB.NET, como toda boa linguagem orientada a objetos que se preze, permite que tenhamos múltiplos métodos com o mesmo nome mas com uma lista de argumentos diferentes. A isto chamamos : Sobrecarga ou Overloading.
Para indicar isto no VB.NET incluimos a palavra-chave Overloads na primeira parte da assinatura do método. (A assinatura é o nome do método).
Nota: O uso da palavra-chave Overloads é opcional e você pode ter métodos com o mesmo nome sem usar Overloads. Veja abaixo um exemplo de sobrecarga.
|
|
| A classe calculadora com dois métodos mostrando o conceito da sobrecarga |
Usando os métodos sobrecarregados |
A sobrecarga de métodos é encontrada por toda a classe .NET Framework. A classe console do namespace System é um exemplo de sobrecarga pois ela possui o método Write que possui 18 assinaturas diferentes : uma aceita um Boolean outra aceita um inteiro , etc...
Mas tome cuidado para não fazer confusão : não pense que um método pode ser considerado sobrecarregado se retornar valores de diferentes tipos.
Dois métodos com o mesmo nome que aceitam a mesma lista de argumentos não irão compilar mesmo que retornem diferentes tipos de dados. Veja o seguinte exemplo:
|
Ao tentar compilar o código acima iremos ter a seguinte mensagem de erro:
error BC30301: 'Public
Overloads Function Add(a As Integer, b As Double) As Decimal' and
'Public Overloads Function Add(a As Integer, b As Double) As
Double' differ only by return type. They cannot overload each
other.
Quer saber por que ? Ora , se fossemos usar o método com o código abaixo , quais dos dois métodos estamos querendo usar ? Percebeu ???
|
Sobreposição
Já falamos sobre herança no VB.NET e para entender sobrecarga você precisa ter os conceitos sobre herança. Relembre em VB.NET - Primeiros passos - Conceitos - V ) . Quando uma classe herda métodos de outra classe pode ser que seja preciso sobrepor alguns dos métodos herdados , então , se você quiser implementar um método que foi herdado(da classe pai) de maneira diferente na que herdou(classe filha) vai estar usando sobreposição ou overriding.
No VB.NET indicamos que um método é passível de sobreposição usando a palavra-chave Overridable na classe pai (classe base) e a seguir na classe filha declaramos novamente o método com a palavra-chave Overrides. Assim temos que :
Vamos a um exemplo :
Class Pessoa
Overridable Public Sub profissao()
Console.Write("Eu sou um engenheiro.")
End Sub
End Class
|
|
A classe pai usando o modificador Overridable no método profissão |
A classe filha - Funcionário - herda o método - Profissao. Overrides indica |
O método profissao na classe - Funcionario - irá sobrepor o método herdado da classe pai. |
|
Para que um método da classe pai não possa ser sobreposto usamos o modificador - NotOverridable.
Já, para definir que um método seja obrigatoriamente sobreposto em uma classe filha usamos a palavra-chave - MustOverride.
Classes Abstratas
Pode acontecer
que ao escrever um método para uma classe você não saiba como
ele vai ser implementado. Neste caso, a implementação será
feita pela classe que herdar o método (a classe filha).
Pode
acontecer também que você saiba que um determinado método
será sobreposto com certeza na classe filha; então por que definir
sua implementação se ela não será usada ?.
Nestes casos você apenas define a assinatura do método e deixa a definição por conta da classe irá herdar a classe pai.
Estas classes são então chamadas classes Abstratas e o método que você não implementou é chamado de método abstrato.
Um método abstrato é identificado pelo modificador - MustOverride - , e, a classe que possui este modificador não pode ser instanciada através da palavra chave New. Vamos a um exemplo:
|
O método Desenho não esta implementado , apenas foi declarado , e deverá ser sobreposto na classe que herdar a classe Formas |
Vamos agora criar uma classe que deverá extender a classe abstrata ao fazer isto deveremos fornecer a implementação para todos os métodos que precisam ser sobrepostos.
|
|
| Tanto a classe Circulos como a classe Linhas herdam da classe Formas e por isto precisam implementar a classe desenho. | |
Interfaces
Uma interface é parecida com uma
classe abstrata; a diferença é que uma classe abstrata pode possuir
métodos que não estejam implementados e pode possuir métodos que estejam
implementados.
Uma interface
somente possui métodos que não possuem implementação.
Uma interface possui
somente métodos que não estão implementados e que devem ser implementados pela
classe que usar a interface.
Como o VB.NET não suporta herança
múltipla as interfaces permitem que uma classe extenda
múltiplas interfaces contornando o problema (se é que isto é um
problema ). Para implementar uma interface o VB.NET usamos o
modificador - Implements
.
As interfaces são declaradas
usando a palavra-chave - Interface. Geralmente o nome dado a uma
interface começa com a letra I. Podemos ter duas sintaxes para o
uso com interfaces:
|
|
- Uma interface no VB.NET não pode conter campos , somente pode ter métodos , propriedades e eventos. Todos os membros de uma interface são públicos e não podem usar um modificador de acesso.
- Na classe que implementa a interface , cada implementação do método precisa especificar o método da interface que ele implementa usando a palavra Implements seguido pelo nome da interface o nome do método.
- O nome da interface e o nome do método são separados por dois pontos.(:)
|
Acima temos a interface IForma definida . A classe Linha implementa a interface IForma , por isto define o método Desenho. |
A classe Linha pode ser instanciada sem problemas ; já a interface , assim como as classes abstratas não podem ser instanciadas.(Usando o operador New)
Aguarde a continuação do
assunto em
VB.NET - Juntando as partes - Criando uma aplicação OOP , onde continuaremos a falar sobre
mais conceitos da orientação a objeto presentes no VB.NET através de um exemplo
prático onde iremos aplicar os conceitos abordados nos artigos.... ![]()
José Carlos Macoratti