1
resposta

[Minha Solução] Desafio Criar Plataforma de Audio

Antes de mais nada, fiquei bastante perdido no que colocar na Classe Audio, e o que colocar na Interface Controlador, estou meio confuso, outra coisa na superclasse, eu pensei em colocar Private String criador, mas optei por colocar apresentador,cantor,autor, cada uma em uma subclasse referente, nao sei o que seria melhor, definir o criador do audio na classe audio, ou colocar assim nas subclasse.

//Main.java
package dev.gustavocristovam.modulo;

import dev.gustavocristovam.modulo.musicas.*;
import dev.gustavocristovam.modulo.podcast.Podcast;


public class Main {

    public static void main(String[] args) {
        Musica devinho = new Musica();
        AudioBook pequeno = new AudioBook();
        Podcast thenews = new Podcast();

        devinho.setTitulo("Mexeu Comigo");
        devinho.setDuracao(160);
        devinho.curtir();
        devinho.addTotalReproducoes();
        devinho.setCantor("Devinho Novaes");
        devinho.setAlbum("No Grale!");
        devinho.setGenero("Sofrência");



        devinho.exibeFichaTecnica();
        System.out.println("\n \n \n");

        pequeno.setTitulo("Little Prince");
        pequeno.setDuracao(250);
        for (int i = 0; i <15; i++) {
            pequeno.curtir();
            pequeno.addTotalReproducoes();
        }
        pequeno.addTotalReproducoes();
        pequeno.setAutor("Rodrigo Paiva");
        pequeno.setIdioma("Inglês");


       pequeno.exibeFichaTecnica();
        System.out.println("\n \n \n");

        thenews.setTitulo("Assassino do Zodiaco");
        thenews.setDuracao(156);
        thenews.curtir();
        thenews.addTotalReproducoes();
        thenews.setApresentador("Daniel Tavares");
        thenews.setEpisodio(9);
        thenews.setSerie("Casos Criminais");


        thenews.exibeFichaTecnica();
        System.out.println("\n \n \n");





    }

}

//Audio.java
package dev.gustavocristovam.modulo;

public class Audio {
    private String titulo;
    private int duracao; // Ems segundos
    private int totalReproducoes;
    private int curtidas;
    private int classificacao;

    protected void exibeFichaAudio() {
        System.out.println("Nome: " + getTitulo());
        System.out.println("Duracao: " + getDuracao() + "min");
        System.out.println("Reproduções: " + getTotalReproducoes());
        System.out.println("Curtidas: " + getCurtidas());

    }

//get e setters omitidos

    public void addTotalReproducoes() {
        this.totalReproducoes++;
    }


    public void curtir() {
        this.curtidas = this.curtidas +1;
    }

    public void descurtir() {
        this.curtidas = this.curtidas -1;
    }

}
//Podcast.java
package dev.gustavocristovam.modulo.podcast;

import dev.gustavocristovam.modulo.Audio;
import dev.gustavocristovam.modulo.Controlador;

public class Podcast extends Audio implements Controlador {
    private String apresentador;
    private String convidados;
    private int episodio;
    private String serie;

    @Override
    public void exibeFichaTecnica() {
        exibeFichaAudio();
        System.out.println("Apresentador: "+ getApresentador());
        System.out.println("Convidados: "+ getConvidados());
        System.out.println("Episódio: "+ getEpisodio());
        System.out.println("Série: " + getSerie());
    }
  
  //get e setters omitidos

  
    public String getConvidados() {

        if (convidados == null) {
            return "Não existem Convidados neste Podcast";
        }
        return convidados;
    }


 
}
//Musica.java
package dev.gustavocristovam.modulo.musicas;

import dev.gustavocristovam.modulo.Audio;
import dev.gustavocristovam.modulo.Controlador;

public class Musica extends Audio implements Controlador {
    private String cantor;
    private String genero;
    private String album;

    @Override
    public void exibeFichaTecnica() {
        exibeFichaAudio();
        System.out.println("Cantor: "+ getCantor());
        System.out.println("Album: "+ getAlbum());
        System.out.println("Genero: "+ getGenero());
    }


  //get e setters omitidos

  
}

//AudioBook.java
package dev.gustavocristovam.modulo.musicas;

import dev.gustavocristovam.modulo.Audio;
import dev.gustavocristovam.modulo.Controlador;

public class Musica extends Audio implements Controlador {
    private String cantor;
    private String genero;
    private String album;

    @Override
    public void exibeFichaTecnica() {
        exibeFichaAudio();
        System.out.println("Cantor: "+ getCantor());
        System.out.println("Album: "+ getAlbum());
        System.out.println("Genero: "+ getGenero());
    }


    //get e setters omitidos

  
}
//Controlador.java
package dev.gustavocristovam.modulo;

public interface Controlador {
    void exibeFichaTecnica();
}
1 resposta

Olá Gustavo! Tudo bem?

Vamos tentar esclarecer isso!

  1. Classe Audio: A classe Audio deve conter os atributos e métodos que são comuns a todos os tipos de áudio, como título, duração, total de reproduções e curtidas. Esses são os atributos que qualquer tipo de áudio, seja música, podcast ou audiobook, vai ter. Portanto, é uma boa prática mantê-los na classe Audio.

  2. Interface Controlador: A interface Controlador é uma ótima maneira de garantir que todas as subclasses de Audio implementem certos métodos, como exibeFichaTecnica. Isso ajuda a garantir que todas as subclasses tenham uma forma consistente de exibir suas informações.

  3. Atributos Específicos: Quanto aos atributos como criador, é uma questão de design. Se o criador pode ser um cantor, apresentador ou autor, e esses papéis são exclusivos para cada tipo de áudio, faz sentido mantê-los nas subclasses. Isso permite que cada subclasse tenha atributos específicos que fazem sentido para o tipo de áudio que representam.

Por exemplo:

  • Na classe Musica, você pode ter atributos como cantor, album e gênero.
  • Na classe Podcast, pode ter apresentador, convidados, episodio e serie.
  • Na classe AudioBook, pode ter autor e idioma.

Dessa forma, você está usando a herança para compartilhar atributos e métodos comuns, enquanto permite que cada tipo de áudio tenha suas próprias características únicas.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.