clp-2011-01

Propaganda
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
Download