Jump to content
Fórum Script Brasil
  • 0

Ajuda com Generics e Library


enemy100

Question

alguém poderia me ajudar nessas questoes?

já fiz e refiz 3 vezes mas ta fogo!!!

1)

fazer Uma classe Library que funcione como uma biblioteca para o seguinte tipo de mídia: livros, vídeos e músicas. A sua implementação deve obrigatoriamente fazer uso de generics. Sinta-se à vontade para usar qualquer API de java em sua implementação, caso julgue necessário. Basicamente a biblioteca deverá possuir os métodos:

public insertElement (E element, K key) // inserir um novo ítem na biblioteca com uma chave dada que poderá ser usada para, posteriormente, recuperar o ítem da biblioteca.

E recoverElement (K key) // recuperar um ítem da biblioteca

void orderLibraryByKey ( ) // classifica os itens da Library em ordem alfabética, segundo a chave

A classe Library deverá ser desenvolvida de modo a ser thread safe, isto é, deve ser possível a sua utilização concomitante a partir de vários threads.

Obs.:Não se esqueça do construtor.

2)

Forneça o código em Java para a classe Midia e suas subclasses: Livro, Vídeo e Música e desenvolva uma pequena aplicação que use a classe Library para armazenar dados sobre os seus livros, vídeos e músicas (ex.: título, autor, editora, data, ISBN, gravadora, diretor, atores, gênero, etc.). Você poderá ter uma instância da classe Library para cada tipo de produção, uma para os livros, outra, para os vídeos e outra, para as músicas.

3)

Desenvolva um programa em Java com pelo menos dois diferentes threads que operem sobre a classe Library, armazenando e recuperando informações sobre os seus livros, vídeos e músicas. Entre uma operação e outra nestes threads espere um intervalo variando aleatoriamente entre 0 e 8 segundos.

4)

Desenvolva um método showProperties() para cada uma das classes mencionadas na segunda questão e que simplesmente imprima as variáveis de instância que definam as características (título, autor, etc.) da mídia em questão. A seguir forneça um exemplo do uso desses métodos envolvendo Polimorfismo.

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Acho que é algo +- assim:

cria um enumerador para o tipo de mídia

public enum TipoMidia {
    LIVRO, MUSICA, VIDEO;
}
Library.java
import java.util.*;

public class Library{
    
    private Map<Integer, Midia> biblioteca = new HashMap<Integer, Midia>();
    
    public synchronized void insertElement(Midia novaMidia, int key){
        biblioteca.put(key, novaMidia);
    }
    
    public synchronized Midia recoverElement(int key){
        return biblioteca.get(key);
    }
    
    public synchronized void orderLibraryByKey(){
        Map<Integer,Midia> bibliotecaOrdenada = new TreeMap<Integer,Midia>();
        bibliotecaOrdenada.putAll(biblioteca);
        biblioteca = null;
        biblioteca.putAll(bibliotecaOrdenada);
        bibliotecaOrdenada = null;
    }
    
}
Midia.java
public abstract class Midia {

    private TipoMidia tipo; 
    /*
     * demais atributos de uma mídia em geral
     * */
    
    public TipoMidia getTipo(){
        return this.tipo;
    }
    
    public void setTipo(TipoMidia tipo){
        this.tipo = tipo;
    }
    /*
     * demais getters e setter dos atributos
     * */
    
    public final void salvar(){
        Library biblioteca = new Library();
        biblioteca.insertElement(this, 1);
    }
    
    public final void recuperar(int key){
        Library biblioteca = new Library();
        carregarMidia(biblioteca.recoverElement(key));
    }
    
    private final void carregarMidia(Midia midiaRecuperada) {
        this.tipo = midiaRecuperada.tipo;
        /*
         * continua carregando
         */
        carregarEspecifico(midiaRecuperada);
    }

    public final void ordenar(){
        Library biblioteca = new Library();
        biblioteca.orderLibraryByKey();
    }
    
    public abstract void carregarEspecifico(Midia midiaRecuperada);
}
Daí você cria os três tipos de mídia herdando Midia, e neles você coloca só os atributos específicos e implementa o carregaEspecifico em cada um deles, que é onde você carrega os itens específicos de cada tipo de mídia, os comuns são carregados pelo carregaMidia Livro.java
public class Livro extends Midia{

    /*atriutos específicos de um livro*/
    
    /*getters e setters*/
    
    @Override
    public void carregarEspecifico(Midia midiaRecuperada) {
        /*
         * Carrega os dados específicos recuperados nos atributos
         * ex: this.paginas = midiaRecuperada.paginas;
         */        
    }
}

O resto ali é de boa, a Thread e o ShowProperties()

ShowProperties() tu pode reescrever o ToString dos objetos

Edited by Iceguy
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...