Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Utilização de Herança x Interface

No contexto de orientação a objetos, ainda tenho dificuldade em identificar, na prática, quando devo optar pelo uso de herança (extends) e quando devo utilizar interfaces (implements).
Considerando o exemplo simples da aula, imagino um cenário onde Titulo poderia ser definido como uma interface, e classes como Filme e Serie a implementariam.

Com base nisso, poderiam me explicar quais são os critérios técnicos e cenários mais adequados para decidir entre herança e interface?
Em especial:

  • Quando modelar uma relação como "é um" (herança)?
  • Quando abstrair comportamentos utilizando interfaces?
  • Existe alguma boa prática ou regra de design que ajude nessa tomada de decisão no dia a dia?
1 resposta

Olá, Isabella, como vai?

A escolha entre herança e interface está relacionada ao tipo de relação que existe entre as classes e ao objetivo do seu modelo.

A herança deve ser utilizada quando existe uma relação clara de "é um". Nesse caso, a classe filha herda características e comportamentos da classe pai. Por exemplo, se Filme e Serie compartilham atributos como nome, ano de lançamento e duração, pode fazer sentido criar uma classe Titulo contendo esses elementos comuns. Assim, Filme e Serie seriam especializações de Titulo.

Já as interfaces são mais indicadas quando o objetivo é definir capacidades ou comportamentos que podem ser compartilhados por classes diferentes, independentemente de sua hierarquia. Por exemplo, uma interface Avaliavel poderia ser implementada por Filme, Serie e até Podcast, caso todos possuam um mecanismo de avaliação.

Espero que essa explicação ajude a esclarecer a diferença entre os dois conceitos. Caso surjam novas dúvidas, o fórum permanece à disposição para continuarmos a discussão.

Siga firme nos seus estudos.

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado