Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Aplicando polimorfismo com herança

Montei as classes dessa forma, apliquei a regra de negócio que o cálculo do tempo das séries é feito pelo número de temporadas * a média de episódios por temporada * 60(média de minutos por EP) = Minutos Totais

public class Tipo {
    private String nome;
    private Integer anoLancamento;
    private String sinopse;
    private Boolean incluidoNoPlano;
    private Double avaliacao;
    private Integer duracaoEmMinutos;

    //tirei os getters e setters pelo limite de caracteres
    
    public Tipo(String nome, Integer anoLancamento, String sinopse, Boolean incluidoNoPlano, Double avaliacao, Integer duracaoEmMinutos) {
        this.nome = nome;
        this.anoLancamento = anoLancamento;
        this.sinopse = sinopse;
        this.incluidoNoPlano = incluidoNoPlano;
        this.avaliacao = avaliacao;
        this.duracaoEmMinutos = duracaoEmMinutos;
    }

    public void exibirFichaTecnica(){
        System.out.println("Nome: " + getNome());
        System.out.println("Lançado em: " + getAnoLancamento());
        System.out.println(getSinopse());
        if(getIncluidoNoPlano().equals(true)){
            System.out.println("Incluído no plano");
        }
        else{
            System.out.println("Não está incluído no plano");
        }
        System.out.println("Nota no IMDB: " + getAvaliacao() + "/10");
        System.out.println("Tempo total de duração: " + getDuracaoEmMinutos() + " minutos");
    }
}
public class Filme extends Tipo{
    private String diretor;

    public String getDiretor() {
        return diretor;
    }
    public void setDiretor(String diretor) {
        this.diretor = diretor;
    }
    public Filme(String nome, Integer anoLancamento, String sinopse, Boolean incluidoNoPlano, Double avaliacao, String diretor, Integer duracaoEmMinutos) {
        super(nome, anoLancamento, sinopse, incluidoNoPlano, avaliacao, duracaoEmMinutos);
        this.diretor = diretor;
    }
    @Override
    public void exibirFichaTecnica() {
        super.exibirFichaTecnica();
        System.out.println("Diretor: " + getDiretor());
    }
}
public class Serie extends Tipo {
    private Integer temporadas;
    private Integer mediaEpisodiosPorTemporada;

    public Integer getTemporadas() {
        return temporadas;
    }
    public void setTemporadas(Integer temporadas) {
        this.temporadas = temporadas;
    }
    public Integer getMediaEpisodiosPorTemporada() {
        return mediaEpisodiosPorTemporada;
    }
    public void setMediaEpisodiosPorTemporada(Integer mediaEpisodiosPorTemporada) {
        this.mediaEpisodiosPorTemporada = mediaEpisodiosPorTemporada;
    }
    public Serie(String nome, Integer anoLancamento, String sinopse, Boolean incluidoNoPlano, Double avaliacao,Integer duracaoEmMinutos, Integer temporadas, Integer mediaEpisodiosPorTemporada) {
        super(nome, anoLancamento, sinopse, incluidoNoPlano, avaliacao, 0);
        this.temporadas = temporadas;
        this.mediaEpisodiosPorTemporada = mediaEpisodiosPorTemporada;
        calcularTempoTotal();
    }
    @Override
    public void exibirFichaTecnica() {
        super.exibirFichaTecnica();
        System.out.println("Temporadas: " + temporadas);
        System.out.println("Média de episódios por temporada: " + mediaEpisodiosPorTemporada);
    }
    public void calcularTempoTotal() {
        Integer tempoDeSerie = mediaEpisodiosPorTemporada * temporadas * 60;
        tempoDeSerie += getDuracaoEmMinutos();
        super.setDuracaoEmMinutos(tempoDeSerie);
        System.out.println("Tempo total: " + tempoDeSerie + " minutos");
    }
}
package screenmatch.modelos;
public class CalculadoraTempo {
    private Integer tempoTotal = 0;
    public Integer getTempoTotal() {
        return tempoTotal;
    }
    public void setTempoTotal(Integer tempoTotal) {
        this.tempoTotal = tempoTotal;
    }
    public void calcularTempoTotal(Tipo tipo) {
        this.tempoTotal += tipo.getDuracaoEmMinutos();
        System.out.println("Tempo total: " + this.tempoTotal + " minutos");
    }
}
import screenmatch.modelos.CalculadoraTempo;
import screenmatch.modelos.Filme;
import screenmatch.modelos.Serie;

public class Principal {
    public static void main(String[] args) {
        Filme filme1 = new Filme("Interestelar", 2015, "Um grupo de exploradores viaja através de um buraco de minhoca em busca de um novo lar para a humanidade.", true,8.7, "Christopher Nolan",169);
        Filme filme2 = new Filme("Tropa de Elite", 2007, "Um capitão do BOPE tenta combater o tráfico de drogas no Rio de Janeiro.", true, 8.1, "José Padilha",115 );
        Serie serie1 = new Serie("Breaking Bad", 2008, "Um professor de química se torna um fabricante de metanfetamina após ser diagnosticado com câncer.", true, 9.5, 0, 5, 13);
        filme1.exibirFichaTecnica();
        filme2.exibirFichaTecnica();
        serie1.exibirFichaTecnica();
    }
}
1 resposta
solução!

Oi, Paulo! Como vai?

Agradeço por compartilhar seu projeto com a comunidade Alura.

Seu uso de herança e polimorfismo tá excelente! A estrutura com a classe Tipo como base para Filme e Serie deixou o código bem organizado, e o uso do override no método exibirFichaTecnica() permite personalizar a exibição conforme o tipo. A lógica para calcular a duração da série também está bem aplicada.

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