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 AdultoFilmes 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á exista2. Remover um objeto que não exista3. Procurar um objeto que não exista4. Atualizar um objeto que não existaO 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 existeVerificar se a censura do filme esta ok para o EspectadorSe 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.