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.