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 incluímos 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.
Imports System
Class Calculadora
Overloads Public Function Soma(a As Integer, b As Integer) As Integer
Soma = a + b
End Function
Overloads Public Function Soma(a As Double, b As Double) As Double
Soma = a + b
End Function
End Class
|
Module Module1
Public Sub Main()
Dim contador As Calculadora
contador = New Calculator()
'passando dois argumentos : inteiros
Console.WriteLine(contador.Soma(1, 5))
'passando dois argumentos : double
Console.WriteLine(contador.Soma(1.3, 5.9))
End Sub
End Module
|
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:
Imports System
Class Calculadora
Overloads Public Function Soma(a As Integer, b As Double) As Decimal
Soma = a + b
End Function
Overloads Public Function Soma(a As Integer, b As Double) As Double
Soma = a + b
End Function
End Class
|
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 ???
Dim contador As Calculadora
contador = New Calculadora()
' passando um inteiro e um Double
contador.Soma(1, 5.89)
|
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
|
Class Funcionario : Inherits Pessoa
Overrides Public Sub profissao()
Console.Write("Eu sou funcionário do governo.")
End Sub
End Class
|
A classe pai usando o modificador Overridable no método profissão
|
A classe filha - Funcionario - herda o método - Profissao. Overrides indica
que a classe sobrepõe a classe herdada.
|
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:
Imports System
MustInherit Class Formas
Public x As Integer = 9
Public y As Integer = 0
MustOverride Sub Desenho()
Public Function Informacao() As String
Informacao = "Uma classe abstrata"
End Function
End Class
|
O método Desenho não esta implementado , apenas foi declarado , e deverá ser sobreposto na classe que herdar a classe Formas
. Dizemos então que a classe Formas é uma classe Abstrata e o método Desenho é um método abstrato.
|
Vamos agora criar uma classe que deverá estender a classe abstrata ao fazer isto deveremos fornecer a implementação para todos os métodos que precisam ser sobrepostos.
Class Circulos: Inherits Formas
Overrides Sub Desenho()
' Desenha um circulo
End Sub
End Class
|
Class Linhas: Inherits Formas
Overrides Sub Desenho()
' Desenha uma linha
End Sub
End Class
|
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 estenda 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:
Interface IForma
End Interface
Class Linha
Implements IForma
End Class
|
Interface IForma
End Interface
Class Linha: Implements IForma
End Class
|
Imports System
Interface IForma
Sub Desenho()
End Interface
Class Linha
Implements IForma
Sub Desenho() Implements IForma.Desenho
Console.Write("Desenha uma reta")
End Sub
End Class
|
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....
Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ?? Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C# Veja também os cursos em Vídeo Aulas : |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Basic .NET - aquecendo as turbinas