Lista 4

  • A lista deve ser entregue até às 23:59:59 do dia 26/11/2015.
  • Deixe seus programas entendíveis. Imprima mensagens para auxiliar o usuário a utilizar o seu programa.
  • Seja criativo. As mensagens do seu programa não necessitam estar iguais aos exemplos, a menos que seja especificado.
  • A lista é individual, portanto não compartilhe seus códigos com outros alunos ou os coloque em locais públicos (Pastebin, Github).
  • Não copie. Se for detectado cópia da internet ou de um colega, as LISTAS envolvidas serão completamente zeradas.
  • Alguns exemplos aqui definidos podem apresentar comentários. Note que são apenas ilustrativos.
  • A correção da Questão Desafio é booleana. Ou seja: você receberá o ponto extra do desafio caso a resposta esteja 100% correta. Qualquer erro, mesmo que seja em apenas um caso, invalidará a questão.
  • Não é permitido o uso da API de Java ou bibliotecas externas, exceto quando permitido explicitamente na questão, na lista, ou autorizado por um monitor através da lista de email (Google Groups) da disciplina. Questões submetidas que violarem essa regra serão consideradas como não entregues.
  • Lembre de não imprimir em métodos que não sejam o main, faça com que esses métodos retornem as Strings a serem impressas.
  • São permitidas nessa lista, para todas as questões:
    • String
    • Scanner

Questão 1 - ”Master Kenobi, you disappoint me. Yoda holds you in such high esteem. Surely you can do better!”

Olbie e Ian são responsáveis pela manutenção do cinema de luxo da família Skywalker e contrataram você como programador do caixa automático. Os Skywalkers são muito exigentes, então ao modelar as classes siga direitinho as seguintes especificações:

Toda Producao possui um Nome (String como identificador único) e uma Duração (double) em minutos.
Todo Trailer é uma produção, e possui Grau de Satisfação (double de 0-5), seu nome deve no formato "Trailer do Filme: x" onde X deve ser o nome de um filme já existente e sua duração de x*0,01 a duração desse filme, coloque também o filme como atributo do trailer.
Todo Filme é uma produção, e possui Nota IMDB (double de 0-5) e uma Categoria (Terror, Comédia, Aventura... escolha entre String e Enum).
Filmes podem ainda ser do tipo CGI e Adulto
Filmes do tipo CGI possuem Equipe de Efeitos (Array de String) e CustoDoEquipamento (double) em reais.
Filmes do tipo Adulto possuem Censura (int idade).

Espectadores possuem ID (String), Idade (int), Preferência (uma categoria), Filmes Assistidos (Array de String) e Número de filmes que atenderam a preferência (no formato "x/y")

Implementem seus getters and setters e o método toString que contenha todas as suas descrições. É obrigatório a aplicação dos conceitos herança e classe abstrata nessa questão.

PS:. Espectadores devem ser capazes de assistir filmes e armazenar seus nomes em um array. Toda vez que for um de sua preferência adicione a um contador, e no seu toString() deve ser mostrado no formato x/y onde X - atenderam e Y - total de filmes assistidos.

Questão 2 - “These aren’t the droids you’re looking for...”

O cinema Skywalker necessita que todas essas informações sejam armazenadas.

Crie Repositórios usando array onde deve ser possível:
Cadastrar,
Remover,
Procurar  
Atualizar.

Implemente esses métodos da forma mais eficiente e se necessário crie novos métodos. Lembre do uso de Interfaces para o repositório.

Questão 3 - “It’s not my fault.”

Anna e Kim são as gêmeas do lado negro da familia, e você sabe que elas não aceitarão falhas no sistema.

Crie a camada de Negócios, onde deve ser possível cadastrar, remover, procurar e atualizar objetos. Lembre-se de lançar exceções caso:
1. Adicionar um objeto que já exista
2. Remover um objeto que não exista
3. Procurar um objeto que não exista
4. Atualizar um objeto que não exista

O método atualizar de Espectador funciona como um "assistir", deve alterar o array de filmes assistidos, incluindo o novo escolhido filme escolhido e lançando exceções caso necessário.

Questão 4 - “You were the chosen one! It was said that you would destroy the Sith, not join them.”

Agora é hora de criar a classe Fachada. Essa é a classe que irá se comunicar com todas as classes de negócios e será chamada na classe de testes da Questão 5.

Na fachada também é necessário chamar exceções como por exemplo:
Verificar se o filme inserido na lista do Espectador existe
Verificar se a censura do filme esta ok para o Espectador

Se for necessário crie outras exeções, lembrando de verificar todos os casos possíveis.

Questão 5 - “The circle is now complete. When I left you, I was but the learner; now I am the master.”

Faça a classe de testes, para interação com o usuário, e se comunicar com a fachada, onde através do console seja possível realizar todas as operações:

Criar objetos.
Excluir objetos.
Buscar nos repositórios, utilizando o nome da produção ou id do espectador, e com isso visualizar todos os dados do objeto encontrado.
Buscar um espectador e tentar assistir um filme.
Modificar um objeto.
Encerrar o programa.

Devem ser tratadas todas as exceções da classe fachada utilizando blocos try/catch de forma que o programa não encerre quando qualquer exceção seja lançada, e que fique claro para os usuários o erro dado. Vovô Vader é meio lento, então precisamos fazer tudo de forma intuitiva ok?

Questão Desafio - “Do. Or do not. There is no try.”

Será concedido o token de desafio à quem conseguir nota maior ou igual a 8,5 nessa lista.