Programación “Conducida por eventos” Event-driven programming

Slides:



Advertisements
Presentaciones similares
UNIVERSIDAD PRIVADA SAN PEDRO ESCUELA INGENIERIA CIVIL
Advertisements

Introducción a C#.
Fernando Alonso Blázquez Graphic User Interfaces 25 de Marzo de 2004.
Interprete o máquina real
VISUAL. 1.Hacer nuevo proyecto 2.Crear un nuevo paquete 3.Hacer una clase visual 1.Dar el nombre 2.Seleccionar el estilo AWT 3.Seleccionar Frame.
Programación Interactiva Introducción a Java
Cetis No. 119 Profa. Graciela Prado Becerra
UML para programadores Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Java Applets Ing. Martín Jiménez.
Siguiente Excepciones Introducción. AnteriorSiguiente Definición Una excepción es un evento que ocurre durante la ejecución de un programa que desestabiliza.
RMI (Remote Method Invocation)
Algoritmo y Estructura de Datos I I Facultad de Ingeniería y Arquitectura Ing. Juan José Montero Román. Sesión 12 - Introducción.
Programación Orientada a Objetos en Java
Primer Programa en JAVA
TEMA 1. Diseño de interfaces gráficas
Programación “Conducida por eventos” Event-driven programming Agustín J. González ELO330.
Aplicaciones GUI en Java
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Java Mayra M. Méndez Anota.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Tema 10: Interfaces Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Unidad I Java y C++ : Similitudes y diferencias
1 Ingeniería del Software Ejercicios de Implementación  Caso de Uso Total Gasto (Junio 2003)  Caso de Uso Mejor Usuario (Septiembre 2003)  Caso de Uso.
Igor Santos Grueiro. Ahora tenemos datos y datos …
1 Interfaces Agustín J. González ELO Introducción En C++ se permite la herencia múltiple; es decir, es posible derivar una clase de dos o más clases.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
:: Prof. Yeniffer Peña Programación I Interface Gráfica de Usuario Presentación.
Agustín J. González ELO329/ELO330
EI, Profesor Ramón Castro Liceaga Agosto de 2005 UNIVERSIDAD LATINA (UNILA) PROGRAMACION ORIENTADA A OBJETOS EN JAVA (Optativa) PROGRAMACION DE INTERFASES.
FACULTAD DE ESTUDIOS SUPERIORES ARAGON
Ingeniería de software
Manejo de Eventos. Lo básico para manejo de eventos Cuando se realiza una interacción con el programa, se envía un evento. Es fundamental su comprensión.
Interfaces y Clases Internas ELO329: Diseño y Programación Orientados a Objetos.
Interfaces ELO329: Diseño y Programación Orientados a Objetos.
Programación basada en eventos “Event-Based Programming”: Conceptos
1 Programación “Conducida por eventos” Event-driven programming Agustín J. González ELO329/ELO330.
1 Interfaces y Clases Internas ELO-329: Diseño y programación orientados a objetos Agustín J. González.
Algunas Herramientas de Apoyo al Diseño de Software Agustín J. González ELO329: Diseño y programación orientados a objetos.
Programación de Interfaces Gráficas en Java
1 Interfaces y Clases Internas ELO-329: Diseño y programación orientados a objetos Agustín J. González.
Programación Gráfica Agustín J. González ELO329/ELO330.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
1 TEMA 1. Diseño de interfaces gráficas 1.Introducción 2.Componentes de la interfaz 3.Programación dirigida por eventos 4.Gestores de ubicación 5.Primitivas.
:: Prof. Yeniffer Peña Programación I Interface Gráfica de Usuario Presentación.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) LENGUAJES DE PROGRAMACIÓN PARA EL DESARROLLO DE INTERFACES.
Programación de Interfaces Gráficas en Java
Interfaces y Clases Internas
ELO329: Diseño y Programación Orientados a Objetos
Manejo de Eventos Visita FIEC FIEC. Eventos En evento es una acción iniciada por el usuario. Ejemplo de eventos son: presionar un botón, cambiar un texto,
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
M.C. Meliza Contreras González.  Se le llama interfaz gráfica al conjunto de componentes gráficos(ventanas, botones, combos, listas, cajas de dialogo,
1 Programación “Conducida por eventos” Event-driven programming Agustín J. González ELO329/ELO330.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
Programación en Visual Basic
:: Prof. Yeniffer Peña Programación I Interface Gráfica de Usuario Presentación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
ELO329: Diseño y Programación Orientados a Objetos
ELO329: Diseño y Programación Orientados a Objetos
Interfaces Gráficas de Usuario
ELO329: Diseño y Programación Orientados a Objetos
ELO329: Diseño y Programación Orientados a Objetos
Transcripción de la presentación:

Programación “Conducida por eventos” Event-driven programming Agustín J. González ELO329/ELO330

Introducción Este tema tiene su aparición en la programación de interfaces gráficas de usuarios. Los programas de consolas típicos siguen un flujo secuencial en el que típicamente se tienen ciclos: entrada->procesamiento->salida Cuando programamos una Interfaz Gráfica de Usuario (GUI: Graphics User Interface) debemos tomar en cuenta la variedad de posibles interacciones con el usuario. En lugar de un único flujo de entrada de datos por consola, las GUIs permiten muchas más acciones del usuario. Por ejemplo: es posible presionar botones gráficos, escribir texto en un campo de texto, o mover alguna scrollbar. ¿Cómo podemos estar atento a tanta cosa al mismo tiempo? La GUI del programa debe responder bien a todos estos eventos.

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). Comúnmente, lenguajes de programación no dan acceso directo a eventos asincrónicos. Lenguajes como Java nos permiten definir y manejar interrupciones o eventos por software. La API de Java permite a los programadores crear clases de objetos, llamados listeners, que responden a interrupciones causadas por la GUI. La API de Java tiene interfaces que deben ser implementadas por las clases listener. Los métodos de la interfaz (“equivale a la rutina de servicio de interrupción”) son llamados cuando un evento específico ocurre.

Esquema para la Atención de Eventos Paso 1 Registrar listener Listener Métodos de atención de eventos Componente Gráfica Métodos add/remove de listeners Objeto con Datos del evento Paso 2 Ocurrencia del evento gatilla invocación del método asociado al evento (run-time) Las componentes gráficas y los datos del evento son objetos de las clases definidas en la API de Java. Los listener son objetos de las clases definidas por el usuario y que implementan la interfaz definida por la API.

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); // cause window events to be sent // to window listener object addWindowListener( new MyWindowListener()); }

Ejemplo class MyWindowListener implements WindowListener { // Do nothing methods required by interface public void windowActivated( WindowEvent e) {} public void windowDeactivated( WindowEvent e) {} public void windowIconified( WindowEvent e) {} public void windowDeiconified( WindowEvent e) {} public void windowOpened( WindowEvent e) {} public void windowClosed( WindowEvent e) {} // override windowClosing method to exit program public void windowClosing( WindowEvent e) { System.exit( 0); // normal exit } class Main { public static void main( String[] args) { CloseableFrame f = new CloseableFrame(); f.show(); // makes the frame visible

Relación de clases (generada por Jprasp)

Diagrama de secuencia para creación de ventana Main ClosableFrame MyWindowListener JVM inicia main ClosableFrame addWindowListener show

Explicación Objetos en la clase ClosableFrame causan que una ventana aparezca en la pantalla del usuario. La aplicación puede crear tantas ventanas como lo desee creando múltiples objetos ClosableFrame. Un objeto MyWindowListener es registrado con addWindowLister (es como configurar quien atenderá las interrupciones). Cuando el evento ocurre, la máquina virtual Java llama automáticamente al método 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 métodos en la Interfaz WindowListener (Ver API) Aquí sólo nos interesamos por el evento cierre de ventana. La mayoría de las otras interfaces para eventos no difieren mucho. Veremos otro ejemplo.

Entrada en Campo de texto Supongamos que queremos leer lo ingresado en un campo de texto y luego copiarlo en un label (rótulo). Mimic.java

Diagrama de Clases de Mimic.java

Diagrama de secuencia: MimicListener MimicGUI JTextField JLabel Usuario ingresa texto actionPerformed updateLabel getText setText Es recomendable tener bien clara esta relación, y ayuda hacer este dibujo antes de hacer el código. Sirve además como documentación. JtextField y Jlabel pertenecen al API, luego sólo hay que escribir el código para las otras tres clases.

Explicación del ejemplo El listener es registrado con el objeto quote – comillas - de la clase JTextField en el constructor MimicGUI() al ejecutar quote.addActionListener(listener). Cuando listener es registrado, éste es agregado a una lista interna que mantiene los objetos que deben ser notificados cuando un evento ocurre. Podemos tener más de un listener registrado por evento. Cuando el evento ocurre (por ejemplo, presionamos return en la ventana), el método listener.actionPerformed(ActionEvent event) es llamado por la JVM. Notar que los datos sobre el evento son pasados en el objeto pasado como parámetro al método. El código en el método del listener maneja el evento llamando a gui.updateLabel() , el cual hace eco del contenido del campo texto en el rótulo puesto en la ventana.

Algunas recomendaciones No es estrictamente necesario poner la descripción de las componentes de la GUI en una clase separada, pero es buena idea. Incluso puede ser conveniente ponerla en una archivo separado para así separar la presentación e interacción con el usuario del procesamiento o cálculo interno. La clase JTextField es incluso más completa. Nos permite recibir una notificación cada vez que un caracter es ingresado. Los cambios requeridos para ello se muestras en MimicCharbyChar.java