Características das Linguagens de Programação - 2008 – P1 1a questão - Considere o seguinte trecho de um programa, que inclui o método abaixo, de uma classe arbitrária, que move objetos do tipo Point, além de outros comandos: . . . public void movePoint(Point point, int dX, int dY) { // move o ponto para x+dX, y+dY point.setXY(point.getX() + dX, point.getY() + 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 (100, 100); // →A ... //invocação do método movePoint XXX.movePoint(myPoint, 23, 53 ); // →D . . . //código da classe Point public class Point { public int x = 0; public int y = 0; //constructor public Point(int x, int y) { this.x = x; this.y = y; } public void setXY (int dx, int dy) { x = dx; y = dy; } public int getX() { return x; } public int getY() { return y; } }// fim da class Point Nos pontos assinalados como →A, →B, →C e →D, qual o valor das coordenadas (variáveis de instância) x e y de myPoint? 2a questão - Considere o código da classe Point da questão anterior. Crie uma classe Circle que seja uma extensão da classe Point (relação de herança), adicionando dois métodos, um – Perimeter () - para calcular o perímetro e outro – Área ()- para calcular a área de objetos do tipo círculo. A seguir, crie uma classe Sphere, que seja uma extensão de Circle, para representar objetos do tipo esfera. Faça o override do método Área, de forma a agora calcular a área da esfera, e, a seguir, adicione o método Volume(), a fim de calcular o volume da esfera. Obs. Não se esqueça de incluir os construtores e variáveis de instância necessários para uma representação correta dos objetos. 3a questão - Considere o código do applet KeyEventDemo abaixo, que trata alguns eventos gerados pelo usuário ao interagir com a interface gráfica do applet. 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); } } Assinale apenas as afirmativas corretas (uma afirmativa errada assinalada desconta uma certa...): a) As linhas de código “button.addActionListener(this);” e “typingArea.addKeyListener(this);” adicionam, respectivamente, os objetos button e typingArea ao applet, a fim de que os mesmos possam ser mostrados na sua interface gráfica. b) Os eventos que o applet trata restringem-se àqueles decorrentes do usuário pressionar qualquer tecla do teclado. c) O applet trata os eventos que ocorrem quando: i) o usuário pressiona o mouse, quando este se encontra sobre o objeto do tipo button identificado pelo string “Clear”; ii) o usuário digita qualquer tecla do teclado. d) As interfaces KeyListener e ActionListener já fornecem o código de métodos padronizados, os quais precisam ser reescritos, a fim de que os eventos correspondentes sejam adequadamente tratados. e) Os métodos responsáveis pelo tratamento de eventos são: displayInfo(KeyEvent e, String s); requestFocus( ); actionPerformed(ActionEvent e) . 4a questão - Considere ainda o código fonte do applet KeyEventDemo da questão anterior. Identifique: a) as classes aí existentes; b) os objetos, associando-os às classes de que são instâncias; c) os métodos, associando-os aos seus respectivos objetos, ou às classes, em se tatando de métodos estáticos; d) os data-members ou variáveis de instância, associando-os aos seus respectivos objetos; e) as variáveis locais. Boa Sorte! Prof. Oscar Luiz Monteiro de Farias