1
resposta

Faça como eu fiz [utilizando interfaces]

MOVIE

package Com.Vn.screenmatch.models;

import Com.Vn.screenmatch.calculate.Reteable;

public class Movie extends Title implements Reteable {
  private String director;

    public String getDiretor() {
        return getDiretor();
    }

    public void setDiretor(String diretor) {
        this.director = diretor;
    }
    @Override
    public int getReteable() {
        return 0;
    }

    @Override
    public int getRating() {
        return 0;
    }
}

SERIES

package Com.Vn.screenmatch.models;

import Com.Vn.screenmatch.calculate.Reteable;

public class Series extends Title implements Reteable {
    private int seasons;
    private int episodesPerSeason;
    private boolean active;
    private int minutesPerEpisodes;

    public int getSeasons() {
        return seasons;
    }

    public void setSeasons(int seasons) {
        this.seasons = seasons;
    }

    public int getEpisodesPerSeason() {
        return episodesPerSeason;
    }

    public void setEpisodesPerSeason(int episodesPerSeason) {
        this.episodesPerSeason = episodesPerSeason;
    }

    public boolean isActive() {
        return active;
    }

    public void setActive(boolean active) {
        this.active = active;
    }

    public int getMinutesPerEpisodes() {
        return minutesPerEpisodes;
    }

    public void setMinutesPerEpisodes(int minutesPerEpisodes) {
        this.minutesPerEpisodes = minutesPerEpisodes;
    }

    @Override
    public int getMinutesDuration(){
        return seasons * episodesPerSeason * minutesPerEpisodes;
    }

    @Override
    public int getRating() {
        return 0;
    }

    @Override
    public int getReteable() {
    return 0;
    }
}

EPISODE

package Com.Vn.screenmatch.models;

import Com.Vn.screenmatch.calculate.Reteable;

public class Episode implements Reteable {
    private int number;
    private Series series;
    private int totalViews;
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
    public Series getSeries() {
        return series;
    }
    public void setSeries(Series series) {
        this.series = series;
    }
    public int getTotalViews() {
        return totalViews;
    }
    public void setTotalViews(int totalViews) {
        this.totalViews = totalViews;
    }
    @Override
    public int getReteable() {
        if (totalViews > 100) {
            return 4; // Retorna 4 se tiver mais de 100 visualizações
        } else {
            return 2; // Retorna 2 se tiver 100 ou menos
        }
    }
    @Override
    public int getRating() {
        return 0;
    }
}

INTERFACE RETEABLE

package Com.Vn.screenmatch.calculate;
public interface Reteable {
    int getReteable();
    int getRating();
}

MAIN

import Com.Vn.screenmatch.calculate.Suggestion;
import Com.Vn.screenmatch.calculate.TimeCalculator;
import Com.Vn.screenmatch.models.Episode;
import Com.Vn.screenmatch.models.Movie;
import Com.Vn.screenmatch.models.Series;
public class Main {
    public static void main(String[] args) {
    Movie mymovie = new Movie();
    mymovie.setName("The Amazing Spider-Man");
    mymovie.setReleaseDate("2012");
    mymovie.setMinutesDuration(136);
    mymovie.setMovieGenre("Action, Adventure, Fantasy");
        mymovie.setIncludePlan(true);
                mymovie.movieDescription();
        {
            mymovie.evaluate(10);
            mymovie.evaluate(8.3);
            mymovie.evaluate(9.7);
            mymovie.evaluate(8.1);
            System.out.println("Sum of ratings: " + mymovie.getSumOfRatings());
        }
        System.out.println("Number of ratings: " + mymovie.getRatingCount());
        System.out.println("Final rating: " + mymovie.getAvarage());
        Series series = new Series();
        series.setName("Smallvile");
        series.setReleaseDate("2001 - 2011");
        series.setMovieGenre("Action, adventure, teen drama, science fiction");
        series.setSeasons(10);
        series.setEpisodesPerSeason(22);
        series.setMinutesPerEpisodes(44);
        Movie othermovie = new Movie();
        othermovie.setName("Tropa de elite");
        othermovie.setReleaseDate("2007");
        othermovie.setMinutesDuration(118);
        othermovie.setMovieGenre("Action, Crime, Drama");

        TimeCalculator calculator = new TimeCalculator();
        calculator.included(mymovie);
        calculator.included(othermovie);
        calculator.included(series);
        System.out.println(calculator.getTotalDuration());

        Suggestion suggestion = new Suggestion();

        Episode episode = new Episode();
        episode.setNumber(1);
        episode.setSeries(series);
        episode.setTotalViews(300);
        suggestion.filter(episode);
    }

}
1 resposta

Olá, Vinicius! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de interfaces para definir contratos de comportamento com Java, utilizou muito bem a herança para estruturar classes como Movie e Series e ainda compreendeu a importância da implementação de métodos sobrescritos para personalizar o comportamento de cada classe.

Um ajuste interessante é alterar o método getDiretor() da classe Movie, pois atualmente ele chama a si mesmo e pode gerar recursão infinita. Assim:

public String getDiretor() {
    return director;
}

Isso faz com que o método retorne corretamente o valor armazenado no atributo, evitando erros de execução.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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