2
respostas

[Projeto] Faça como eu fiz: aplicando polimorfismo com herança

Modelos Filme, Série (classes filhas) e Título (classe pai):

package br.com.alura.screenmatch.modelos;
public class Filme extends Titulo {
    private String diretor;
    public String getDiretor() {
        return diretor;
    }
    public void setDiretor(String director){
        this.diretor = diretor;
    }
}
package br.com.alura.screenmatch.modelos;
public class Serie extends Titulo {
    private int numDeTemporadas;
    private boolean ativa;
    private int episodiosPorTemporada;
    private double minutosPorEpisodio;
    public int getNumDeTemporadas(){
        return numDeTemporadas;
    }
    public void setNumDeTemporadas(int numDeTemporadas){
        this.numDeTemporadas = numDeTemporadas;
    }
    public boolean getAtiva(){
        return ativa;
    }
    public void setAtiva(boolean ativa){
        this.ativa = ativa;
    }
    public int getEpisodiosPorTemporada(){
        return episodiosPorTemporada;
    }
    public void setEpisodiosPorTemporada(int episodiosPorTemporada){
        this.episodiosPorTemporada = episodiosPorTemporada;
    }
    public double getMinutosPorEpisodio(){
        return  minutosPorEpisodio;
    }
    public void setMinutosPorEpisodio(double minutosPorEpisodio){
        this.minutosPorEpisodio = minutosPorEpisodio;
    }
    @Override
    public double getDuracaoEmMinutos(){
        return numDeTemporadas * minutosPorEpisodio * episodiosPorTemporada;
    }
}
package br.com.alura.screenmatch.modelos;
public class Titulo {
    private String nome;
    private int anoDeLancamento;
    private double duracaoEmMinutos;
    private double somaDasAvaliacoes = 0;
    private double totalAvaliacoes = 0;
    private double resultadoAvaliacoes;
    private boolean incluidoNoPlano;
    public void exibirFichaTecnica() {
        System.out.println("Nome do Título: " + nome +
                "\nAno de Lançamento: " + anoDeLancamento +
                "\nDuração (Em Minutos): " + duracaoEmMinutos +
                "\nAvaliação: " + resultadoAvaliacoes +
                "\nIncluído no Plano: " + incluidoNoPlano);
    }
    public String getNome() {
        return this.nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public int getAnoDeLancamento() {
        return this.anoDeLancamento;
    }
    public void setAnoDeLancamento(int anoDeLancamento) {
        this.anoDeLancamento = anoDeLancamento;
    }
    public boolean getIncluidoNoPlano() {
        return incluidoNoPlano;
    }
    public void setIncluidoNoPlano(boolean incluidoNoPlano) {
        this.incluidoNoPlano = incluidoNoPlano;
    }
    public double getDuracaoEmMinutos() {
        return this.duracaoEmMinutos;
    }
    public void setDuracaoEmMinutos(double duracaoEmMinutos) {
        this.duracaoEmMinutos = duracaoEmMinutos;
    }
    public double getTotalAvaliacoes() {
        return this.totalAvaliacoes;
    }
    public void avaliarFilme(double notaDoFilme) {
        totalAvaliacoes++;
        somaDasAvaliacoes += notaDoFilme;
        }
    public double pegarMedia() {
        resultadoAvaliacoes = somaDasAvaliacoes / totalAvaliacoes;
        return resultadoAvaliacoes;
    }
}

Classe principal:

package br.com.alura.screenmatch;
import br.com.alura.screenmatch.modelos.Serie;
import br.com.alura.screenmatch.calculos.CalculadoraTempo;
import br.com.alura.screenmatch.modelos.Filme;
import java.util.Scanner;
public class Principal{
    public static void main(String[] args){
        Scanner leitura = new Scanner(System.in);

        Filme novoFilme = new Filme();
        novoFilme.setNome(leitura.nextLine());
        novoFilme.setAnoDeLancamento(leitura.nextInt());
        novoFilme.setDuracaoEmMinutos(leitura.nextDouble());
        novoFilme.setIncluidoNoPlano(leitura.nextBoolean());
        novoFilme.avaliarFilme(leitura.nextDouble());
        novoFilme.pegarMedia();
        novoFilme.exibirFichaTecnica();
        System.out.println("Total de Avaliações: " + novoFilme.getTotalAvaliacoes());

        Serie novaSerie = new Serie();
        novaSerie.setNome(leitura.nextLine());
        leitura.nextLine();
        novaSerie.setAnoDeLancamento(leitura.nextInt());
        novaSerie.setNumDeTemporadas(leitura.nextInt());
        novaSerie.setEpisodiosPorTemporada(leitura.nextInt());
        novaSerie.setMinutosPorEpisodio(leitura.nextDouble());
        novaSerie.setAtiva(leitura.nextBoolean());
        novaSerie.setIncluidoNoPlano(leitura.nextBoolean());
        novaSerie.exibirFichaTecnica();
        System.out.println("Duração total de minutos da Série: " + novaSerie.getDuracaoEmMinutos());
        CalculadoraTempo calculo = new CalculadoraTempo();
        calculo.incluirTempo(novaSerie);
        System.out.println(calculo.getTempoTotal());
        leitura.close();
2 respostas

Oi, Luan! Como vai?

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

Seu código demonstra com clareza os conceitos de herança e polimorfismo, aproveitando a classe Titulo como base comum para Filme e Serie. A sobrescrita do método getDuracaoEmMinutos() na classe Serie é um exemplo excelente de polimorfismo — o comportamento é ajustado conforme o tipo do objeto.

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

O código apresenta uma estrutura orientada a objetos com a classe Titulo como base para Filme e Serie, aplicando corretamente herança e encapsulamento.

A classe Titulo reúne atributos comuns e permite avaliações, mas o método pegarMedia poderia calcular diretamente a média sem depender de uma variável extra.

A classe Filme adiciona o atributo diretor, mas contém um erro no método setDiretor, onde o nome da variável está incorreto. Já Serie expande com temporadas e episódios, e sobrescreve corretamente o método de duração.

A classe principal usa Scanner para entrada de dados e demonstra o uso das classes, mas poderia ter validações e tratamento de erros. No geral, o código é bem estruturado, com boas práticas de POO e espaço para pequenas melhorias.