clp-2014-01

Propaganda
Características das Linguagens de Programação - P2 –13/08/2014
1a questão: (valor: 2,5) O código a seguir é uma implementação (not thread safe) – em desenvolvimento
- de uma fila de capacidade limitada, utilizando-se generics. Os métodos insertElement(T info) e
pickUpElement(), por esquecimento do autor, não tratam das condições associadas à fila cheia e fila
vazia, respectivamente. Altere-os de forma a lançarem, respectivamente, as exceções
FullBoundedQueueLinkedListException e EmptyBoundedQueueLinkedListException, no caso da tentativa de
inserir um elemento em uma fila já cheia ou de retirar um elemento de uma fila vazia. Forneça
também
o
código
associado
às
classes
que
implementam
as
exceções
FullBoundedQueueLinkedListException e EmptyBoundedQueueLinkedListException, codificando-as, de modo
que,em caso do lançamento de uma exceção, possa-se identificar em que fila a mesma ocorreu.
// fila de capacidade limitada implementada sob a forma de lista encadeada
public class BoundedQueueLinkedList <T> {
// NMAX = número máximo de nodos que podem ser armazenados na fila
int NMAX = 20;
int n; // número de nodos armazenados na fila
public Node<T> head; // indica o início da fila
public Node<T> tail; // indica o final da fila
public String queueName; // nome da fila
private class Node<T> {
T info;
Node<T> link;
public Node () {
this.info = null;
link = null;
}
public Node (T info) {
this.info = info;
link = null;
}
}
// construtor - assume a fila inicialmente vazia...
public BoundedQueueLinkedList(String queueName;) {
// tail = head indica condição de fila vazia.
// Adicionalmente head.link = head e tail.link = head
this.n = 0;
this.queueName = queueName;
head = new Node<T> ();
tail = head;
tail.link = head;
head.link = head;
}
public void insertElement(T info) {
// método que insere um novo elemento após o último elemento da fila
// você deve inserir comandos para testar se a fila já está cheia;
// se a fila já estiver cheia lançar a exceção FullBoundedQueueLinkedListException
//
...
//
...
n++;
Node<T> avail = new Node(info);
avail.link = tail.link;
tail.link = avail;
tail = avail;
//
...
}
//
//
//
//
//
//
public T pickUpElement() {
recupera o elemento que se encontra há mais tempo na fila (primeiro da fila).
head = tail --> indica condição de fila vazia
você deve inserir comandos para testar se a fila está vazia;
se a fila estiver vazia lançar a exceção EmptyBoundedQueueLinkedListException
...
...
Node<T> aux = head.link;
head.link = aux.link;
if (head.link == head) {
tail = head;
}
n--;
...
return aux.info;
//
}
// Percorre a BoundedQueueLinkedList e imprime seus elementos.
public void printQueueElements() {
//
...
}
}
2a questão: (valor: 1,5) Faça um programa em Java que use o código da classe BoundedQueueLinkedList
apresentada na questão anterior, de modo que você armazene e recupere objetos de uma fila de
capacidade limitada que sejam apenas instâncias de uma classe String (ou seja, você não poderá inserir
na lista e nem recuperar objetos que não sejam instâncias da classe String).
3a questão: (valor: 1,5) Forneça a implementação em Java do método printQueueElements() que
percorre a fila de capacidade limitada (BoundedQueueLinkedList) da 1a questão e imprime os seus
elementos.
4a questão: (valor: 1,5) Considere o seguinte trecho de um programa, que inclui o método abaixo, de
uma classe arbitrária, que move objetos do tipo Point, como definidos na 1a questão, além de outros
comandos:
...
public void movePoint(Point point, int dX, int dY) {
// move o ponto para x+dX, y+dY
point.setXYCoordinates(point.getXCoordinate() + dX, point.getYCoordinate() + dY); //
→B
...
//atribui uma nova referência a point
point = new Point(0, 0); // →C
}
...
// outros comandos do programa, incluindo o método main
...
Point myPoint = new Point (7, 7); // →A
...
//invocação do método movePoint
XXX.movePoint(myPoint, 28, 56 ); // →D
...
Nos pontos assinalados como →A, →B, →C e →D, qual o valor das coordenadas (variáveis de
instância) x e y de myPoint?
5a questão: (valor: 1,5) Um anagrama é uma palavra ou frase construída a partir da transposição de
letras de uma outra palavra ou frase; por exemplo, amor é um anagrama de Roma. Escreva um
programa em Java que verifique se um string s1 é um anagrama de um outro string s2. Espaços e sinais
de pontuação e de acentuação devem ser ignorados. Assim, p.ex., ‘ã’ é idêntico a ‘a’ e indica-me seria
considerado um anagrama de medicina.
6a questão: (valor: 1,5) Dê exemplos, de sua autoria, de trechos de código em java relativos a:
override de um método; ii) polimorfismo.
Boa Sorte!
Prof. Oscar Luiz Monteiro de Farias
Download