2
respostas

[Projeto] JavaBeat

Olá pessoal, venho compartilhar o meu projeto feito como um desafio proposto pela Alura em criar uma nova aplicação. Baseado nos conteúdos estudados tentei aplicar tudo que aprendi ao longo desse curso introdutório de Java POO.

O Projeto ficou estruturado assim:

src
└── br.com.alura.javabeat
    ├── app
    │   └── Principal
    └── domain
        ├── Audio
        ├── Classification
        ├── Music
        └── Podcast
  • Criei uma SuperClasse chamada Audio.
package br.com.alura.javabeat.domain;

public class Audio {
    private String title;
    private int durationInMinutes;
    protected int totalPlayback;
    private int likes;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getDurationInMinutes() {
        return durationInMinutes;
    }

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

    public int getLikes() {
        return likes;
    }

    public int getTotalPlayback() {
        return totalPlayback;
    }

    public void giveLike(int num) {
        this.likes += num;
    }

    public void play(int num) {
        this.totalPlayback += num;
        System.out.println("Reproduzindo Som..");
    }
}
  • Criei a interface Classificação
package br.com.alura.javabeat.domain;

public interface Classification {
    void getClassification();
    void getTotalDuration();
}
E então as Heranças, sendo o Podcast e Music.
  • Podcast
package br.com.alura.javabeat.domain;

public class Podcast extends Audio implements Classification {
    @Override
    public void play(int num) {
        this.totalPlayback += num;
        System.out.println("Reproduzindo podcast..");
    }

    @Override
    public void getClassification() {
        if (getLikes() >= 500 || getTotalPlayback() >= 1000) {
            System.out.println("O conteúdo está bombando!");
        } else if (getLikes() < 300 || getTotalPlayback() < 700) {
            System.out.println("O conteúdo está em destaque!");
        } else if (getLikes() <= 100 || getTotalPlayback() <= 300) {
            System.out.println("O conteúdo está sendo conhecido!");
        } else {
            System.out.println("O conteúdo não atingiu grandes expectativas.");
        }
    }

    @Override
    public void getTotalDuration() {
        int total = getTotalPlayback() * getDurationInMinutes();
        System.out.println("Tempo total de escuta: " + total + " minutos ");
    }
}
  • Music
package br.com.alura.javabeat.domain;

public class Music extends Audio implements Classification {
    @Override
    public void play(int num) {
        this.totalPlayback += num;
        System.out.println("Reproduzindo música..");
    }

    @Override
    public void getClassification() {
        if (getTotalPlayback() >= 5000 || getLikes() >= 800) {
            System.out.println("A música virou trend!");
        } else if (getTotalPlayback() < 5000 || getLikes() < 800) {
            System.out.println("A música ficou viral!");
        } else if (getTotalPlayback() <= 3000 || getLikes() <= 500) {
            System.out.println("A música é popular!");
        } else {
            System.out.println("A música não atingiu grandes expectativas.");
        }
    }

    @Override
    public void getTotalDuration() {
        int total = getDurationInMinutes() * getTotalPlayback();
        System.out.println("Tempo total de exibição: " + total + " minutos ");
    }
}

Por último a execução da Aplicação

package br.com.alura.javabeat.app;

import br.com.alura.javabeat.domain.Music;
import br.com.alura.javabeat.domain.Podcast;

public class Principal {
    public static void main(String[] args) {
        Podcast alura = new Podcast();
        alura.giveLike(389);
        alura.setTitle("Aluracast");
        alura.setDurationInMinutes(42);
        alura.giveLike(80);
        alura.play(124);
        // Testes
        alura.getClassification();
        alura.getTotalDuration();
        System.out.println("=".repeat(42));

        Music anita = new Music();
        anita.setTitle("Show das Poderosas");
        anita.setDurationInMinutes(3);
        anita.giveLike(1200);
        anita.play(3800);

        // Testes
        anita.getClassification();
        anita.getTotalDuration();
    }
}

Agora que terminei a minha resolução, irei acompanhar os vídeos finais para ver se deixei alguma parte faltando ou a complementar.
Bons estudos pessoal!

Acompanhe o desenvolvimento!

2 respostas

Olá, Daniel!
Parabéns pelo seu projeto e pela dedicação em compartilhar seu aprendizado com a comunidade.
Isso faz muita diferença na evolução de quem está começando e também de quem acompanha seu trabalho.
Uma sugestão que pode agregar bastante ao projeto é publicá-lo em um repositório no GitHub e utilizar Git para versionar as alterações.
Além de manter seu código organizado, isso aproxima muito da realidade de projetos utilizados no mercado.
Compartilhe o link do repositório aqui também.
Assim, outras pessoas poderão conhecer seu trabalho, deixar estrelas, enviar feedbacks, sugerir melhorias através das famosas Pull Requests e até colaborar diretamente no projeto.
Esse tipo de troca ajuda muito no aprendizado, no desenvolvimento técnico e também na experiência de trabalho em equipe.
E qualquer dúvida, pode comentar aqui.
Bons estudos.

Obrigado pelo feedback de meu projeto!
Já respondendo sua sugestão, o meu projeto segue sendo versionado as alterações utilizando o Git e também já está como repositório do Github, mas resolvi manter por enquanto no privado pois antes planejo adicionar mais algumas pequenas coisas e então deixá-lo público para receber propostas de melhoria do código. Portanto, como o projeto ainda está no início, deixei o repositório privado no GitHub para organizar o código. Mas logo mais vou torná-lo público!