1
resposta

[Projeto] Gerenciamento de biblioteca [código]

Ficou assim a minha resolução para a exercício do Gerenciamento de Biblioteca. Alguma melhoria poderia ser aplicada?

Main

public class Ex003 {
    public static void main(String[] args) {
        Livro livro = new Livro("O Guia do Mochileiro das Galáxias", 1979,"Douglas Adams");
        Revista revista = new Revista("National Geographic", 2023, 245);
        Ebook ebook = new Ebook("Clean Code", 2008, "PDF");

        livro.exibirInfo();
        revista.exibirInfo();
        ebook.exibirInfo();

Midia

package ClassesAbstratasInterfaceHeranca.ex003;

public abstract class Midia {
     public String titulo;
     public Integer anoPublicacao;

    public Midia(String titulo, Integer anoPublicacao) {
        this.titulo = titulo;
        this.anoPublicacao = anoPublicacao;
    }

    public String gerarCod(){
        return "LIB-" +  titulo.substring(0,3) + anoPublicacao;
    }

    public abstract void exibirInfo();
}

Livro

package ClassesAbstratasInterfaceHeranca.ex003;

public class Livro extends Midia{
    private String autor;

    public Livro(String titulo, Integer anoPublicacao, String autor) {
        super(titulo, anoPublicacao);
        this.autor = autor;
    }

    @Override
    public void exibirInfo() {
        System.out.printf("Código: %s | Livro: %s - Autor: %s \n", this.gerarCod(), this.titulo, this.autor);
    }
}

Revista

package ClassesAbstratasInterfaceHeranca.ex003;

public class Revista extends Midia{
    private int edicao;

    public Revista(String titulo, Integer anoPublicacao, int edicao) {
        super(titulo, anoPublicacao);
        this.edicao = edicao;
    }
    
    @Override
    public void exibirInfo() {
        System.out.printf("Código: %s | Revista: %s - Edição: %s \n", this.gerarCod(), this.titulo, this.edicao);
    }
}

Ebook

package ClassesAbstratasInterfaceHeranca.ex003;

public class Ebook extends Midia{
    private String formato;

    public Ebook(String titulo, Integer anoPublicacao, String formato) {
        super(titulo, anoPublicacao);
        this.formato = formato;
    }


    @Override
    public void exibirInfo() {
        System.out.printf("Código: %s | Ebook: %s - Formato: %s \n", this.gerarCod(), this.titulo, this.formato);
    }
}
1 resposta

Oi, Jose! Como vai?

Ficou muito bom o modo como você aplicou herança e polimorfismo no seu projeto. A organização das classes Livro, Revista e Ebook mostra bem o uso do método abstrato exibirInfo() e do construtor herdado de Midia. Isso deixa o código claro e fácil de manter.

Uma dica interessante para o futuro é usar o método @Override também para toString(), facilitando a exibição dos dados quando você quiser imprimir o objeto diretamente.
Veja este exemplo:


@Override
public String toString() {
    return "Codigo: " + gerarCod() + " | Titulo: " + titulo + " | Ano: " + anoPublicacao;
}

Esse metodo retorna uma string formatada com as informacoes do objeto, sem precisar chamar exibirInfo().

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!