2a Prova de Características das Linguagens de Programação – 1998 – 20 período 1a questão: Considere o 10 trabalho de Características ...(desenvolver uma pequena aplicação PaintBrush ou um Editor de Texto). Em ambos os casos, tanto no Editor como no PaintBrush, há situações em que o usuário pressionará com o mouse um dentre vários botões (p. ex. para desenhar um círculo, apagar parte de um desenho, ou estabelecer um certo tipo de formatação para o texto). Um determinado código em Java, correspondendo a um trecho do seu programa será então executado. Como, em Java, você faz para que: ao se pressionar um determinado botão o código correspondente àquele botão seja executado? Exemplifique com um pequeno trecho de seu trabalho que trate especificamente deste problema. Obs.: qualquer código adicional desnecessário levará a perda de pontos nessa questão. 2a questão: Considere o código abaixo, que implementa um servidor para jogar jogo da velha com diversos clientes simultaneamente. Explique minuciosamente a sua funcionalidade, bem como o significado dos comandos Java. import java.net.*; import java.io.*; import java.util.*; public class ServidorJogoDaVelha { public static void main( String argv[] ) throws IOException { ServerSocket ss = new ServerSocket( Integer.parseInt(argv[0]) ); while ( true ) new JogoDaVelhaConnection( ss.accept() ); } } class JogoDaVelhaConnection extends Thread { Socket sock; JogoDaVelhaConnection ( Socket s ) { sock = s; setPriority( NORM_PRIORITY - 1 ); start(); } public void run() { try { OutputStream out = sock.getOutputStream(); InputStream in = sock.getInputStream(); .... .... // comandos para "ler" a jogada do cliente, analisá-la e // responder adequadamente, isto é, enviar para o cliente // a jogada-resposta do servidor .... .... sock.close(); } catch ( IOException e ) { System.out.println( "I/O error " + e ); } } } 3a questão: Considere um Cliente, desenvolvido em Java, para que um usuário possa jogar jogo da velha com o Servidor mostrado na questão anterior. Suponha que um string “strjogo” seja utilizado para transferir as informações relativas à jogada atual entre o Cliente e o Servidor e vice-versa. Que comandos (em Java) você deveria ter no Cliente associados: i) ao envio das informações relativas à jogada do Cliente para o Servidor; ii) ao recebimento das informações referentes à jogada do Servidor. 4a questão: Digamos que você irá desenvolver uma aplicação Cliente-Servidor. Restringindo-se apenas aos aspectos relativos à Comunicação Cliente-Servidor e à construção dos mesmos, que classes em Java você usaria: i) no Cliente; ii) no Servidor. Explique o papel que estas classes desempenhariam em sua aplicação. 5a questão: A classe abstrata MapArea, abaixo, possui 3 métodos: i) contains (int x, int j) – que determina se o usuário clicou dentro de uma determinada área. Várias subclasses de MapArea, dependendo da Geometria em questão (oval, retângulo e polígono), implementam este método de forma apropriada. ii) get URL ( ) – retorna a URL, caso o mouse tenha sido pressionado dentro da área desejada. iii) toString ( ) – override do método toString e que fornece uma representação, em string, de um objeto do tipo MapArea. //código de MapArea – usada, em conjunto com suas sub-classes, para implementar mapas sensitivos. import java.net.URL; public abstract class MapArea { URL u; public abstract boolean contains(int x, int y); public URL getURL() { return u; } public abstract String toString(); } A classe RectArea, sub-classe de MapArea, nos diz se o usuário pressionou o mouse dentro de um determinado retângulo. Seu construtor (de RectArea) recebe como parâmetro um string s do tipo: rect http://www.mcfac.com 227, 0, 340, 65 Coordenadas do retângulo (vértices superior esquerdo e inferior direito, respectivamente). URL Diz que a região corresponde a um retângulo. O código correspondente a RectArea mostrado abaixo está embaralhado. Ordene-o, de forma que RectArea execute a função a que se propõe e possa ser corretamente compilado. Basta você indicar a nova ordem dos comandos. Exemplo de uma resposta hipotética: 5, 13, 21, ......, 27, 8, 2. // Código de RectArea – infelizmente, embaralhado 1. import java.awt.Rectangle; 2. import java.util.StringTokenizer; 3. StringTokenizer st = new StringTokenizer(s, " \n\t\r,"); 4. public class RectArea extends MapArea { 5. import java.net.*; 6. Rectangle r; 7. // Um string s é similar a: 8. // rect http://www.macfaq.com 227,0 340,65 9. public RectArea (String s) throws MalformedURLException { 10. u = new URL(st.nextToken()); 11. int x1, y1, x2, y2; 12. // throw away the first token 13. // This should be ³rect² 14. st.nextToken(); 15. } 16. public boolean contains(int x, int y) { 17. return r.inside(x, y); 18. return "rect " + u + " " + r.x + "," + r.y + " " + (r.x + r.width) + "," + (r.y + r.height); 19. } 20. public String toString() { 21. x1 = Integer.parseInt(st.nextToken()); 22. y1 = Integer.parseInt(st.nextToken()); 23. x2 = Integer.parseInt(st.nextToken()); 24. y2 = Integer.parseInt(st.nextToken()); 25. r = new Rectangle(x1, y1, x2 - x1, y2 - y1); 26. } 27. } Boa Sorte! Prof. Oscar Luiz Monteiro de Farias