1a Prova de Características de Linguagens de Programação – 31/10/97 1a questão: Considere o trecho abaixo, de um programa escrito em Java. Identifique: as classes aí existentes; os objetos, associando-os às classes de que são instâncias; os métodos, associando-os aos seus respectivos objetos; os data-members ou variáveis de instância, associando-os aos seus respectivos objetos; as variáveis locais. import import import import import import import import java.awt.Frame; java.awt.TextField; java.awt.Panel; java.awt.Button; java.awt.GridLayout; java.awt.Event; java.awt.Color; java.awt.Label; import book; import java.util.Vector; class bookWindow extends Frame { TextField title; TextField author; TextField publisher; Vector theBooks; int currentIdx; bookWindow() { super("Book Shelf"); // initialize the growable array theBooks = new Vector(3); currentIdx = 0; Panel centerPanel = new Panel(); centerPanel.setLayout (new GridLayout(0,2)); centerPanel.add(new Label(" Title")); centerPanel.add(title = new TextField("Life and Death", 20)); //........aditional code goes here... add("Center", centerPanel); Panel bottomPanel = new Panel(); bottomPanel.add(new Button("store")); bottomPanel.add(new Button("clear")); //.......aditional code goes here... add("South", bottomPanel); move(200, 100); pack(); show(); } public boolean handleEvent(Event evt) { switch (evt.id) { case Event.ACTION_EVENT: if ("store".equals(evt.arg)) { book aBook = new book(title.getText(), author.getText(), publisher.getText()); theBooks.addElement(aBook); currentIdx = theBooks.size(); return true; } //....... aditional code goes here... if ("prev".equals(evt.arg)) { if (currentIdx > 0) { book aBook = (book) theBooks.elementAt(--currentIdx); title.setText(aBook.getTitle()); author.setText(aBook.getAuthor()); publisher.setText(aBook.getPublisher()); } return true; } //....... aditional code goes here... if ("exit".equals(evt.arg)) { System.exit(0); return true; } break; default: return false; } return false; } } class bookGUI { public static void main(String args[]) { new bookWindow(); } } 2a questão: Dado o trecho do código do applet HelloWeb3 abaixo, qual seria uma possível seqüência com que os comandos do applet seriam executados, após realizarmos, via um cliente http (eg. Netscape, Mosaic ou Internet Explorer) um acesso ao arquivo HelloWeb3.htm existente em um servidor http? Diga também, qual a seqüência de eventos que corresponderia à seqüência de execução de comandos por você apontada. Considere, na sua resposta, que toda a funcionalidade do applet deve ser explorada. <--HelloWeb3.html file--/> <html> <head> <title>HelloWebThird</title> </head> <body> <h3>HelloWeb3</h3> <applet code=HelloWeb3 width=300 height=200> <param name="message" value="Hello Web!" > </applet> </body> </html> ==================================================================================== 1. 2. 3. 4. 5. 6. 7. 8. 9. //...HelloWeb3.java file import java.applet.Applet; import java.awt.*; public class HelloWeb3 extends Applet { int messageX = 125, messageY = 95; String theMessage; Button theButton; int colorIndex = 0; static Color[] someColors = { Color.black, Color.red, Color.green, Color.blue, Color.magenta }; 10. public void init() { 11. theMessage = getParameter("message"); 12. theButton = new Button("Change Color") 13. 14. } add(theButton); 15. 16. 17. public start() { //...here goes some code... } 18. 19. 20. public stop() { //...here goes some code... } 21. 22. 23. 24. public void paint( Graphics gc ) { gc.setColor( currentColor() ); gc.drawString( theMessage, messageX, messageY ); } 25. 26. 27. 28. 29. 30. 31. public boolean action ( Event e, Object arg ) { if ( e.target == theButton ) { changeColor(); return true; } return false; } 32. 33. 34. 35. 36. 37. public boolean mouseDrag(Event evt, int x, int y ) { messageX = x; messageY = y; repaint(); return true; } 38. 39. 40. 41. 42. 43. synchronized private void changeColor() { if ( ++colorIndex == someColors.length ) colorIndex = 0; theButton.setForeground( currentColor() ); repaint(); } 44. 45. 46. synchronized private Color currentColor() { return someColors[ colorIndex ]; } 47. } 3a questão: Explique as diferenças e semelhanças existentes entre os conceitos de Polimorfismo e Sobrecarga de Métodos. Exemplifique com trechos de código em Java. 4a questão: Qual o significado dos dois princípios da Orientação a Objetos: a) Information Hiding ou Encapsulamento; b) Abstração? 5a questão: Aponte os erros de compilação que seriam registrados no código java que se segue. Explique o porque destes erros. Observação: assuma como corretos: i) A variável CLASSPATH, que inclui o path "/linux". ii) A localização dos arquivos no file system. Na 1a linha dos arquivos encontra-se o path dos mesmos. ====================================== ====================================== //directory: /linux/mycode/fruits //...apple.java file //directory: /linux/mycode/fruits //...plum.java file package fruits; public class apple { protected int i; private int k; int j; } package fruits; class plum { static apple a = new apple(); static {a.i = 0;} } ====================================== class foo { void foo () { apple a = new apple(); a.i = 0; a.k = 3; } } //directory: /linux/mycode/sauces //...chutney.java file package sauces; import fruits.*; int z; class chutney { static apple a = new apple(); static {a.i = 0;} z = 3; } //directory: /linux/mycode/fruits //...pippin.java file package fruits; import java.lang.Math; class pippin extends apple { double j, k; double pippin (int, int) { //...here goes the constructor code... } void grind() { i = 0; j = 2; k = 3; k = Math.pow (k, j); } } ======================================= //directory: /linux/mycode/sauces //...applesauce.java file package sauces; import mycode.fruits.*; class applesauce extends apple { int i; double j , k; void foo() { i = 0; a.i = 20; j = 2; k = 3; a.k = 9; k = Math.pow (k, j); } } ======================================= Boa Sorte! Prof. Oscar Luiz Monteiro de Farias