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

ScreenMatch atualizado, com aplicação do conceito de polimorfismo

package br.com.gilvaneidemedeiros.modelos;

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

    public String getNome() { return nome; }

    public int getAnoLancamento() { return anoLancamento; }

    public boolean isIncluidoNoPlano() { return incluidoNoPlano; }

    public int getDuracaoEmMinutos() { return duracaoEmMinutos; }

    public double getSomaDasAvaliacoes() { return somaDasAvaliacoes; }

    public int getTotalDeAvaliacoes() { return totalDeAvaliacoes; }

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

    public void setAnoLancamento(int anoLancamento) { this.anoLancamento = anoLancamento; }

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

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

    public void exibeFichaTecnica() {
        System.out.println("Nome: " + nome);
        System.out.println("Ano de lançamento: " + anoLancamento);
        System.out.println("Duração em minutos: " + duracaoEmMinutos);

        if (incluidoNoPlano == true) {
            System.out.println("Incluído no plano: sim");
        } else {
            System.out.println("Não incluido no plano");
        }

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

    public double pegaMedia() {
        return somaDasAvaliacoes / totalDeAvaliacoes;
    }
}
package br.com.gilvaneidemedeiros.modelos;

public class Filme extends Titulo {
    private String diretor;

    public String getDiretor() { return diretor; }

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

}
package br.com.gilvaneidemedeiros.modelos;

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

    public int getTemporadas() { return temporadas; }

    public int getEpisodiosPorTemporada() { return episodiosPorTemporada; }

    public boolean isAtiva() { return ativa; }

    public int getMinutosPorEpisodio() { return minutosPorEpisodio; }

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

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

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

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

    @Override
    public int getDuracaoEmMinutos() {
        return temporadas * episodiosPorTemporada * minutosPorEpisodio;
    }
}
package br.com.gilvaneidemedeiros.calculos;

import br.com.gilvaneidemedeiros.modelos.Titulo;

public class CalculadoraDeTempo {
    private int tempoTotal;

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

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

Classe Principal

import br.com.gilvaneidemedeiros.modelos.Filme;
import br.com.gilvaneidemedeiros.modelos.Serie;
import br.com.gilvaneidemedeiros.calculos.CalculadoraDeTempo;

public class Principal {
    public static void main(String[] args) {
        Filme meuFilme = new Filme();
        System.out.println("\n");
        meuFilme.setNome("Matrix");
        meuFilme.setAnoLancamento(1999);
        meuFilme.setDuracaoEmMinutos(136);
        meuFilme.setIncluidoNoPlano(true);
        meuFilme.setDiretor("Lana Wachowski e Lilly Wachowski");

        meuFilme.exibeFichaTecnica();
        meuFilme.avalia(9);
        meuFilme.avalia(9);
        meuFilme.avalia(10);
        System.out.println("Soma das avaliações: " +meuFilme.getSomaDasAvaliacoes());
        System.out.println("Total das avaliações: " +meuFilme.getTotalDeAvaliacoes());
        System.out.println("Média de avaliações: " +meuFilme.pegaMedia());
        System.out.println("Diretor: " +meuFilme.getDiretor());
        System.out.println("Duração em minutos: " +meuFilme.getDuracaoEmMinutos());
        System.out.println("\n");

        Serie minhaSerie = new Serie();
        minhaSerie.setNome("Lost");
        minhaSerie.setAnoLancamento(2004);
        minhaSerie.setIncluidoNoPlano(false);
        minhaSerie.setTemporadas(15);
        minhaSerie.setEpisodiosPorTemporada(10);
        minhaSerie.setAtiva(true);
        minhaSerie.setMinutosPorEpisodio(60);

        minhaSerie.exibeFichaTecnica();
        minhaSerie.avalia(9);
        minhaSerie.avalia(7);
        minhaSerie.avalia(10);
        System.out.println("Soma das avaliações: " +minhaSerie.getSomaDasAvaliacoes());
        System.out.println("Total das avaliações: " +minhaSerie.getTotalDeAvaliacoes());
        System.out.println("Média de avaliações: " +minhaSerie.pegaMedia());
        System.out.println("Quantidade de temporadas: " +minhaSerie.getTemporadas());
        System.out.println("Quantidade de episódios por temporada: " +minhaSerie.getEpisodiosPorTemporada());
        System.out.println("A série está ativa? ");
            if (minhaSerie.isAtiva() == true) {
                System.out.println("Sim");
                } else {
                System.out.println("Não");
            }
        System.out.println("Quantidade de minutos por episódio: " +minhaSerie.getMinutosPorEpisodio());
        System.out.println("Duração para maratonar Lost: " +minhaSerie.getDuracaoEmMinutos());

        Filme outroFilme = new Filme();
        System.out.println("\n");
        outroFilme.setNome("A Paixão de Cristo");
        outroFilme.setAnoLancamento(2004);
        outroFilme.setDuracaoEmMinutos(127);
        outroFilme.setIncluidoNoPlano(true);
        outroFilme.setDiretor("Mel Gibson");

        outroFilme.exibeFichaTecnica();
        outroFilme.avalia(10);
        outroFilme.avalia(10);
        outroFilme.avalia(10);
        System.out.println("Soma das avaliações: " +outroFilme.getSomaDasAvaliacoes());
        System.out.println("Total das avaliações: " +outroFilme.getTotalDeAvaliacoes());
        System.out.println("Média de avaliações: " +outroFilme.pegaMedia());
        System.out.println("Diretor: " +outroFilme.getDiretor());
        System.out.println("Duração em minutos: " +outroFilme.getDuracaoEmMinutos());
        System.out.println("\n");

        CalculadoraDeTempo calculadora = new CalculadoraDeTempo();
        calculadora.inclui(meuFilme);
        calculadora.inclui(minhaSerie);
        calculadora.inclui(outroFilme);

        System.out.println("Tempo total: " +calculadora.getTempoTotal());

        System.out.println("\n");
    }
}
solução!

Oi, Gilvaneide! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Seu código mostra bem como aplicar o conceito de polimorfismo com herança!

Uma dica interessante para o futuro é aproveitar o método toString() para exibir informações formatadas do objeto automaticamente. Veja este exemplo:


@Override
public String toString() {
    return "Filme: " + getNome() + " (" + getAnoLancamento() + ")";
}

Com o método toString sobrescrito, ao imprimir o objeto com System.out.println(obj), ele mostrará esse texto em vez de apenas o nome da classe.

Qualquer dúvida que surgir, compartilhe no fórum.

Abraços e bons estudos!

Alura

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