FUNDAÇÃO UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO PROFESSOR: Adilson Vahldick PROGRAMAÇÃO ORIENTADA A OBJETOS II Exercício 05 Esse exercício representa a implementação de controle de celeiros. No diagrama abaixo a classe Celeiro é delimitada por um tipo genérico Racao. Um objeto Racao representa um saco de ração. Quando se constrói um celeiro ele possui uma identificação e a quantidade máxima de sacos que ele suporta. O método addSaco adiciona um saco, desde que não tenha alcançado a quantidade máxima. O método consumirSaco retorna um saco e retira ele do celeiro. A ordem de retirada é a mesma ordem de entrada: primeiro saco adicionado é o primeiro saco a sair. O método getQtdadeSacosAtuais() retorna quantos sacos estão armazenados no celeiro. Existem dois tipos de Racao: Milho e Soja. O método consumir do Milho retorna 100 e da Soja retorna 50. Podem ser registrados listeners ao celeiro. O celeiro notifica esses listeners em três momentos: quando um novo saco consegue ser adicionado (entrouNovoSaco), quando após retirar o saco o celeiro está com metade de sua capacidade (chegouNaMetade) e quando após retirar o saco o celeiro ficar vazio (chegouNoFinal). Observe que nesses métodos é enviado um objeto EventObject. Ao criar um objeto desses, passe como parâmetro o objeto Celeiro. Existem dois tipos de listeners: 1. EchoListener: que imprime na console as mensagens “Chegou na metade do celeiro xxx”, “Chegou no final do celeiro xxx” e “Entrou novo saco no celeiro xxx. Agora tem yyy sacos”, para os métodos chegouNaMetade, chegouNoFinal e entrouNovoSaco respectivamente. Onde se lê xxx representa o id do celeiro e yyy é a quantidade de sacos que o celeiro possui; 2. MailListener: que trata somente a notificação de chegouNoFinal. Ele cria um novo objeto Mail, popula ele com o destinatário, assunto e mensagem, e adiciona esse objeto numa lista interna da classe MailListener. Crie um método getListaMails() para retornar essa lista. Você precisa criar essa classe Mail. O destinatário segue o seguinte formato : [email protected] onde id é o id do celeiro. O assunto é fixo e contém o texto “Chegou no final”. A mensagem também é fixa e contém “Atenção: verifique o celeiro pois terminou o estoque.”. Essa classe Mail tem um método toString que retorna uma string no formato abaixo, onde o xxxx precisa ser substituído pelos respectivos valores: Para: xxxx Assunto: xxxx Mensagem: xxxx Crie uma classe de Sistema que faça: (i) crie um celeiro tipado para o milho com id 10 e quantidade máxima de 4; (ii) crie um celeiro tipado para a soja com id 20 e quantidade máxima de 2; (iii) crie um EchoListener; (iv) crie um MailListener; (v) registre o EchoListener no celeiro do milho; (vi) e (vii) registre no celeiro da soja o EchoListener e o MailListener; (viii) adicione cinco sacos de soja, com id de 1 a 5, no celeiro da soja; (ix) adicione cinco sacos de milho, com id de 1 a 5, no celeiro do milho; (x) consuma um saco de soja; (xi) imprima na console “Saco de soja consumido : zzz” , onde zzz representa o valor retornado do método consumir do saco consumido em (x); (xii) consuma um saco de milho; (xiii) imprima na console “Saco de milho consumido : zzz” , onde zzz representa o valor retornado do método consumir do saco consumido em (xii); (xiv) consuma um saco de soja; (xv) imprima na console todos os objetos Mail.