Ícone do site dfilitto

Interfaces X Classes Abstratas

Programação Orientada a Objetos utilizando a linguagem C#

O post Interfaces X Classes Abstratas tem como objetivo efetuar uma comparação entre interfaces e classes abstratas a fim de sanar duvidas como: Quando devo usar uma classe abstrata ou uma interface?

Interfaces X Classes Abstratas

Interfaces:

Classes Abstratas:

Visão Geral

Quando nos criamos uma Interface, nós estamos basicamente criando um set de métodos sem qualquer implementação que deve ser herdado por outras classes já implementadas. A vantagem é que desta forma consegue-se prover um caminho para uma classe ser parte de duas classes: uma herdada hierarquicamente e outra da Interface.

Quando nos criamos uma Classe Abstrata, nós estamos criando uma classe base que pode ter um ou mais métodos completos, mas pelo menos um ou mais destes métodos tem que criados incompletos (sem corpo), isto caracteriza uma Classe Abstrata.

Vale lembrar que, se todos os método da Classe abstrata forem sem corpo, ela se torna uma Interface.

O propósito de uma Classe Abstrata é prover uma base de definições de como um set de Classes Derivadas irão trabalhar e então permitir os programadores de preencher as implementações nas Classes derivadas.

Comparativo entre Interfaces X Classes Abstratas

Abaixo um quadro comparativo para tornar mais fácil a compreensão entre diferenças e similaridades entre Classes Abstratas e Interfaces.

CaracterísticaInterfaceClasse Abstrata
Herança múltiplaUma classe pode implementar diversas interfacesUma classe pode herdar  somente uma classe
Implementação PadrãoUma 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.
ConstantesSuporte somente constantes do tipo estática.Pode conter constantes estáticas e de instância.
Componentes de terceirosUma 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.
HomogeneidadeSe 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çãoSe 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
VelocidadeLento, requer trabalho extra para encontrar o método correspondente na classe atual.Rápido
ClarezaTodas 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 AdicionaisSe 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.

fonte: devmedia

Super dicas

Quer aprender muito mais sobre programação orientada a objetos? Então se inscreva no curso Programação Orientada a Objetos utilizando a linguagem C#.

Se inscreva em nosso canal e compartilhe as matérias que gostar com os seus colegas.

Participe dos nossos grupos de estudos do Facebook, WhatsApp desenvolvimento de sistemas, Telegram desenvolvimento de sistemas e WhatsApp desenvolvimento de jogos.

Aproveite também e venha fazer parte do nosso clube de vantagens e ter acesso exclusivo a vídeos, tutoriais, cursos e muito mais.

Clique no link para se tornar um membro do dfilitto – clube de vantagens e ter acesso a todos os benefícios do nosso clube.

Sair da versão mobile