Prova Final de Características de Linguagens de Programação – 11/07/2011 a 1 questão: Considere a hierarquia de classes esboçada abaixo: Dinosaur Brontosaur Brontosaur Argentinus Tyrannosaur Brontosaur Brasilienses A classe abstrata Dinosaur estabelece os métodos que suas subclasses deverão implementar (vide código abaixo), a fim de estabelecer um comportamento específico para cada espécie (tipo) de dinossauro. Qual seria a implementação (explicite o código em Java) que você daria à classe Brontosaur e suas subclasses, de modo a descrever a forma de comer (eat), dormir (sleep) e correr (run) para os tipos de dinossauros correspondentes? Inclua também, no seu código, uma forma de se atribuir um identificador único a cada dinossauro, a fim de que o mesmo possa ser rastreado pelos pesquisadores da APDAL (Associação dos Protetores de Dinossauros da América Latina). Observação: devido ao tempo limitado da prova use algo similar a: System.out.println(“Brontosaur running”); … para especificar a forma de correr de um Brotonsaur, por exemplo. Codigo da classe abstrata Dinossaur: Public abstract class Dinosaur { // declarações das variáveis de instância ... int weight; int height ... // methods // constructors ... // other methods ... public abstract void eat(); public abstract void sleep(); public abstract void run(); ... } a 2 questão: Dê um exemplo de polimorfismo que inclua algumas das classes que voce codificou na questão anterior. Você deve apresentar o código Java correspondente a um pequeno programa exemplo. a 3 questão: Considere que um Dinossauro dino1 é maior que um Dinossauro dino2 se o produto do peso pela altura de dino1 é maior que o produto correspondente do peso e altura de dino2. Implemente na classe Dinosaur a interface Relatable que estabelece como comparar o “tamanho” entre dois objetos. public interface Relatable { // this (object calling isLargerThan) and // other must be instances of the same class // returns 1, 0, -1 if this is greater // than, equal to, or less than other public int isLargerThan(Relatable other); } a 4 questão:Desenvolva uma classe em java que possua um método que receba dois objetos, instâncias de duas classes como input e verifique se uma das classes é subclasse da outra e vice-versa, ou se as duas classes não pertencem à mesma hierarquia de classes. Sugestão: Use os métodos getClass() da classe Object e getName() da classe Class. a 5 questão:Considere o código (incompleto) da classe Buffer. Inclua os comandos necessários para sincronizar as operações entre objetos do tipo Producers (que inserem caracteres em um objeto do tipo Buffer) e objetos do tipo Consumers (que retiram caracteres de um objeto do tipo Buffer) que se encontram em diferentes threads; Forneça também o código das classes Producer e Consumer e de uma pequena aplicação demonstrando o uso conjunto das classes Buffer, Producer e Consumer. class Buffer { private char [] buffer; private int count = 0, in = 0, out = 0; Buffer(int size) { buffer = new char[size]; } public ... void Put(char c) { while(count == buffer.length) { ,,, } System.out.println("Producing " + c + " ..."); buffer[in] = c; in = (in + 1) % buffer.length; count++; ... } public ... char Get() { while (count == 0) { ... } char c = buffer[out]; out = (out + 1) % buffer.length; count--; System.out.println("Consuming " + c + " ..."); ... return c; } } Boa Sorte! Prof. Oscar Luiz Monteiro de Farias