Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Por que ela não fez a classe Episodio ser uma subclasse de Serie?

Por que ela não fez a classe Episodio ser uma subclasse de Serie?

Caso eu queira manter a mesma regra de negócio em filmes e episódios, posso fazer dessa forma ou não é aconselhável?

package br.com.alura.screenmatch.modelos;

import br.com.alura.screenmatch.calculos.Classificavel;

public class Episodio extends Serie {
    private int numero;
    private String nome;
    private Serie serie;
    private int totaVisualizacoes;

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Serie getSerie() {
        return serie;
    }

    public void setSerie(Serie serie) {
        this.serie = serie;
    }

    public int getTotaVisualizacoes() {
        return totaVisualizacoes;
    }

    public void setTotaVisualizacoes(int totaVisualizacoes) {
        this.totaVisualizacoes = totaVisualizacoes;
    }

    @Override
    public int getClassificacao() {
        return (int) (pegaMedia()/2);
//        if (totaVisualizacoes > 100){
//            return 4;
//        } else {
//            return 2;
//        }
    }

}

2 respostas
solução!

Olá, Guilherme! Como vai?

A decisão de não fazer Episodio uma subclasse de Serie provavelmente se baseia no princípio de que uma série é composta por episódios, mas um episódio não é uma série por si só. Em termos de modelagem orientada a objetos, isso significa que Episodio e Serie têm relações e responsabilidades diferentes.

Uma série contém múltiplos episódios, e cada episódio pertence a uma série, mas eles não compartilham todas as suas características e comportamentos, o que justifica a não utilização de herança nesse caso.

Quanto à sua segunda pergunta, sobre manter a mesma regra de negócio em filmes e episódios, é tecnicamente possível fazer isso, mas não é sempre aconselhável. Se Filme e Episodio compartilham algumas lógicas, mas também têm comportamentos distintos significativos, pode ser mais adequado usar interfaces ou composição para compartilhar comportamentos comuns, ao invés de herança direta.

No seu caso específico, se você observar que Filme e Episodio podem ser tratados de forma semelhante por um sistema que os classifique ou os manipule de maneira similar (como no exemplo do método getClassificacao()), usar uma interface como Classificavel que ambos implementem pode ser uma solução elegante. Isso permite que você defina um contrato que ambos devem seguir, mantendo a flexibilidade de implementar detalhes específicos a cada classe.

Espero ter ajudado e bons estudos!

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

Perfeito, muito obrigado!