Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Projeto] ScreeanMatch // Polimorfismo e herança

Principal

package br.com.alura.screenmatch.modelos;

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

public class Principal {
    public static void main(String[] args) {

        // Filme
        Filme filme1 = new Filme();
        filme1.setNome("Poderoso Chefão");
        filme1.setAnoDeLancamento(1972);
        filme1.setDuracaoEmMinutos(175);
        filme1.setIncluidoNoPlano(true);

        filme1.exibeFichaTecnica();

        filme1.avalia(9);
        filme1.avalia(9);
        filme1.avalia(10);

        System.out.printf("Média de avaliações do filme: %.2f%n%n",
                filme1.pegaMedia());

        // Série
        Serie peakyBlinders = new Serie();
        peakyBlinders.setNome("Peaky Blinders");
        peakyBlinders.setAnoDeLancamento(2013);
        peakyBlinders.setTemporadas(6);
        peakyBlinders.setEpisodiosPorTemporada(6);
        peakyBlinders.setMinutosPorEpisodio(60);
        peakyBlinders.setAtiva(false);
        peakyBlinders.setIncluidoNoPlano(true);

        peakyBlinders.exibeFichaTecnica();

        peakyBlinders.avalia(10);
        peakyBlinders.avalia(9);
        peakyBlinders.avalia(9.5);

        System.out.println("Duração para maratonar Peak Blinders: " + peakyBlinders.getDuracaoEmMinutos());

        // Filme 2
        Filme outroFilme = new Filme();
        outroFilme.setNome("Interestelar");
        outroFilme.setAnoDeLancamento(2014);
        outroFilme.setDuracaoEmMinutos(169);
        outroFilme.setIncluidoNoPlano(true);

        //Calculadora de tempo 
        CalculadoraDeTempo calculadora = new CalculadoraDeTempo();
        calculadora.inclui(filme1);
        calculadora.inclui(outroFilme);
        calculadora.inclui(peakyBlinders);
        System.out.println(calculadora.getTempoTotal());

    }
} 

Titulo

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;

    // GETTERS
    public String getNome() {
        return nome;
    }

    public int getAnoDeLancamento() {
        return anoDeLancamento;
    }

    public boolean isIncluidoNoPlano() {
        return incluidoNoPlano;
    }

    public int getDuracaoEmMinutos() {
        return duracaoEmMinutos;
    }

    public int getTotalDeAvaliacoes() {
        return totalDeAvaliacoes;
    }

    // SETTERS
    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;
    }

    // Métodos de lógica
    public void exibeFichaTecnica(){
        System.out.println("=====================================");
        System.out.println("Título: " + nome);
        System.out.println("Ano de lançamento: " + anoDeLancamento);
        System.out.println("Duração: " + duracaoEmMinutos + " min");
        System.out.println("Incluído no plano: " + (incluidoNoPlano ? "Sim" : "Não"));
            }

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

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

Filme

// src > br.com.alura.screenmatch.modelos > Filme.java

package br.com.alura.screenmatch.modelos;

public class Filme extends Titulo {
    private String diretor;

    public String getDiretor() {
        return diretor;
    }

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

Serie

package br.com.alura.screenmatch.modelos;

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

    // GETTERS E SETTERS
    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;
    }

    // Sobrescrevendo para mostrar também dados da série
    @Override
    public void exibeFichaTecnica() {
        super.exibeFichaTecnica();
        System.out.println("Temporadas: " + temporadas);
        System.out.println("Episódios por temporada: " + episodiosPorTemporada);
        System.out.println("Minutos por episódio: " + minutosPorEpisodio);
        System.out.println("Série ativa: " + (ativa ? "Sim" : "Não"));
    }

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

Calculadora de tempo

// CalculadoraDeTempo.java

package br.com.alura.screenmatch.calculos;


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


public class CalculadoraDeTempo {
    private int tempoTotal = 0;

    public int getTempoTotal() {
        return this.tempoTotal;
    }

//    public void inclui(Filme f){
//        this.tempoTotal += f.getDuracaoEmMinutos();
//    }
//
//    public void inclu (Serie S) {
//        this.tempoTotal += s.getDuracaoEmMinutos();
//    }

    public void inclui(Titulo titulo) {
        System.out.println("Adicionando duração em minutos de " + titulo);
        this.tempoTotal += titulo.getDuracaoEmMinutos();
    }
}
solução!

Oi, Italo! Como vai?

Seu projeto mostra bem como você estruturou herança entre Titulo, Filme e Serie, reaproveitando os atributos e métodos em comum. Ficou claro como você aplicou polimorfismo ao usar a CalculadoraDeTempo para receber diferentes tipos de títulos.

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

Obrigado!