Nome: Número: Programação com Objectos 10 de Novembro de 2015, 08:00 (90 minutos) Primeira Parte (7 valores) Segunda Parte (3 valores) PERGUNTA NOTA PERGUNTA RESPOSTA 1.1 2.1 1.2 2.2 1.3 1.4 2.3 2.4 2.5 1ª PARTE 2ª PARTE certas 0.6 / erradas -0.15 / ausentes 0 Para alterar uma resposta: riscar a resposta antiga e escrever à frente a nova resposta. Considera-se ausência de resposta a apresentação de várias repostas a uma pergunta, mesmo que uma delas esteja certa. Consideram-se não respondidas as perguntas cujas respostas não estejam assinaladas nesta tabela.
2/7 1.1. (3.0 val.) Considere o seguinte domínio: Um jardim zoológico é constituído por vários edifícios e tem funcionários e animais. Um jardim zoológico tem um nome e uma morada. Os animais do jardim zoológico podem estar de boa saúde ou doentes. Cada animal tem um dado peso e ano de nascimento. Os animais comem, dormem e podem ser curados. Existem dois tipos de animais: os herbívoros e os carnívoros. Estes dois tipos de animais distinguem-se pela forma como comem. A forma de comer é específica para cada tipo de animal. Relativamente aos funcionários, os funcionários trabalham. Existem três tipos de funcionários: tratador, veterinário e contabilista. Um tratador tem um nome e está associados a uma ou mais jaulas. O trabalho de um tratador corresponde a alimentar os animais que estão nas jaulas que lhe estão associadas. Por seu lado, um veterinário tem também um nome e está associado a um conjunto de animais. O trabalho de cada veterinário consiste em tratar os animais que lhe estão atribuídos. Finalmente, um contabilista também tem um nome e está atribuído a um dado edifício. O trabalho deste tipo de funcionário corresponde a realizar a contabilidade do jardim zoológico. Cada edifício pode ter zero ou mais jaulas. Cada jaula tem uma dada capacidade e pode ter animais ou estar vazia. A capacidade de uma jaula é medida em função do peso dos animais. Só é possível adicionar um animal a uma jaula desde que o somatório dos pesos dos animais pertencentes à jaula seja menor ou igual à capacidade da jaula. O jardim zoológico mantém a lista actualizada de todas as pessoas que já visitaram o jardim zoológico. Cada visitante tem um ano de nascimento, nome e morada. É ainda mantido o número de vezes que cada visitante já visitou o jardim zoológico. O jardim zoológico deverá ter a funcionalidade de enviar um entrada grátis para os 10 melhores visitantes. Desenhe o diagrama de classes UML correspondente ao domínio apresentado. Represente as classes (seus nomes, métodos e atributos). Indique também as relações de herança e associação.
Programação com Objectos 201511100800 3/7
4/7 (espaço adicional) 1.2. (1.0 val.) Concretize em Java o seguinte domínio. Uma fila (Queue) é uma estrutura de dados do tipo FIFO que é caracterizada por duas operações fundamentais: enqueue e dequeue. A operação enqueue adiciona um novo item ao fim da fila enquanto que a operação dequeue retira o elemento que está no início da fila e devolve esse elemento. Retirar um elemento de uma fila vazia deve lançar uma situação de erro específica. Uma fila pode ter diferentes concretizações, dependendo da forma como os elementos são guardados. Considere apenas o caso em que a estrutura usada para guardar os elementos é a classe da biblioteca do Java LinkedList (que além dos métodos de List tem o método adicional removefirst() que remove o primeiro elemento da lista e devolve esse elemento). Concretize todas as entidades referidas neste domínio (com a excepção de LinkedList, em que pode utilizar a classe já disponível na biblioteca do java). Pretende-se ainda que esta concretização de fila tenha um método adicional, count(object obj), que devolve o número de vezes que o objecto referenciado por obj está guardado na fila.
Programação com Objectos 201511100800 5/7 (espaço adicional)
6/7 1.3. (1.5 val.) Relacione o princípio de desenho aberto-fechado (open/close) com o conceito de polimorfismo. 1.4. (1.5 val.) A seguinte classe Test compila sem erros. No entanto, a execução do método max desta classe pode gerar um erro em tempo de execução. public class Test { (a) Explique porque é necessário fazer public static Object max(object o1, Object o2) { um cast de o1 para Comparable para que if (((Comparable)o1).compareTo(o2) >= 0) este código compile sem erros. return o1; return o2; } } (b) Em que situações é que a execução deste método gera um erro em tempo de execução
Programação com Objectos 201511100800 7/7 2.1. No contexto da linguagem de programação Java, indique qual das seguintes frases é verdadeira: (a) Uma classe apenas pode concretizar uma interface (b) As interfaces só podem estender uma interface (c) Após ter sido criado, é possível alterar o tamanho de um array (d) Não é possível definir um construtor numa classe abstracta (e) são todas falsas 2.2. O conceito de herança em Java é expresso pela seguinte palavra chave: (a) implements (b) inherits (c) extends (d) class (e) nenhuma das anteriores 2.3. Em Java, para impedir que um método possa ser sobrecarregado (overloaded) deve-se utilizar a seguinte palavra chave na definição do método: (a) private (b) unique (c) final (d) static (e) Não é possível impedir um método de ser sobrecarregado 2.4. Em Java, qual das seguintes palavras chave é que não é utilizada no mecanismo de tratamento de excepções: (a) try (b) catch (c) exception (d) throw (e) são todas utilizadas 2.5 Considere o seguinte excerto de código, em que Sub é uma subclasse de Sandwich /* 1: */ Sandwich x = new Sandwich (); /* 2: */ Sub y = new Sub(); /* 3: */ x=y; /* 4: */ y=x; /* 5: */ y = new Sandwich(); /* 6: */ x = new Sub(); Indique as linhas das atribuições inválidas em Java. NÃO ESQUECER DE PREENCHER GRELHA DE RESPOSTAS DA PARTE 2 NA FOLHA DE ROSTO