2
respostas

aplicando polimorfismo com herança

package br.com.alura.screenmatch.modelos;

public class Titulo {
    private String nome;
    private int anoDeLancamento;
    private boolean incluidoNoPlano;
    private double somaDasAvaliacoes;
    private int totalDeAvaliacoes;
    private int duracaoEmMinutos;

    public int getTotalDeAvaliacoes() {
        return totalDeAvaliacoes;
    }

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

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

    public void setIncluidoNoPlano(boolean incluidoNoPlano) {
        this.incluidoNoPlano = incluidoNoPlano;
    }

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

    public String getNome() {
        return nome;
    }

    public int getAnoDeLancamento() {
        return anoDeLancamento;
    }

    public boolean isIncluidoNoPlano() {
        return incluidoNoPlano;
    }

    public double getSomaDasAvaliacoes() {
        return somaDasAvaliacoes;
    }

    public int getDuracaoEmMinutos() {
        return duracaoEmMinutos;
    }

    public void exibeFichaTecnica(){
        System.out.println("Nome do filme: " + nome);
        System.out.println("Ano de lançamento: " + anoDeLancamento);
        System.out.println("Duração em minutos: " + duracaoEmMinutos);
        System.out.println("Incluído no plano: " + incluidoNoPlano);
    }

    public void avalia(double nota) {
        somaDasAvaliacoes += nota;
        totalDeAvaliacoes++;
    }

    public double pegaMedia() {
        return somaDasAvaliacoes / totalDeAvaliacoes;
    }

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

public class Serie extends Titulo{
    private int temporadas;
    private boolean ativa;
    private int episodiosPorTemporada;
    private int minutosPorEpisodio;

    public int getTemporadas() {
        return temporadas;
    }

    public void setTemporadas(int temporadas) {
        this.temporadas = temporadas;
    }

    public boolean isAtiva() {
        return ativa;
    }

    public void setAtiva(boolean ativa) {
        this.ativa = ativa;
    }

    public int getEpisodiosPorTemporada() {
        return episodiosPorTemporada;
    }

    public void setEpisodiosPorTemporada(int episodiosPorTemporada) {
        this.episodiosPorTemporada = episodiosPorTemporada;
    }

    public int getMinutosPorEpisodio() {
        return minutosPorEpisodio;
    }

    public void setMinutosPorEpisodio(int minutosPorEpisodio) {
        this.minutosPorEpisodio = minutosPorEpisodio;
    }

    @Override
    public int getDuracaoEmMinutos() {
        return temporadas * episodiosPorTemporada * minutosPorEpisodio;
    }

    @Override
    public void exibeFichaTecnica() {
        System.out.println("Nome da Serie: " + getNome());  // Usando o método getNome da classe pai
        System.out.println("Ano de lançamento: " + getAnoDeLancamento());  // Usando o método getAnoDeLancamento da classe pai
    }

    // Novo método para verificar o status da série
    public String verificarStatus() {
        if (ativa) {
            return "Série ativa";
        } else {
            return "Lançamento em breve";
        }
    }
}
package br.com.alura.screenmatch.calculos;

import br.com.alura.screenmatch.modelos.Titulo;

public class CalculadoraDeTempo {
    private int tempoTotal = 0;

    public int getTempoTotal() {
        return tempoTotal;
    }

    public void inclui(Titulo titulo) {
        this.tempoTotal += titulo.getDuracaoEmMinutos();
    }

}
2 respostas
import br.com.alura.screenmatch.calculos.CalculadoraDeTempo;
import br.com.alura.screenmatch.modelos.Serie;

public class Principal {
    public static void main(String[] args) {
        Serie lost = new Serie();
        lost.setNome("Lost");
        lost.setAnoDeLancamento(2000);
        lost.exibeFichaTecnica();
        lost.setTemporadas(10);
        lost.setAtiva(true);
        lost.setEpisodiosPorTemporada(10);
        lost.setMinutosPorEpisodio(50);
        System.out.println("Duração para maratonar Lost: " + lost.getDuracaoEmMinutos());
        // Exibe o status da série
        System.out.println(lost.verificarStatus());  // Chama o método para exibir o status

        Serie outraSerie = new Serie();
        outraSerie.setNome("Aliens");
        outraSerie.setAnoDeLancamento(2025);
        outraSerie.exibeFichaTecnica();
        outraSerie.setTemporadas(10);
        outraSerie.setAtiva(false);
        outraSerie.setEpisodiosPorTemporada(5);
        outraSerie.setMinutosPorEpisodio(60);
        System.out.println("Duração para maratonar Aliens: " + outraSerie.getDuracaoEmMinutos());
        // Exibe o status da série
        System.out.println(outraSerie.verificarStatus());  // Chama o método para exibir o status

        CalculadoraDeTempo calculadora = new CalculadoraDeTempo();
        calculadora.inclui(lost);
        calculadora.inclui(outraSerie);
        System.out.println(calculadora.getTempoTotal());
    }
}

Oi Smalley,

Seu código está funcionando corretamente, demonstrando um bom uso de herança e polimorfismo. 💻

A classe Serie herda de Titulo e sobrescreve os métodos getDuracaoEmMinutos() e exibeFichaTecnica(), adaptando-os ao contexto de séries.

A utilização da CalculadoraDeTempo demonstra a flexibilidade do polimorfismo, pois ela pode calcular o tempo total de reprodução tanto para filmes quanto para séries sem precisar saber o tipo específico de Titulo. 👍

A inclusão do método verificarStatus() na classe Serie adiciona funcionalidade específica para séries, mostrando uma boa prática de extensão de classes. 🎓

Para saber mais: HERANÇA, REESCRITA E POLIMORFISMO - Capítulo da apostila Java e orientação a objetos.

Continue praticando e evoluindo seus conhecimentos em programação! Você está no caminho certo!