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