1
resposta

Faça como eu fiz: utilizando interfaces

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

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

        meuFilme.setNome("Vigadores: Guerra Infinita");
        meuFilme.setAnoDeLancamento(2018);
        meuFilme.setDuracaoEmMinutos(149);
        meuFilme.setIncluidoNoPlano(true);
        System.out.println("A duração do filme é: " + meuFilme.getDuracaoEmMinutos());

        meuFilme.exibeFichaTecnica();
        meuFilme.avalia(1);
        meuFilme.avalia(5);
        meuFilme.avalia(10);
        System.out.println("Total de avaliações: " + meuFilme.getTotalDeAvaliacoes());
        System.out.println(meuFilme.calculoMedia());
        //meuFilme.somaDasAvaliacoes = 10;
        //meuFilme.totalDeAvaliacoes = 1;
        //System.out.println(meuFilme.calculoMedia());

        Serie lost = new Serie();
        lost.setNome("Lost");
        lost.setAnoDeLancamento(2000);
        lost.exibeFichaTecnica();
        lost.setTemporadas(10);
        lost.setEpisodiosPorTemporada(10);
        lost.setMinutosPorEpisodios(50);
        System.out.println("Duração em minutos de todos os episodios da serie: " + lost.getDuracaoEmMinutos());

        Filme outroFilme = new Filme();

        outroFilme.setNome("Avatar");
        outroFilme.setAnoDeLancamento(2009);
        outroFilme.setDuracaoEmMinutos(162);
        outroFilme.setIncluidoNoPlano(true);
        System.out.println("A duração do filme é: " + outroFilme.getDuracaoEmMinutos());

        CalculadoraDeTempo calculadora = new CalculadoraDeTempo();
        calculadora.inclui(meuFilme);
        calculadora.inclui(outroFilme);
        calculadora.inclui(lost);
        System.out.println(calculadora.getTempoTotal());

        FiltroRecomendacao filtroRecomendacao = new FiltroRecomendacao();

        filtroRecomendacao.filtra(meuFilme);

        Episodios episodios = new Episodios();
        episodios.setNumero(1);
        episodios.setSerie(lost);
        episodios.setTotalVisulizacoes(300);

        filtroRecomendacao.filtra(episodios);

    }
}
package br.com.alura.screenmatch.modelos;

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

public class Episodios extends Titulo implements Classificavel {
    private int numero;
    private String nome;
    private Serie serie;

    public int getTotalVisulizacoes() {
        return totalVisulizacoes;
    }

    public void setTotalVisulizacoes(int totalVisulizacoes) {
        this.totalVisulizacoes = totalVisulizacoes;
    }

    private int totalVisulizacoes;

    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 (totalVisulizacoes > 100) {
            return 4;
        } else {
            return 2;
        }
    }
}
package br.com.alura.screenmatch.calculos;

public interface Classificavel {
    int getClassificacao();
}
1 resposta

Oi, Alfredo! Como vai?

Agradeço por compartilhar.

Gostei da sua implementação, importante notar como você aplicou a interface Classificavel para permitir que filmes e episódios sejam tratados de forma comum no filtro de recomendação, mostrando bem o uso de polimorfismo no contexto da aula.

Continue explorando esse tipo de estrutura, pois isso fortalece muito seu entendimento de orientação a objetos.

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