C# Desenvolvimento

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:

  • Uma interface não é considerada uma Classe e sim uma Entidade.
  • Não possui implementação, apenas assinatura, ou seja, apenas a definição dos seus métodos sem o corpo.
  • Todos os métodos são abstratos.
  • Seus métodos são implicitamente Públicos e Abstratos.
  • Não há como fazer uma instância de uma Interface e nem como criar um Construtor.
  • Funcionam como um tipo de “contrato”, onde são especificados os atributos, métodos e funções que as classes que implementem essa interface são obrigadas a implementar.

Classes Abstratas:

  • As classes abstratas devem conter pelo menos um método abstrato, que não tem corpo.
  • É um tipo especial de classe que não há como criar instâncias dela.
  • É usada apenas para ser herdada, funciona como uma super classe.
  • Uma grande vantagem é que força a hierarquia para todas as sub-classes.
  • É um tipo de contrato que faz com que as sub-classes contemplem as mesmas hierarquias e/ou padrões.

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.

About the author

Danilo Filitto

Mestre em Ciência da Computação pela Universidade Estadual de Maringá - UEM, Pós-Graduado em Redes de Computadores e Comunicação de Dados pela Universidade do Estado do Paraná - UEL, Bacharel em Ciência da Computação pela Universidade do Oeste Paulista - UNOESTE.

Atuo na área acadêmica como professor desde 2006. Atualmente leciono na UNOESTE (Universidade do Oeste Paulista), no SENAC (Serviço Nacional de Aprendizagem Comercial) e possuo vários cursos na Udemy (https://www.udemy.com/user/danilo-filitto/).

Além disso, sou o CEO dos sites https:www.dfilitto.com.br e https:www.makeindiegames.com.br

Você também pode me encontrar no YouTube por meio do endereço https://www.youtube.com/danilofilittoppr

Inscreva-se para receber em seus e-mais as notícias do nosso site

Quer aprender a programar?