1
resposta

Aplicando polimorfismo com herança

Primeiro você cria uma nova classe chamada Titulo no pacote br.com.alura.screenmatch.modelos, movendo para ela todos os atributos e métodos da classe Filme:

package br.com.alura.screenwatch.modelo;

public class Titulo {
    private String nome;
    private int anoDeLancamento;
    private boolean incluidoNoPlano;
    protected double somaAvaliacao;
    private int totalDeAvaliacao;
    private int duracaoEmMinutos;

    public int getTotalDeAvaliacao() {
        return totalDeAvaliacao;
    }

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

    public void setAnoDeLancamento(int anoDeLancamento) {
        this.anoDeLancamento = anoDeLancamento;
    }

    public void setSomaAvaliacao(double somaAvaliacao) {
        this.somaAvaliacao = somaAvaliacao;
    }

    public void setDuracaoEmMinutos(int i) {
        this.duracaoEmMinutos = duracaoEmMinutos;
    }

    public int getDuracaoEmMinutos() {
        return duracaoEmMinutos;
    }

    public void exibeFichaTecnica() {
        System.out.println("Nome da Série: " + nome);
        System.out.println("Ano de lançamento: " + anoDeLancamento);
    }

    public void avaliar(double nota) {
        somaAvaliacao += nota;
        totalDeAvaliacao++;
    }

    public double calcularMedia() {
        if (totalDeAvaliacao == 0) {
            return 0;
        }
        return somaAvaliacao / totalDeAvaliacao;
    }
}

Agora, você vai precisa cria a classe Serie, que vai herdar da classe Titulo, e terá os atributos temporadas, ativa, episodiosPorTemporada e minutosPorEpisodio, além dos métodos getter/setter desses atributos:

package br.com.alura.screenwatch.modelo;

public abstract class Serie extends Titulo {
    public int setMinutosPorEpisodio;
    private String diretor;

    public String getDiretor() {
        return diretor;
    }

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

    public abstract int getDuracaoEpisodio();

    public void setMinutosPorEpisodio(int i) {
    }
}

Crie o pacote br.com.alura.screenmatch.calculos e dentro dele crie a classe CalculadoraDeTempo:

package br.com.alura.screenmatch.calculo;

import br.com.alura.screenwatch.modelo.Titulo;

public class CalculadoraDeTempo {
    private int tempoTotal;

    public int getTempoTotal() {
        return tempoTotal;
    }
//    public void adiciona(Serie s) {
//        tempoTotal += s.getDuracaoEpisodio();
//    }
    public void adiciona(Titulo titulo) {
        tempoTotal += titulo.getDuracaoEmMinutos();

    }
}

Para testar os novos códigos, altere o método main da classe Principal:

package br.com.alura.screenwatch.modelo;

import br.com.alura.screenmatch.calculo.CalculadoraDeTempo;

public class Principal {
    public static void main(String[] args) {
        // Série 1: Blank
        GL blank = new GL();
        blank.setNome("Blank the series");
        blank.setAnoDeLancamento(2024);
        blank.setTemporadas(1);
        blank.setEpisodiosPorTemporada(1);
        blank.setMinutosPorEpisodio(60);

        blank.exibeFichaTecnica();
        blank.avaliar(8);
        blank.avaliar(10);
        blank.avaliar(9);

        System.out.println("Soma das avaliações: " + blank.somaAvaliacao);
        System.out.println("Total de avaliações: " + blank.getTotalDeAvaliacao());
        System.out.println("Média: " + blank.calcularMedia());
        System.out.println("Duração total: " + blank.getDuracaoEmMinutos() + " minutos");

        // Série 2: The Secret of Us
        GL theSecretOfUs = new GL();
        theSecretOfUs.setNome("The Secret of the Us");
        theSecretOfUs.setAnoDeLancamento(2024);
        theSecretOfUs.setTemporadas(1);
        theSecretOfUs.setEpisodiosPorTemporada(8);
        theSecretOfUs.setMinutosPorEpisodio(60);

        theSecretOfUs.exibeFichaTecnica();
        System.out.println("Duração total: " + theSecretOfUs.getDuracaoEmMinutos() + " minutos");

        // Série 3: Petrichor
        GL outraSerie = new GL();
        outraSerie.setNome("Petrichor");
        outraSerie.setAnoDeLancamento(2024);
        outraSerie.setTemporadas(1);
        outraSerie.setEpisodiosPorTemporada(1);
        outraSerie.setMinutosPorEpisodio(70);

        // Calculadora
        CalculadoraDeTempo calculadora = new CalculadoraDeTempo();
        calculadora.adiciona(blank);
        calculadora.adiciona(theSecretOfUs);
        calculadora.adiciona(outraSerie);

        System.out.println("Tempo total para maratonar todas as séries: " + calculadora.getTempoTotal() + " minutos");
    }
}
1 resposta

Parabéns, Benjamin!!