Professional Documents
Culture Documents
Programacin Declarativa
Por procedimientos
Orientada a Objetos
Introduccin
Este tema tiene su aparicin en la programacin de interfaces grficas de usuarios. Los programas de consolas tpicos siguen un flujo secuencial en el que tpicamente se tienen ciclos:
entrada->procesamiento->salida
Cuando programamos una Interfaz Grfica de Usuario (GUI: Graphics User Interface) debemos tomar en cuenta la variedad de posibles interacciones con el usuario. ELO-329: Diseo y Programacin Orientados a Objetos En lugar de un nico flujo de entrada de datos
Modelo
Una forma de manejar todo tipo de posibles interacciones de usuarios es el uso de interrupciones. De esta manera la CPU no pierde tiempo mirando los posibles eventos de usuarios, sino simplemente responde al evento y reanuda su procesamiento normal (otras tareas). Comnmente, lenguajes de programacin no dan acceso directo a eventos asincrnicos. Lenguajes como Java nos permiten definir y manejar interrupciones o eventos por software. ELO-329: Diseo y Programacin Orientados a Objetos La API de Java permite a los programadores
Listener
Componente Grfica
registrar(listener)
Se produce el evento
Los listener son instancias de las clases definidas por el usuario y que implementan los mtodos definidos por la Interfaz (estos mtodos equivalen a las rutinas de atencin de Interrupcin ). ELO-329: Diseo y Programacin Orientados a Objetos Las componentes grficas y los datos del
Ejemplo
Veamos el caso de una ventana de nivel superior en Java (aquellas que se pueden mover libremente en el desktop) CloseableFrame.java import java.awt.event.*; import javax.swing.*; class CloseableFrame extends JFrame { public CloseableFrame() { setTitle("My Closeable Frame"); setSize( 300, 200); ELO-329: Diseo yel Programacin Orientados a Objetos se har cargo // Registramos objeto que
Ejemplo (continuacin)
class MyWindowListener implements OJO: una opcin WindowListener { habra sido declarar // Do nothing methods required by esta clase como interna a Closeable. interface Pudo ser annima. public void windowActivated( WindowEvent e) {} public void windowDeactivated( WindowEvent e) {} public void windowIconified( WindowEvent e) {} public void windowDeiconified( ELO-329: Diseo y Programacin WindowEvent e) {} Orientados a Objetos
Diagrama de secuencia para creacin de ventana Muestra la dinmica al crear una ventana.
Main: Main JVM inicia main
New
Objeto:Clase
f : CloseableFrame
new
listener :MyWindowListener
addWindowListener
show
Explicacin
Objetos en la clase CloseableFrame causan que una ventana aparezca en la pantalla del usuario. La aplicacin puede crear tantas ventanas como lo desee creando mltiples objetos CloseableFrame. Una instancia de MyWindowListener es registrada con addWindowListener (es como configurar quien atender las interrupciones). Cuando el evento ocurre, la mquina virtual Java lo detecta y verifica si hay listeners esperando por ese evento. Si los hay, automticamente llama al mtodo apropiado de la interfaz WindowListener. La interfaz WindowListener es implementada por la clase MyWindowListener, as su instancia puede responder a los eventos de la ventana en la cual l fue registrado. Hay siete mtodos en la Interfaz WindowListener (Ver API). Aqu slo nos interesamos por el evento cierre de ventana. La mayora de las otras interfaces para eventos no difieren mucho. ELO-329: Diseo y Programacin Orientados a Objetos Veremos otro ejemplo.
Este diagrama puede ser completado con las clases usadas del JDK.
ELO-329: Diseo y Programacin Orientados a Objetos
Diagrama de secuencia
Situacin: Creacin de listener y su registro.
mimic :SimpleMimic new
quote :JTextField
Se registra
addActionListener
Diagrama de secuencia
Situacin (caso de uso): Usuario ingresa nuevo Gui texto. Esto gatilla el evento esperado. Quote Label
:ActionListener
Usuario actionPerformed ingresa texto La JVM lo detecta, avisa a la componente Grfica y sta enva Mensaje al listener
:JTextField
:JLabel
getText
setText
Diagrama de secuencia
Caso de uso: Ingreso de nuevo texto. Esto gatilla el evento esperado.
Listener :MimicListener
Gui :MimicGUI Quote :JTextField Label :JLabel
actionPerformed updateLabel
getText
setText
El cdigo en el mtodo del listener maneja el evento llamando a gui.updateLabel(), el cual hace eco del contenido del campo ELO-329: Diseo y Programacin Orientados a Objetos texto en el rtulo puesto en la ventana.
Algunas recomendaciones
No es estrictamente necesario poner la descripcin de las componentes de la GUI en una clase separada, pero es buena idea. Incluso puede ser conveniente ponerlas en una archivo separado para as separar la presentacin e interaccin con el usuario del procesamiento o clculo interno. La clase JTextField es incluso ms completa. Nos permite recibir una notificacin cada vez que un caracter es ingresado. Los cambios requeridos para ello se muestras ELO-329: Diseo y Programacin Orientados a Objetos en MimicCharbyChar.java