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());
}
}
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!