Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

App playK - minha resolução

App playK - autor: Klaus Santos

Super Class

package br.com.klaus.playK.models;

public class AudioContent {
    private String title;
    private int duration;
    private int totalReprodution;
    private int likes;
    protected double totalRating;
    protected int ratingCount;

    public AudioContent(String title, int duration) {
        this.title = title;
        this.duration = duration;
        this.totalRating = 0;
        this.ratingCount = 0;
    }

    public String getTitle() {
        return title;
    }

    public int getDuration() {
        return duration;
    }

    public int getTotalReprodution() {
        return totalReprodution;
    }

    public int getLikes() {
        return likes;
    }

    public double getAverageRating() {
        return ratingCount == 0 ? 0 : totalRating / ratingCount;
    }

    public void enjoy() {
        this.likes++;
    }

    public void reproduce() {
        this.totalReprodution++;
    }

    public void play() {

    }

}

Interface

package br.com.klaus.playK.models;

public interface Ratable {
    void rate(int rating);
}

Sub class

package br.com.klaus.playK.models;

public class Music extends AudioContent implements Ratable {
    private final String artist;
    private final String album;
    private final String genre;

    public Music(String title, int duration, String artist, String album, String genre) {
        super(title, duration);
        this.artist = artist;
        this.album = album;
        this.genre = genre;
    }

    public String getArtist() {
        return artist;
    }

    public String getAlbum() {
        return album;
    }

    public String getGenre() {
        return genre;
    }

    @Override
    public void play() {
        System.out.println("Reproduzindo a música " + getTitle() + " do album " +getAlbum());
    }

    @Override
    public void rate(int rating) {
        if (rating < 1 || rating > 5) {
            System.out.println("Avaliação inválida. Informe um valor entre 1 e 5");
            return;
        }
        totalRating += rating;
        ratingCount++;
    }

}
package br.com.klaus.playK.models;

public class Podcast extends AudioContent implements Ratable {
    private final String host;
    private final String episode;

    public Podcast(String title, int duration, String host, String episode) {
        super(title, duration);
        this.host = host;
        this.episode = episode;
    }

    public String getHost() {
        return host;
    }

    public String getEpisode() {
        return episode;
    }

    @Override
    public void play() {
        System.out.println("Reproduzindo o episódio " + getEpisode() + " do podcast " + getTitle() + ", apresentado " +
                "pelo " + getHost());
    }

    @Override
    public void rate(int rating) {
        if (rating < 1 || rating > 5) {
            System.out.println("Avaliação inválida. Informe um valor entre 1 e 5");
            return;
        }
        totalRating += rating;
        ratingCount++;
    }
}

Class Main

package br.com.klaus.playK.main;

import br.com.klaus.playK.models.Music;
import br.com.klaus.playK.models.Podcast;

public class Main {
    public static void main(String[] args) {
        Music music1 = new Music("Dualismo", 4, "Rosa de Saron", "Depois do Inverno",
                "Gospel");

        music1.enjoy();
        music1.reproduce();
        music1.reproduce();
        music1.play();
        System.out.println("Curtidas: " + music1.getLikes() + " ***** Reproduções: " + music1.getTotalReprodution());

        Podcast podcast1 = new Podcast("Hipsters Ponto Tech", 50, "Paulo Silveira",
                "Práticas de Orientação a Objetos - Hipster #129");

        podcast1.enjoy(); podcast1.enjoy(); podcast1.enjoy(); podcast1.enjoy(); podcast1.enjoy(); podcast1.enjoy();
        podcast1.reproduce(); podcast1.reproduce(); podcast1.reproduce(); podcast1.reproduce(); podcast1.reproduce();
        podcast1.play();
        System.out.println("Curtidas: " + podcast1.getLikes() + " ***** Reproduções: " + podcast1.getTotalReprodution());

        music1.rate(4);
        music1.rate(3);
        System.out.println("Avaliação de " + music1.getTitle() + ": " + music1.getAverageRating());
        podcast1.rate(4);
        podcast1.rate(5);
        System.out.println("Avaliação de " + podcast1.getEpisode() + ": " + podcast1.getAverageRating());

    }
}

Retorno do código acima

Esta é a minha solução, aguardo por sugestões de melhorias e/ou criticas em relação a algum erro ou escrita do código. Grato!

1 resposta
solução!

Olá, Klaus. Tudo bem?

Muito obrigado por compartilhar o seu código aqui com a gente.

Ótimo como você estruturou a hierarquia de classes com herança e interfaces para reutilizar código. A implementação do método play ficou clara e objetiva. O código está ótimo e correto. Parabéns pelo trabalho. Continue com essa dedicação.

Conte com o apoio do Fórum. Abraços e bons estudos.