Lista 4

Recomendações Importantes

  • A lista deve ser entregue até às 23:59:59 do dia 20/01/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.
    • São permitidas nessa lista, para todas as questões:
    • String
    • Integer
    • Calendar

Questão 1 - "Você foi a culpada desse amor se acabar!"

Eduardo é um aluno do CIn que anda meio tristonho por estar sozinho, devido ao último revés que recebeu. Mas Edu acha que o dinheiro e o álcool podem ajudá-lo a sair dessa sofrência. Para isso, ele pediu para que vocês alunos do CIn desenvolvessem um aplicativo que seja capaz de fazer casais numa mesa de bar. Quem sabe até ele mesmo use o aplicativo =P.

Uma pessoa possui nome, idade, limite alcoólico e opção sexual e range - distância procurada.

Opções sexuais: Hétero, Homossexual e Bissexual.


Pessoas (abstrata) são divididas em:

Homens: bebem Cerveja, Whisky e Pitu

Mulheres: bebem Cerveja, Vinho e Vodka

Ambas recebem 3 inteiros que correspondem ao número de doses de cada bebida em ordem. Pessoas devem ter um método que retorna o nível de álcool no sangue que é calculado da seguinte forma:

Cerveja Original*0,05

Vinho do Porto*0,20

Vodka Orloff*0,38

Whisky White Horse*0,40

Pitu Gold*0,39

#Propaganda

E um método que diz se o limite alcoólico foi atingido ou não.

Local

Possui String nome, int range e String info sobre o local.


Momentos

Possuem a informação do momento (Local, String evento e Calendar data). São dividos em:

Momentos Juntos: range máximo do local pode ser de 0 até o menor dos dois, ambas as pessoas devem ter opções sexuais que abranjam o outro.

Momentos com Amigos: não possui range máximo, possui um array de velas (amigos que estarão segurando vela, podendo aumentar o número de amigos).

Momentos Juntos possui um método que diz se a noite foi um fracasso (um dos dois deu PT ou seja, limite de um dos dois foi excedido).

Momentos com os amigos possui um método getAlambique, que retorna quem é capaz de beber mais numa noite, podendo ser o casal e/ou qualquer vela presente e a bebida ingerida que compõe maior parte do álcool no sangue do Alambique no Momento.

Para todas as entidades, você deve implementar um método toString() que retorna uma string descrevendo todas as características do objeto. Utilize da forma mais apropriada os conceitos de herança e classe abstrata.

Questão 2 - "Você que machucou meu coração me fez chorar..."

Crie os repositórios para as três classes básicas com as funções de adicionar um objeto, remover, buscar e verificar se certo elemento existe. Implemente-os com uso de array.

O array deve iniciar com capacidade 2 e cada vez que for necessário ultrapassar a capacidade na hora de inserir, deve dobrar de tamanho.

Obs.: é obrigatório o uso de interface para definir os repositórios.

Questão 3 - "E me deixou num beco sem saída."

Faça classes de negócio que vão se comunicar com os repositórios. Nestas classes serão lançadas exceções.

Você deve lançar exceção para os seguintes casos especiais:

Adicionar um objeto que já existe.

Remover um objeto que não existe.

Buscar um objeto e não encontrá-lo.

Atualizar um objeto (sem modificar os nomes, caso modifique uma pessoa, seus novos dados devem ser atualizados nos momentos que ela estiver).

Ps:. Não é possível trocar uma pessoa de um evento (apenas atualizar com os valores modificados).

Não deve ser permitido:

- Uma data no formato inválido.

- Criar um Momento Junto que tenha range inválido.

- Valores inválidos para os atributos dos objetos (Nomes vazios, Doses negativas, etc...).

Questão 4 - "Estou indo embora, a mala já esta lá fora."

Faça uma classe de fachada pro seu sistema! A fachada se comunica com as classes de negócio, independe da interface com que o usuário vai interagir (console, GUI etc.). Mantenha a consistência dos dados considerando as relações entre as entidades:

- Para criar um Momento é necessário que ambas as pessoas estejam no repositório e elas devem ter opções sexuais compatíveis.

- Para criar um Momento, o local deve estar no repositório.

- Um momento não pode ser criado se o Range for inconsistente com o especificado.

Deve conter um método capaz de adicionar uma vela a um dado momento, verificar se a noite foi um fracasso ou não, caso seja um momento com amigos verifique o alambique da turma, atualizar um dado objeto (modificando outros caso necessário).

Questão 5 - "Estou indo embora agora, por favor não implora."

Por último e mais importante, faça uma classe de teste, para interagir com o usuário e se comunicar com a fachada, onde através do console seja possível realizar todas as seguintes operações:

  • Criar e excluir objetos.
  • Buscar nos repositórios usando o nome, e visualizar os dados do objeto encontrado (incluindo o alambique da noite, o resultado do encontro...).
  • Modificar um objeto.

Trate todas as exceções da fachada utilizando blocos try/catch de forma que o programa não encerre quando qualquer uma dessas exceções for lançada e que fique claro para os usuários qual erro ocorreu.

Faça um menu numérico que facilite os testes (monitor feliz, correção feliz =D).

Obs.: nesta questão é permitido o uso de Scanner.

Questão 6 - "Porque Homem não chora."

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