Segundo examen intermedio de la asignatura Programación Orientada a Objetos

18/12/96:

Programa JAVA

/* Simple Applet */ import java.applet.Applet; import java.awt.*; public class Simple extends Applet { StringBuffer buffer; public void init() { buffer = new StringBuffer(); addItem("initializing..."); } public void start() { addItem("starting..."); } public void stop() { addItem("stopping..."); } public void destroy() { addItem("preparing for unloading..."); } void addItem(String newWord) { System.out.println(newWord); buffer.append(newWord); repaint(); } public void paint(Graphics g) { // Draw a rectangle around the applet's display area. g.drawRect(0,0,size().width-1,size().height-1); g.drawString(buffer.toString(),5,15); } }

Cuestiones:

  1. Añadir código al programa anterior para que pueda invocarse desde la línea de mandatos y funcione de la misma manera que si se ejecuta desde un visor de HTML. Recuérdese que al invocar un Applet desde HTML se ejecutan automáticamente los siguientes métodos, en el orden indicado: - Al empezar: init y start. - Al terminar: stop y destroy. (3 puntos).
  2. Construir un archivo HTML que invoque el programa anterior (1 punto).
  3. Describir el resultado de su ejecución desde el visor de HTML (1 puntos).
  4. Describir el resultado de su ejecución desde la línea de mandatos (1 punto).

Otras cuestiones

  1. La herencia múltiple de interfaces no introduce herencia múltiple de clases en JAVA ¿Por qué? (1 punto).
  2. Enumerar los ejemplos principales del "middleware" orientado a objetos (1 punto).
  3. ¿Qué significan las siglas "CORBA" y cuál es el objetivo de este estándar? (1 punto).
  4. Construir en IDL de CORBA una interfaz A que contenga un atributo entero largo con signo cuyo valor no se pueda modificar ¿Qué métodos tendremos disponibles para los objetos correspondientes? (1 punto).

Soluciones:

  1. Posible código a añadir (hay otras soluciones válidas): public class Simple extends Applet { ... public static void main(String[] args) { Simple miApplet = new Simple(); MiFrame miFrame = new MiFrame("Simple Applet/Application", miApplet); miApplet.init(); miApplet.start(); miFrame.add("Center", miApplet); miFrame.pack(); miFrame.show(); } } class MiFrame extends Frame { Simple applet; MiFrame (String title, Simple applet) { super(title); this.applet = applet; } public boolean handleEvent(Event e) { if (e.id==Event.WINDOW_DESTROY) { applet.stop(); applet.destroy(); System.exit(0); } return super.handleEvent(e); } }
  2. Archivo HTML (hay otros posibles): <title>Ejemplo de java</title> <h1>Ejemplo de java</h1> <applet code="Simple.class" WIDTH=150 HEIGHT=25></applet>
  3. Resultado de la ejecución desde el visor de HTML:

    Aparece una ventana con el texto:

    initializing...starting...

    Además, en la sesión de invocación aparecen los siguientes mensajes:

    initializing... starting...

    Al cancelar el visor, aparecen los siguientes mensajes adicionales en la sesión de invocación:

    stopping... preparing for unloading...
  4. Resultado de la ejecución desde la línea de mandatos:

    El mismo que en el apartado anterior.

  5. Ver apuntes de clase.
  6. Bases de datos orientadas a objetos, object brokers y bibliotecas de clases (del sistema y de utilidad).
  7. Siglas: "Common Object Request Broker Architecture". Objetivo: Avanzar el uso de la tecnología orientada a objetos en entornos heterogéneos distribuidos.
  8. #include <somobj.idl> interface A : SOMObject { readonly attribute long P; };

    Sólo estará disponible el método _get_P().