3
respostas

Faça como eu fiz: aplicando polimorfismo com herança

Eu fiz da seguinte forma. Classe PAI, Videos.

package br.com.alura.screenmatch.modelos;

public class Videos {
    private String name;
    private int releaseYear;
    private String gender;
    private String ageGroup;
    private int durationInMinutes;
    double sumOfReviews;
    int totalRatings;
    String systemMessage;


    public void displayDatasheet () {
        systemMessage = """
                Este é um vídeo gratuito
                """;
        System.out.println(systemMessage);
    }



    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public int getReleaseYear() {
        return releaseYear;
    }

    public void setReleaseYear(int releaseYear) {
        this.releaseYear = releaseYear;
    }

    public void setDurationInMinutes(int durationInMinutes) {
        this.durationInMinutes = durationInMinutes;
    }

    public int getDurationInMinutes() {
        return durationInMinutes;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAgeGroup() {
        return ageGroup;
    }

    public void setAgeGroup(String ageGroup) {
        this.ageGroup = ageGroup;
    }

    public String getRatingMessage() {
        if (sumOfReviews / totalRatings >= 9) {
            return "Excelente";
        } else if (sumOfReviews / totalRatings >= 8) {
            return "Muito Bom";
        } else if (sumOfReviews / totalRatings >= 7) {
            return "Bom";
        } else {
            return "Razoável";
        }
    }

    public String convertDurationToHours() {
        int hours = durationInMinutes / 60;
        int remainingMinutes = durationInMinutes % 60;
        return hours + "h" + ":" + String.format("%02d", remainingMinutes) + "min";
    }

    public void evaluateVideo (double rating) {
        sumOfReviews += rating;
        totalRatings++;
    }


    public String ratingAverage() {
        if (totalRatings > 0) {
            return String.format("%.1f\n", sumOfReviews / totalRatings).replace("\n", "");
        } else {
            return "0.0";
        }
    }
}
3 respostas

Movies.

package br.com.alura.screenmatch.modelos;

public class Movies extends Videos {
    private String nameDirector;
    private String subtitle;

    public String getNameDirector() {
        return nameDirector;
    }

    public void setNameDirector(String nameDirector) {
        this.nameDirector = nameDirector;
    }

    @Override
    public void displayDatasheet() {
        systemMessage = """
                Filme: %s
                Ano de Lançamento: %s
                Duração: %s
                Gênero: %s
                Recomendado: %s
                Direção: %s
                Nota: %s
                Total de Avaliações: %s
                Avaliação: %s
                """.formatted(getName(), getReleaseYear(), convertDurationToHours(), getGender(), getAgeGroup(), nameDirector, ratingAverage(), totalRatings, getRatingMessage().toUpperCase());
        System.out.println(systemMessage);
    }

//    Sobrecarga / Polimorfismo - 1 parametro
    public void displayDatasheet(String audio) {
        if (audio == "Português") {
            subtitle = "nenhuma";
        } else {
            subtitle = "português";
        }

        systemMessage = """
                Filme: %s
                Ano de Lançamento: %s
                Duração: %s
                Gênero: %s
                Recomendado: %s
                Direção: %s
                Nota: %s
                Total de Avaliações: %s
                Audio: %s
                Legenda: %s
                Avaliação: %s
                """.formatted(getName(), getReleaseYear(), convertDurationToHours(), getGender(), getAgeGroup(), nameDirector, ratingAverage(), totalRatings, audio, subtitle, getRatingMessage().toUpperCase());
        System.out.println(systemMessage);
    }


    //    Sobrecarga / Polimorfismo - 2 parametros
    public void displayDatasheet(String audio, String subtitle) {
        systemMessage = """
                Filme: %s
                Ano de Lançamento: %s
                Duração: %s
                Gênero: %s
                Recomendado: %s
                Direção: %s
                Nota: %s
                Total de Avaliações: %s
                Audio: %s
                Legenda: %s
                Avaliação: %s
                """.formatted(getName(), getReleaseYear(), convertDurationToHours(), getGender(), getAgeGroup(), nameDirector, ratingAverage(), totalRatings, audio, subtitle, getRatingMessage().toUpperCase());
        System.out.println(systemMessage);
    }
}

Series.

package br.com.alura.screenmatch.modelos;

public class Series extends Videos {
    private int seasons;
    private int episodesPerSeason;
    private int currentSeason;
    private int currentEpisode;

    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 int getCurrentSeason() {
        return currentSeason;
    }

    public void setCurrentSeason(int currentSeason) {
        this.currentSeason = currentSeason;
    }

    public int getCurrentEpisode() {
        return currentEpisode;
    }

    public void setCurrentEpisode(int currentEpisode) {
        this.currentEpisode = currentEpisode;
    }

    @Override
    public void displayDatasheet() {
        systemMessage = """
                Serie: %s
                Ano de Lançamento: %s
                Temporada Atual: %s
                Episódio Atual: %s
                Duração: %s
                Gênero: %s
                Recomendado: %s
                Nota: %s
                Total de Avaliações: %s
                Temporadas: %s
                Episódios por Temporada: %s
                Avaliação: %s
                """.formatted(getName(), getReleaseYear(), getCurrentSeason(), getCurrentEpisode() ,convertDurationToHours(), getGender(), getAgeGroup(), ratingAverage(), totalRatings, getSeasons(), getEpisodesPerSeason(), getRatingMessage().toUpperCase());
        System.out.println(systemMessage);
    }
}

Main.

package br.com.alura.screenmatch.modelos;

public class Main {
    public static void main(String[] args) {
        // INSTANCIAS DE FILMES
        // FILME 1
        Movies myMovie = new Movies();
        myMovie.setName("Cemitério Maldito");
        myMovie.setReleaseYear(1989);
        myMovie.setDurationInMinutes(102);
        myMovie.setGender("Terror");
        myMovie.setAgeGroup("18+");
        myMovie.setNameDirector("Mary Lambert");
        myMovie.evaluateVideo(7);
        myMovie.evaluateVideo(7.5);
        myMovie.ratingAverage();
        myMovie.displayDatasheet();


        //FILME 2
        Movies favoriteMovie = new Movies();
        favoriteMovie.setName("As Branquelas");
        favoriteMovie.setReleaseYear(2004);
        favoriteMovie.setDurationInMinutes(109);
        favoriteMovie.setGender("Comédia");
        favoriteMovie.setAgeGroup("16+");
        favoriteMovie.setNameDirector("Keenen Ivory Wayans");
        favoriteMovie.evaluateVideo(9.9);
        favoriteMovie.evaluateVideo(9);
        favoriteMovie.evaluateVideo(9.5);
        favoriteMovie.ratingAverage();
        //sobrecarga de métodos / polimorfismo
        favoriteMovie.displayDatasheet("Inglês");

        //FILME 3
        Movies newMovie = new Movies();
        newMovie.setName("American Pie 2 - O Reencontro");
        newMovie.setReleaseYear(2012);
        newMovie.setDurationInMinutes(114);
        newMovie.setGender("Comédia");
        newMovie.setAgeGroup("16+");
        newMovie.setNameDirector("Jon Hurwitz | Hayden Schlossberg");
        newMovie.evaluateVideo(9);
        newMovie.evaluateVideo(9);
        newMovie.evaluateVideo(8);
        newMovie.evaluateVideo(6);
        newMovie.ratingAverage();
        newMovie.displayDatasheet("Inglês", "Espanhol");


        // INSTANCIAS DE SERIES
        // SERIE 1
        Series favoriteSerie = new Series();
        favoriteSerie.setName("The Chosen - Os Escolhidos");
        favoriteSerie.setReleaseYear(2017);
        favoriteSerie.setDurationInMinutes(70);
        favoriteSerie.setSeasons(4);
        favoriteSerie.setCurrentSeason(1);
        favoriteSerie.setCurrentEpisode(1);
        favoriteSerie.setEpisodesPerSeason(8);
        favoriteSerie.setGender("Drama, Histórico");
        favoriteSerie.setAgeGroup("Família");
        favoriteSerie.evaluateVideo(9.9);
        favoriteSerie.evaluateVideo(9.8);
        favoriteSerie.evaluateVideo(9.5);
        favoriteSerie.evaluateVideo(9.9);
        favoriteSerie.displayDatasheet();

        // SERIE 2
        Series mySerie = new Series();
        mySerie.setName("The Last Of Us");
        mySerie.setReleaseYear(2023);
        mySerie.setDurationInMinutes(80);
        mySerie.setSeasons(1);
        mySerie.setEpisodesPerSeason(7);
        mySerie.setCurrentSeason(1);
        mySerie.setCurrentEpisode(4);
        mySerie.setGender("Ação, Aventura, Drama, Terror");
        mySerie.setAgeGroup("18+");
        mySerie.evaluateVideo(8);
        mySerie.evaluateVideo(8.5);
        mySerie.evaluateVideo(8.7);
        mySerie.evaluateVideo(8.4);
        mySerie.displayDatasheet();
    }
}

Olá, Rodrigo! Tudo bem?

Excelente código, parabéns pelo projeto! Espero que esteja gostando do curso! Colocar em execução as atividades propostas pelo professor em aula é uma prática muito importante para internalizarmos o conteúdo. Caso tenha ficado alguma dúvida em relação ao curso ou atividade, sinta-se à vontade em comunicar, estou à disposição e ficarei super feliz em poder ajudar!

Um forte abraço e bons estudos!