2a Prova de Características das Linguagens de Programação

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