Temas abordados: sobrescrição de métodos, utilização de classes genéricas com parametrização, herança, campos protected
Padrão pedagógico: fill the blanks, read before write
- Baixe o projeto e abra-o pelo BlueJ. Trata-se de um projeto bem parecido com o projeto de CDs e Vídeos visto em roteiro de aula anterior (se você fez os exercícios do roteiro em questão, estará bem familiarizado com o projeto). O código das classes deste projeto está incompleto, e você deverá implementar as partes que estão faltando. Ao ler o código fonte das classes, preste bastante atenção nos comentários que começarem com //***, pois eles indicam que você tem que escrever algum código naquele ponto e o que seu código deve fazer (bem, escreva o código abaixo do comentário, sem apagá-lo).
- Comece lendo o código da classe Item (não há nada a escrever nesta classe, apenas leia).
- Proceda com a leitura da classe Video, codificando o que falta de acordo com os comentários. O que você deve codificar nesta classe é extremamente simples e você não deve encontrar dificuldades pra fazê-lo. Caso encontre dificuldades, tente ler a classe CD e codificar por analogia.
- Proceda com a leitura e codificação da classe BancoDeDados, sempre de acordo com os comentários. Procure ao máximo codificar sem a ajuda de um colega ou do professor. Você pode, num primeiro momento, pedir ajuda aos universitários na documentação Java.
Depois de realizadas todas as codificações e compiladas todas as classes...
No BlueJ:
- Crie um objeto BancoDeDados.
- Crie um objeto CD e configure-o
- Crie um objeto Video e configure-o
- Crie outro objeto Video e configure-o
- Adicione todos os objetos Video e CD ao objeto BancoDeDados
- Chame o método listar() do objeto BancoDeDados e verifique seu funcionamento. Reflita sobre o seguinte: como fazer com que detalhes específicos dos CDs (artista ou número de faixas, por exemplo) e dos Vídeos (diretor) sejam escritos na tela? (reflita MESMO, antes de ler o que vem a seguir!)
- Agora, copie o seguinte método na classe CD:
public String transformarEmString(){
return artista+", "+titulo+"("+tempoTotal+" minutos)";
}
8. Siga novamente os procedimentos de 1 a 6 e discuta os resultados. Se você mudar o nome do método da classe CD de transformarEmString() pra converterPraString() vai fazer alguma diferença na execução? Por quê?
9. Agora, faça com que também seja impresso o número de faixas de cada CD
10. Faça com que seja escrito o nome do diretor de cada filme
Implemente o seguinte método na classe Video...
public boolean equals(Object o){
Video v = (Video)o;
return this.titulo.equals(v.titulo);
}
... e o seguinte método na classe BancoDeDados
public boolean remover(Item item){
return itens.remove(item);
}
Feito isto, no BlueJ:
- Crie um objeto BancoDeDados
- Crie um objeto CD e configure-o
- Crie um objeto Video e configure-o
- Crie outro objeto Video e configure-o, tomando o cuidado para que todos os atributos deste sejam exatamente iguais aos do objeto criado no passo 3 (e não deixe atributos nulos)
- Crie outro objeto CD e configure-o, tomando o cuidado para que todos os atributos deste sejam exatamente iguais aos do objeto criado no passo 2 (e não deixe atributos nulos)
- Adicione apenas os objetos Video e CD criados nos passos 4 e 5 ao objeto BancoDeDados
- Chame o método remover() do objeto BancoDeDados, passando o CD criado no passo 2 como parâmetro. Verifique como ficou o ArrayList itens, na classe BancoDeDados
- Chame o método remover() do objeto BancoDeDados, passando o Video criado no passo 3 como parâmetro. Verifique como ficou o ArrayList itens, na classe BancoDeDados. O que você pode concluir deste comportamento???
Ah... um desafio... (1,0 ponto)
Faça com que o método remover, da classe BancoDeDados, efetivamente remova um objeto do ArrayList de itens caso o título dele seja igual ao título do objeto passado como parâmetro para o método remover (independentemente de maiúsculas e minúsculas).
Ah... mais um desafio... (1,5 pontos)
Reescreva a classe BancoDeDados de forma que o campo itens possa receber objetos de diferentes classes (como LinkedList e Vector) numa eventual extensão da classe BancoDeDados através da sobrescrição de métodos. Considere o seguinte cenário: a classe BancoDeDados não está funcionando bem com seu atributo itens sendo uma instância da classe ArrayList e queremos estender a classe BancoDeDados para instanciar a propriedade itens como um LinkedList. Você deve reprogramar a classe BancoDeDados para que tal extensão seja possível e deve, também, programar a extensão.
Ah... outro... (1,0 ponto)
Escreva o seguinte método na classe BancoDeDados
public void listar2(){
for (Item i:itens) System.out.println(i);
}
(Teste o método para ver qual é sua saída). O que fazer para que listar2() produza a mesma saída de listar() SEM modificar nenhuma linha de listar2() nem de listar() ?