Lista 4

Recomendações Importantes

    • A lista deve ser entregue até às 23:59:59 do dia 21/01/2013.
    • 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, a não ser que exista alguma restrição na questão:
    • String
    • Scanner

Questão 1 - Ground control to Major Tom, Take your protein pills and put your helmet on

Parabéns, você foi contratado pela NASA para recriar o sistema de organização de Instrumentos Espaciais dele, pois o antigo foi hackeado por um ser desconhecido. Com a intenção de te ajudar, a NASA te ofereceu as seguintes informações:

  1. Todo Instrumento Especial da NASA possui ID (int) para identificá-lo e seu CUSTO (int) de fabricação
  2. Toda Carga tem ID (int), NOME(String), QUANTIDADE ALOCADA (int) e INSTRUMENTO ESPECIAL ALOCADO (int).
  3. Todo Foguete é um Instrumento Especial que devem possuir ALTURA (int), COMPRIMENTO (int), LARGURA (int), PILOTO (string), QUANTIDADE DE COMBUSTÍVEL EM LITROS (int) e DESTINO(string) da viagem, onde deverá ser permitido ter acesso a todos os dados e alterar somente o nome do piloto, a quantidade de combustível e o destino do foguete.Além disso há dois tipos de foguetes: a)Foguetes de Exploração que também deve conter um ARRAY DE PASSAGEIROS (array de string), no qual deve ser possível adicionar ou remover um passageiro. b)Foguetes de Carga que também deve conter QUANTIDADE DE CARGAS POSSIVEIS (int), ARRAY DE CARGAS (array de int).
  4. Todo Robô de Exploração é um Instrumento Especial que possui como características DESTINO (string), TEMPO PARA CHEGADA AO DESTINO (int), COMBUSTÍVEL EM LITROS (int), CAPACIDADE DE ARMAZENAR CARGA (booleano), QUANTIDADE DE CARGAS POSSIVEIS(int), ARRAY DE CARGAS(array de int). Deve-se ser capaz de alterar o tempo para chegar ao destino, combustível, objetos dentro do array e destino.

Obs: É obrigatório utilizar herança e classes abstratas nesta questão.

Questão 2 - This is Major Tom to ground control, I'm stepping through the door

A NASA também pediu para você definir Interfaces para todas as classes não abstratas criadas caso ela necessite criar algum repositório, logo crie Interfaces com as seguintes possibilidades:

  1. Adicionar objeto – adiciona objeto na estrutura de dados alocada
  2. Remover Objeto – remove objeto da estrutura de dados alocada
  3. Buscar objeto – Busca objeto na estrutura de dados alocada
  4. Verificar existência do objeto – Verifica se um certo objeto existe na estrutura de dados alocada

Questão 3 - And I'm floating in the most peculiar way, And the stars look very different today

A NASA está com preguiça de organizar as estrutura de dados, logo ela está pedindo para você implementar um repositório em array para cada interface que você criou na questão anterior. O array do repositório deve iniciar com tamanho '1', e ser expandido a medida que for necessário.

Questão 4 - Ground control to Major Tom, Your circuit's dead, there's something wrong

Percebendo que você tem grandes habilidades de programação, ela agora requer a você para definir uma classe de Negócios, que utilizada de alguma coleção de dados para armazenar objetos das classes definidas na questão 1 nela. Deve ser possível cadastrar, remover, procurar e atualizar (alterando algum atributo permitido do objeto). Mas vale ressaltar que a NASA gosta de coisas certinhas, logo ela o obriga a lançar exceções caso haja as seguinte situações:

  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

Podem existir mais exceções nesse ponto do sistema, principalmente relacionadas à validação dos objetos. Implemente-as a medida que achar necessário.

Exemplo: Não deve ser possível armazenar um Robô de Exploração cuja capacidade de armazenar carga é false, mas que possui uma quantidade de carga possível maior que '0'

Questão 5 - Here am I floating round my tin can, Far above the moon

Por fim, a NASA se aproveitando de sua capacidade como programador, pediu também para que você fizesse uma classe de Fachada para o sistema. Isso é, uma classe onde todas as possíveis ações que um usuário do sistema possa precisar fazer estão agrupadas, independente do tipo de interface que será implementada para o usuário (Interface texto, gráfica, web são bons exemplos).

A fachada deve permitir a criação, remoção, atualização e busca de todos os objetos relacionados ao sistema, fazendo as relações necessárias entre eles e tratando possíveis erros e inconsistências.

Por exemplo:

  • Não deve ser possível criar e armazenar uma carga cujo o ID de foguete alocado pertença a um foguete de exploração.
  • Se uma carga inserida é alocada para um foguete, esse mesmo foguete deve ter essa carga listada no seu array de cargas.

Existem várias outras situações que merecem atenção, tente cobrir todas elas.

Depois de terminada a fachada, crie uma interface texto simples que possibilite o uso de todos os métodos implementados.

Questão Desafio - Planet Earth is blue, and there's nothing I can do....

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