1
resposta

Faça como eu fiz [utilizando interfaces]

Seguem as implementações propostas no desafio:
Interface Classificavel:

package br.com.alura.screenmatch.calculos;

public interface Classificavel {
    int getClassificacao();
}

Classe FiltroRecomendacao:

package br.com.alura.screenmatch.calculos;

public class FiltroRecomendacao {

    public void filtra (Classificavel classificavel){
        if(classificavel.getClassificacao() >= 4){
            System.out.println("Top List!");
        } else if (classificavel.getClassificacao() >= 2){
            System.out.println("Medium List!");
        } else {
            System.out.println("Bottom List!");
        }
    }
}

Classe Episodio:

package br.com.alura.screenmatch.modelos;

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

public class Episodio implements Classificavel {
    private int numero;
    private String nome;
    private Serie serie;

    public int getTotalVisualizacoes() {
        return totalVisualizacoes;
    }

    public void setTotalVisualizacoes(int totalVisualizacoes) {
        this.totalVisualizacoes = totalVisualizacoes;
    }

    private int totalVisualizacoes;

    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;
    }

    @Override
    public int getClassificacao() {
        if (totalVisualizacoes > 100){
            return 4;
        } else {
            return 2;
        }
    }
    @Override
    public String toString() {
        return "Nome Episodio: " + getNome() +
                ", Numero: " + numero +
                ", Avaliação: " + getClassificacao();
    }
}

Classe Filme:

package br.com.alura.screenmatch.modelos;

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

public class Filme extends Titulo implements Classificavel {
    private String diretor;

    public String getDiretor() {
        return diretor;
    }

    public void setDiretor(String diretor) {
        this.diretor = diretor;
    }

    @Override
    public int getClassificacao() {
        return (int) pegaMedia()/2;
    }
}

Classe Main:

import br.com.alura.screenmatch.calculos.CalculadoraDeTempo;
import br.com.alura.screenmatch.calculos.FiltroRecomendacao;
import br.com.alura.screenmatch.modelos.Episodio;
import br.com.alura.screenmatch.modelos.Filme;
import br.com.alura.screenmatch.modelos.Serie;


public class Main {
    public static void main(String[] args) {
        Filme filme1 = new Filme();

        filme1.setNome("Forest Gump");
        filme1.setAnoDeLancamento(1994);
        filme1.setDuracaoEmMinutos(142);
        filme1.setIncluidoNoPlano(true);

        filme1.avalia(8.7);
        filme1.avalia(9.0);
        filme1.avalia(9.2);
        filme1.avalia(9.1);

        System.out.println(filme1.toString());
        FiltroRecomendacao filtro = new FiltroRecomendacao();
        filtro.filtra(filme1);

        Serie serie1 = new Serie();
        serie1.setNome("Brothrs in Arms");
        serie1.setAnoDeLancamento(2001);
        serie1.setMinutosPorEpisodio(62);
        serie1.setEpisodiosPortemporada(10);
        serie1.setNumeroTemporadas(1);

        serie1.setIncluidoNoPlano(false);

        serie1.avalia(7.7);
        serie1.avalia(9.0);
        serie1.avalia(9.2);
        serie1.avalia(8.6);

        System.out.println(serie1.toString());

        Episodio episodio1 = new Episodio();
        episodio1.setSerie(serie1);
        episodio1.setNumero(5);
        episodio1.setNome("The D Day");
        System.out.println(episodio1.toString());
        episodio1.setTotalVisualizacoes(101);
        filtro.filtra(episodio1);

        CalculadoraDeTempo calculadoraDeTempo = new CalculadoraDeTempo();
        calculadoraDeTempo.inclui(filme1);
        calculadoraDeTempo.inclui(serie1);
        System.out.println("tempo total para maratonar: " + calculadoraDeTempo.getTempoTotal());
        }
    }

Output:

Nome Título: Forest Gump, Ano de Lançamento: 1994, Duração em minutos: 142, Avaliação: 9.0
Top List!
Nome Título: Brothrs in Arms, Ano de Lançamento: 2001, Duração em minutos: 620, Avaliação: 8.625
Nome Episodio: The D Day, Numero: 5, Avaliação: 2
Top List!
tempo total para maratonar: 762 minutos.

Process finished with exit code 0
1 resposta

Olá, Raoni, como vai?

A implementação atende bem ao que foi proposto na atividade e demonstra um bom entendimento do uso de interfaces para definir comportamentos em comum entre classes diferentes. A separação da interface no pacote de cálculos e a aplicação tanto em Filme quanto em Episodio estão coerentes com o objetivo.

Parabéns pela solução e por compartilhar o código completo com o resultado da execução. Continue trazendo suas implementações para o fórum, ele está à disposição para trocar ideias e evoluir ainda mais nos estudos.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!