clp-2008-01

Propaganda
Prova Final de Características das Linguagens de Programação – 2008 – 10 período –
1a questão: Desenvolva uma aplicação cliente em Java, para se conectar a um servidor multithread e com ele jogar uma partida do jogo de baralho denominado 21. O usuário visualizará as
suas cartas, que foram enviadas pelo servidor, no vídeo e solicitará nova carta - “c\n” - ou
desistirá de receber novas cartas - “f\n” – via teclado e assim sucessivamente até terminar o jogo.
Supor que a inicialização do servidor se dá através do comando:
> java ServidorJogo#21 5600
Observações: i) O servidor é completamente honesto, no sentido de que ele não toma
conhecimento, para favorecer a sua jogada, das cartas que já foram obtidas pelo cliente.
ii) número das cartas:
ás de qualquer naipe –> 1; n de de qualquer naipe -> n; valete, dama e rei de copas de
qualquer naipe -> 10.
Inicialmente cada jogador (tanto o cliente como o servidor) recebem duas cartas. O objetivo do
jogo é conseguir atingir um somatório de valores de cartas que mais se aproxime de 21 pontos.
Tanto o servidor quanto o cliente podem comprar tantas cartas quanto quiserem. Aquele que
mais se aproximar de 21 pontos ganha o jogo.
2a questão: Programe um servidor (echo server) em Java que simplesmente reproduza um texto a
ele enviado por um cliente. O seu servidor deve implementar múltiplos threads, para evitar que
um cliente faça um outro cliente esperar indefinidamente, caso o texto enviado por algum cliente
seja muito extenso. Este serviço ficará disponível na porta 3000.
3a questão: No código do applet KeypadApp, abaixo, aponte os trechos do código em que foi
usado o mecanismo de herança, identificando a classe, a subclasse e os métodos herdados da
classe pela subclasse.
import java.awt.*;
public class KeyPadApp extends java.applet.Applet {
public void init() {
add ( new KeyPad( 16 ) );
resize(preferredSize());
}
}
class KeyPad extends Panel {
KeyPad ( int n ) {
int s = (int)Math.sqrt(n);
setLayout( new GridLayout(s, s) );
for (int i=0; i<n; i++)
add( new Button( Integer.toString(i) ) );
}
public boolean action(Event e, Object arg) {
System.out.println("Button "+arg+" pressed");
return true;
}
}
4a questão: No código do applet a seguir, assumindo o modelo de eventos do AWT 1.1 –
delegation model – responda:




Quais são as fontes de eventos (event sources)?
Quais são os listeners (event handlers) ?
Quais são os tipos de eventos que são tratados?
Identifique os trechos de código em que:
o é dito que a classe responsável pelo tratamento do evento implementa uma
listener interface (ou herda de uma classe que implementa uma listener
interface);
o é registrada uma instância da classe tratadora de eventos como um listener
referente a um ou mais componentes;
o é realizada a implementação dos métodos constantes da listener interface;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class KeyEventDemo extends Applet
implements KeyListener,
ActionListener {
TextArea displayArea;
TextField typingArea;
String newline;
public void init() {
Button button = new Button("Clear");
button.addActionListener(this);
typingArea = new TextField(20);
typingArea.addKeyListener(this);
displayArea = new TextArea(5, 20);
displayArea.setEditable(false);
setLayout(new BorderLayout());
add("Center", displayArea);
add("North", typingArea);
add("South", button);
newline = System.getProperty("line.separator");
}
public void keyTyped(KeyEvent e) {
displayInfo(e, "KEY TYPED: ");
}
public void keyPressed(KeyEvent e) {
displayInfo(e, "KEY PRESSED: ");
}
public void keyReleased(KeyEvent e) {
displayInfo(e, "KEY RELEASED: ");
}
public void actionPerformed(ActionEvent e) {
//Clear the text components.
displayArea.setText("");
typingArea.setText("");
typingArea.requestFocus();
}
protected void displayInfo(KeyEvent e, String s){
String charString, keyCodeString, modString, tmpString;
char c = e.getKeyChar();
int keyCode = e.getKeyCode();
int modifiers = e.getModifiers();
if (Character.isISOControl(c)) {
charString = "key character = (an unprintable control character)";
} else {
charString = "key character = '" + c + "'";
}
keyCodeString
+
+
+
= "key code = " + keyCode
" ("
KeyEvent.getKeyText(keyCode)
")";
modString = "modifiers = " + modifiers;
tmpString = KeyEvent.getKeyModifiersText(modifiers);
if (tmpString.length() > 0) {
modString += " (" + tmpString + ")";
} else {
modString += " (no modifiers)";
}
displayArea.append(s
+ newline + "
+ charString
+ newline + "
+ keyCodeString
+ newline + "
+ modString
+ newline);
}
}
"
"
"
Download