.NET - Interfaces ou Classes Abstratas ?


Quando você deve usar uma classe abstrata ? 

Quando você deve usar uma Interface ?

Quando você deve usar as duas ?

Quantas dúvidas ???

A seguir um pequeno roteiro para ajudá-lo a tomar a melhor decisão ....

O que é uma classe abstrata ?

Suponha que vamos criar várias classes que têm métodos em comum e outros métodos funcionam diferente para cada classe. Uma forma de fazer isso é usar as classes abstratas.

- As classes abstratas tem pelo menos um método abstrato, ou seja um método que não tem corpo.
- Se um método tem uma classe abstrata ele deve ser declarado como um método abstrato.
- Não podem ser criadas instâncias de classes abstratas.
- Ao criar uma classe usando uma classe abstrata como herança devem ser criados os corpos para os métodos abstratos.
- Para criar uma classe usando uma classe abstrata como herança basta usar a palavra-chave inherits , como em uma classe normal
- Um método abstrato é identificado pelo modificador - MustOverride - , a classe que possui este modificador não pode ser instanciada através da palavra chave New. Vamos a um exemplo:

O que são Interfaces ?

Interfaces podem ser entendidas como um tipo de classe abstrata em que todos métodos são abstratos.

- Em uma interface nenhum método tem corpo e são implicitamente abstratas e publicas
- Assim como uma classe abstrata , uma interface não pode ser instanciada.
- Uma classe pode implementar mais de uma interface
- Uma interface não pode conter um construtor
- Ao criar uma classe usando uma interface devem ser feitos os corpos de todos os métodos da interface, caso contrario deverá ser criada uma classe abstrata.
- Para implementar uma interface no VB.NET usamos o modificador - Implements .

Com os conceitos bem definidos vamos tentar uma tabela de consulta rápido para tomada de decisões:

Interfaces      x     Classes Abstratas
Característica Interface Classe Abstrata
Herança múltipla Uma classe pode implementar diversas interfaces Uma classe pode herdar  somente uma classe
Implementação Padrão Uma interface não pode conter qualquer tipo de código, muito menos código padrão. Uma classe abstrata pode fornecer código completo , código padrão ou ter apenas a declaração de seu esqueleto para ser posteriormente sobrescrita.
Constantes Suporte somente constantes do tipo estática. Pode conter constantes estáticas e de instância.
Componentes de terceiros Uma implementação de uma interface pode ser incluída a qualquer classe de terceiros. Uma classe de terceiros precisa ser reescrita para estender somente a partir da classe abstrata.
Homogeneidade Se todas as diversas implementações compartilham a assinatura do método então a interface funciona melhor. Se as várias implementações são todas do tipo e compartilham um comportamento e status comum , então a classe abstrata funciona melhor.
Manutenção Se o código do seu cliente conversa somente em termos de uma interface, você pode facilmente alterar a implementação concreta usando  um método factory. idêntico
Velocidade Lento , requer trabalho extra para encontrar o método correspondente na classe atual. Rápido
Clareza Todas as declarações de constantes em uma interface são presumidamente publicas ou estáticas. Você pode por código compartilhado em uma classe abstrata. Você pode usar código para computar o valor inicial de suas constantes e variáveis de instância ou estáticas.
Funcionalidades Adicionais Se você incluir um novo método em uma interface você precisa ajustar todas as implementações da interface. Se você incluir um novo método em uma classe abstrata você tem a opção de fornecer uma implementação padrão para ele.

Você decide. !

Eu sei,  é apenas VB.NET, mas eu gosto...

Tito 3:10 Ao homem faccioso, depois da primeira e segunda admoestação, evita-o,

Tito 3:11 sabendo que esse tal está pervertido, e vive pecando, e já por si mesmo está condenado.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti