Coder Social home page Coder Social logo

javafy's Introduction

Projeto Desafio de Programação Orientada a Objetos com Java

Este projeto é um desafio do curso de Programação Orientada a Objetos com Java da Alura. Ele simula um player de música e podcast com funcionalidades de classificação.



Índice

  1. Visão Geral
  2. Principais Destaques de Conceito e Metodologia Aplicada
    1. Pacotes
    2. Encapsulamento
    3. Construtores
    4. Métodos Getters e Setters
    5. Herança
    6. Campos
    7. Interface e Implementação
    8. Polimorfismo
    9. Imports
    10. Criação de Instâncias e Chamadas de Método
    11. Boas Práticas de Nomeação
    12. Clareza de Saídas, Testes e Comentários
    13. Design e Manutenção de Código
  3. Conclusão
  4. Contribuições
  5. Licença

1. Visão Geral

O projeto consiste em classes que representam diferentes tipos de áudios, como músicas e podcasts. Cada áudio possui atributos específicos, como título, duração e classificação. Além disso, a aplicação da interface Classification permite a classificação dos áudios com base em critérios definidos.

2. Principais Destaques de Conceito e Metodologia Aplicada



Abstração

A habilidade de abstração é fundamental na programação orientada a objetos. Neste projeto, podemos observar como diferentes tipos de áudios (músicas e podcasts) podem se valer de uma classe mãe abstrata (Audio) para herdar características e comportamentos em comum. Além disso, a abstração nos permite expandir o projeto no futuro, adicionando novos tipos de áudios, como audiobooks ou videoclipes.

public abstract class Audio {
    // 
} 



Pacotes

A organização em pacotes foi adotada para manter o código bem estruturado e modular. Isso facilita a compreensão e manutenção do projeto, permitindo a separação lógica das funcionalidades.

package com.javafy.www
package com.javafy.www.model;
package com.javafy.www.classification
package com.javafy.www.main



Encapsulamento

O encapsulamento foi aplicado ao definir os atributos das classes como privados e fornecer métodos getters e setters para acessá-los. Isso garante a integridade dos dados e previne acessos não autorizados.

public class Music extends Audio implements Classification {
    
   private  String title;
   private  int duration;
   private int likes;
   private int reproductions;
   private boolean like = false;

    //
}



Construtores

Os construtores desempenham um papel crucial na inicialização dos objetos. No caso da classe Music, temos dois construtores. O primeiro não recebe nenhum parâmetro e inicializa todos os campos com valores padrão. O segundo é parametrizado, recebendo title, duration, artist, album e genre. Ambos são úteis e seguem boas práticas. Além disso, o segundo construtor chama o construtor da classe pai (super(title, duration)), o que é uma prática correta.

public class Music extends Audio implements Classification {
    //
    public Music() {
        super();
        // ...
    }

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



Métodos Getters e Setters

Os métodos getters e setters são essenciais para acessar e modificar os atributos de forma controlada. Eles garantem que as operações de leitura e escrita ocorram de maneira segura.

public abstract class Audio {
    //
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        if (title != null && !title.isEmpty()) {
            this.title = title;
        } else {
            System.out.println("Title cannot be null or empty.");
        }
    }
    //...
   }



Herança

A herança é uma característica essencial da programação orientada a objetos. Neste projeto, vemos como as classes Music e Podcast estendem a classe abstrata Audio. Isso permite a reutilização de código e a especialização de comportamento.

public class Music extends Audio implements Classification {
    // ...
}

public class Podcast extends Audio implements Classification {
    // ...
}



Campos

Os campos representam os atributos que armazenam informações sobre o áudio. Eles são cuidadosamente definidos para refletir as características de cada tipo de áudio.

public abstract class Audio {
    //...
}
private String title;
private int duration;
// ...



Interface e Implementação

A interface Classification foi criada para garantir a presença do método getClassification em todas as classes que a implementam. Isso promove a implementação de contratos e facilita a manutenção do código.

public interface Classification {
    
public int getClassification();
}



Polimorfismo

O método theBest foi implementado de forma polimórfica nas classes Music e Podcast. Essa abordagem permite que diferentes tipos de objetos, que implementam a interface Classification, possam ser passados como argumento para este método. Isso é um excelente exemplo do bom uso do polimorfismo, pois ele possibilita o uso do método em diferentes tipos de objetos.

Essa implementação polimórfica amplia a capacidade do sistema de lidar com diferentes tipos de áudios de forma coesa e eficaz, proporcionando uma abordagem flexível para a classificação de áudios com base em seus próprios critérios. Isso é uma prática valiosa na Programação Orientada a Objetos, pois promove a reutilização de código e a flexibilidade no design do sistema.

public class TheBest {

    public void theBest(Classification classification) {
        if (classification.getClassification() > 3) {
            System.out.println("This is one the best!");
        } else {
            System.out.println("This is one hit!");
        }
    }
}



Imports

Os imports foram organizados de forma limpa e sem duplicações, seguindo as melhores práticas de organização de código.

// ...



Criação de Instâncias e Chamadas de Método

No Main, instâncias das classes Music e Podcast são criadas e seus métodos são chamados para demonstrar o funcionamento do sistema.

public class Main {
    Music motherMother = new Music("Mother", 3, "Danzing", "Punk", "Rock");
    motherMother.showTechnicalSheet();
}



Boas Práticas de Nomeação

Todos os elementos foram nomeados de forma clara e descritiva, seguindo as convenções de nomenclatura Java. Isso torna o código mais legível e fácil de entender.



Clareza de Saídas, Testes e Comentários

A saída no console foi formatada de forma clara e informativa. Foram realizados testes para verificar o funcionamento do sistema. Comentários explicativos foram adicionados para fornecer informações adicionais sobre o código.



Design e Manutenção de Código

A aplicação de princípios de POO resulta em um código mais organizado e de fácil manutenção. A distribuição por classes e a utilização adequada de modificadores de acesso facilitam a colaboração em equipe, permitindo que diferentes desenvolvedores trabalhem de forma simultânea e segura em diferentes partes do projeto. Isso elimina a necessidade de copiar e colar código, promovendo uma estrutura de código mais coesa e legível.



3. Conclusão

A Programação Orientada a Objetos não é apenas uma técnica de programação, mas uma filosofia que promove a organização e a escalabilidade do código. Ao aplicar os princípios de abstração, herança, encapsulamento e polimorfismo, conseguimos criar sistemas mais robustos e flexíveis.

No nosso projeto, isso se traduz em um player de áudio intuitivo e de fácil manutenção. A estrutura bem definida e a clareza na organização do código facilitam a adição de novos recursos e tipos de áudios no futuro.



4. Contribuições

Contribuições e feedback são bem-vindos! Se deseja contribuir com melhorias ou correções, sinta-se à vontade para abrir uma issue ou enviar um pull request.



5. Licença

Este projeto é de autoria de Higor Cazuza e está disponível sob a Licença MIT.



Janaína Cazuza
Github: @janainacazuza
Autora do projeto

Higor Cazuza
Github: @higorcazuza81
coautor do projeto

javafy's People

Contributors

janainacazuza avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.