Ir al contenido

Diferencia entre revisiones de «Programación dirigida por eventos»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Thijs!bot (discusión · contribs.)
Sin resumen de edición
Línea 11: Línea 11:
La programación dirigida por eventos es la base de lo que llamamos [[Interfaz_de_usuario|interfaz de usuario]], aunque puede emplearse para desarrollar interfaces entre componentes de Software como [[Módulo_de_núcleo|módulos del núcleo]] también.
La programación dirigida por eventos es la base de lo que llamamos [[Interfaz_de_usuario|interfaz de usuario]], aunque puede emplearse para desarrollar interfaces entre componentes de Software como [[Módulo_de_núcleo|módulos del núcleo]] también.


==Véase también==


== Motivación ==
* [[Programación estructurada]]
En los primeros tiempos de la computación, los programas eran secuenciales, también llamados [[Batch]]. Un programa secuencial arranca, lee parámetros de entrada, procesa estos parámetros, y produce un resultado, todo de manera lineal y sin intervención del usuario mientras se ejecuta.


Con la aparición y popularización de los pc, el software empezó a ser demandado para usos alejados de los clásicos académicos y empresariales para los cuales era necesitado hasta entonces, y quedó patente que el paradigma clásico de programación no podía responder a las nuevas necesidades de interacción con el usuario que surgieron a raíz de este hecho...
* [[Paradigma de programación]]


== Aproximación de captura de eventos en Batch ==
En una época temprana de vida de los pc, y bajo sistemas operativos de comandos estilo [[DOS]], hicieron aparición programas que, sin llegar a ser orientados a eventos, si disponían de cierta interacción con el usuario gracias a rudimentarios menús.

Es necesario entender que en la programación clásica podemos capturar eventos del usuario tales como la pulsación de una determinada tecla, pero esta solo puede realizarse en el momento en que lo determine el programador y no cuando el usuario lo desee. De esta manera, las partes de un código batch que capturan los eventos, son bucles de espera que paralizan el flujo de la ejecución hasta que el usuario complete la interacción.

La realización de menús en entornos de programación secuencial, requiere de un gran esfuerzo y los resultados obtenidos suelen ser bastante pobres.

Ejemplo en [[Script]] de [[linux]]:

#!/bin/sh
Opcion=0
While test $opcion –ne 4
Do
echo “1. Realizar tarea “
echo “2. Leer tarea”
echo “3. ver tareas”
echo “4. Salir”
Read opcion
Done

== Detección de eventos ==
En contraposición al modelo clásico, la programación orientada a eventos permite interactuar con el usuario en cualquier momento de la ejecución. Esto se consigue debido a que los programas creados bajo esta arquitectura se componen por un bucle exterior permanente encargado de recoger los eventos, y distintos procesos que se encargan de tratarlos. Habitualmente, este bucle externo permanece oculto al programador que simplemente se encarga de tratar los eventos, aunque en algunos lenguajes será necesaria su construcción.

Ejemplo de programa orientado a eventos en pseudo lenguaje:

While (true){
Switch (event){
case mousse_button_down:
case mouse_click:
case keypressed:
case Else:
}
}


== Problemática ==
La programación orientada a eventos supone una complicación añadida con respecto a otros [[paradigmas de programación]], debido a que el flujo de ejecución del software escapa al control del programador. En cierta manera podríamos decir que en la programación clásica el flujo estaba en poder del programador y era este quién decidía el orden de ejecución de los procesos, mientras que en programación orientada a eventos, es el usuario el que controla el flujo y decide.

Pongamos como ejemplo de la problemática existente, un menú con dos botones, botón 1 y botón 2. Cuando el usuario pulsa botón 1, el programa se encarga de recoger ciertos parámetros que están almacenados en un fichero y calcular algunas variables. Cuando el usuario pulsa el botón 2, se le muestran al usuario por pantalla dichas variables. Es sencillo darse cuenta de que la naturaleza indeterminada de las acciones del usuario y las características de este paradigma pueden fácilmente desembocar en el error fatal de que se pulse el botón 2 sin previamente haber sido pulsado el botón 1.


== GUI's ==
Con la evolución de los lenguajes orientados a eventos, la interacción del software con el usuario ha mejorado enormemente permitiendo la aparición de interfaces que, a parte de ser la vía de comunicación del programa con el usuario, son la propia apariencia del mismo.

Estas interfaces, también llamadas [[GUI]] (Graphical User Interface), han sido la herramienta imprescindible para acercar la informática a los usuarios, permitiendo en muchos casos, a principiantes utilizar de manera intuitiva y sin necesidad de grandes conocimientos, el software que ha colaborado a mejorar la productividad en muchas tareas.

Uno de los periféricos que ha cobrado mayor importancia tras la aparición de los programas orientados a eventos ha sido el ratón, gracias también en parte a la aparición de los sistemas operativos modernos con sus interfaces gráficas.


== Herramientas visuales de desarrollo ==
Con el paso del tiempo, han ido apareciendo una nueva generación de herramientas que incluyen código que automatiza parte de las tareas más comunes en la detección y tratamiento de eventos.

Destacan particularmente los entornos de programación visual que conjugan una herramienta de diseño gráfica para la GUI y un lenguaje de alto nivel. Entre estas herramientas se encuentra la conocida Visual Basic, lenguaje altamente apreciado por principiantes debido a la facilidad para desarrollar software en poco tiempo y con pocos conocimientos, y denostado por tantos otros debido a su falta de eficiencia.


== Lenguajes ==
·[[Visual Basic]]
·[[Javascript]]

·[[Java]]([[AWT]],swing)

·[[Visual C++]]

.[[Visual .Net]]

·[[Visual Velazquez]]

·[[Visual C#]]

·[[Visual J#]]

·[[ASP .Net]]


==Referencias==
*[[Grant Palmer]]: ''Java Event Handling'', Prentice Hall, ISBN 0-13-041802-1.
*[[David Luckham]]: ''The Power of Events - An Introduction to Complex Event Processing in Distributed Enterprise Systems'', Addison-Wesley, ISBN 0-201-72789-7.
*[[George S. Fishman]]: ''Discrete-Event Simulation - Modeling, Programming, and Analysis'', Springer, ISBN 0-387-95160-1.
*[[Bertrand Meyer]] (2004): ''The power of abstraction, reuse and simplicity: an object-oriented library for event-driven design'', in <cite>Festschrift in Honor of Ole-Johan Dahl</cite>, eds. Olaf Owe et al., Springer-Verlag, Lecture Notes in Computer Science 2635, also available [http://se.ethz.ch/~meyer/publications/lncs/events.pdf online].
*[[Miro Samek]]: ''Practical Statecharts in C/C++: Quantum Programming for Embedded Systems'', CMP Books, ISBN 1-57820-110-1.
*{{cite book
|first=Ted
|last=Faison
|year=2006
|title=[[Event-Based Programming: Taking Events to the Limit]]
|publisher=Apress
|id=ISBN 1-59059-643-9
|url=
}}

----
En español:
*[[Adolfo Lozano Tello]]: ''Iniciación a la programación utilizando lenguajes visuales orientados a eventos'', Ed.Bellisco Ediciones Técnicas y Científicas, ISBN: 84-95279-49-5. ISBN-13: 9788495279491


* [[Programación lógica]]


==Enlaces externos==
==Enlaces externos==
*[http://c2.com/cgi/wiki?EventDrivenProgramming Description] from [[Portland Pattern Repository]]
* Tutorial "[http://eventdrivenpgm.sourceforge.net/ Event-Driven Programming: Introduction, Tutorial, History]" by Stephen Ferg
*Tutorial "[http://www.freenetpages.co.uk/hp/alan.gauld/tutevent.htm Event Driven Programming]" by [[Alan Gauld]]
*Article "[http://www.martinfowler.com/eaaDev/EventCollaboration.html Event Collaboration]" by [[Martin Fowler]]
*Article "[http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=504 Transitioning from Structured to Event-Driven Programming]" by [[Ben Watson]]
*Article "[http://today.java.net/lpt/a/32 Rethinking Swing Threading]" by [[Jonathan Simon]]
*Article "[http://www.csse.uwa.edu.au/cnet/eventdriven.html The event driven programming style]" by [[Chris McDonald]]
*Article "[http://codeproject.com/cpp/static-callbacks.asp Event Driven Programming using Template Specialization]" by [[Christopher Diggins]]
*Article "[http://www.swe.uni-linz.ac.at/people/schiffer/se-94-17/se-94-17.htm Concepts and Architecture of Vista - a Multiparadigm Programming Environment]" by [[Stefan Schiffer]] and [[Joachim Hans Fröhlich]]
*Chapter "[http://docs.eiffel.com/eiffelstudio/general/guided_tour/language/invitation-09.html Event-Driven Programming and Agents]"
*[http://zone.ni.com/devzone/devzone.nsf/webcategories/FCE7EA7ECA51169C862567A9005878EA LabWindows/CVI Resources]
*[http://javalobby.org/forums/thread.jspa?threadID=13874&messageID=91806918&tstart=0 Comment] by [[Tim Boudreau]]
*Complex Event Processing and Service Oriented Architecture [http://news.tmcnet.com/news/2006/08/18/1816129.htm]
* Event-driven programming and SOA: [http://soa-eda.blogspot.com/2006/11/how-eda-extends-soa-and-why-it-is.html How EDA extends SOA and why it is important] Jack van Hoof
* For an open source example, see [http://www.codeplex.com/pubsub Distributed Publish/Subscribe Event System]
* Event-driven programming in Java, see open source project [https://jsasb.dev.java.net/ Jsasb] by Rex Young


==Véase también==
* [http://www.monografias.com/trabajos/progeventos/progeventos.shtml programación orientada a eventos]


* [[Programación estructurada]]
[[Categoría:Paradigmas de programación]]


* [[Paradigma de programación]]
[[de:Ereignis (Programmierung)]]

[[en:Event-driven programming]]
* [[Programación lógica]]
[[fr:Programmation événementielle]]
[[gl:Programación dirixida por eventos]]
[[he:תכנות מונחה אירועים]]
[[it:Programmazione ad eventi]]
[[ja:イベント駆動型プログラミング]]
[[nl:Event]]
[[pl:Programowanie zdarzeniowe]]
[[pt:Programação orientada a eventos]]
[[ro:Programare orientată eveniment]]
[[ru:Событийно-ориентированное программирование]]
[[tr:Olay yönlendirmeli programlama dilleri]]
[[zh:事件驅動程式設計]]

Revisión del 23:52 25 jun 2008

La programación dirigida por eventos es un paradigma de programación en el que tanto la estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema o que ellos mismos provoquen.

Para entender la programación dirigida por eventos, podemos oponerla a lo que no es: mientras en la programación secuencial (o estructurada) es el programador el que define cuál va a ser el flujo del programa, en la programación dirigida por eventos será el propio usuario --o lo que sea que esté accionando el programa-- el que dirija el flujo del programa. Aunque en la programación secuencial puede haber intervención de un agente externo al programa, estas intervenciones ocurrirán cuando el programador lo haya determinado, y no en cualquier momento como puede ser en el caso de la programación dirigida por eventos.

El creador de un programa dirigido por eventos debe definir los eventos que manejará su programa y las acciones que se realizarán al producirse cada uno de ellos, lo que se conoce como el administrador de evento. Los eventos soportados estarán determinados por el lenguaje de programación utilizado, por el sistema operativo e incluso por eventos creados por el mismo programador.

En la programación dirigida por eventos, al comenzar la ejecución del programa se llevarán a cabo las inicializaciones y demás código inicial y a continuación el programa quedará bloqueado hasta que se produzca algún evento. Cuando alguno de los eventos esperados por el programa tenga lugar, el programa pasará a ejecutar el código del correspondiente administrador de evento. Por ejemplo, si el evento consiste en que el usuario ha hecho click en el botón de play de un reproductor de películas, se ejecutará el código del administrador de evento, que será el que haga que la película se muestre por pantalla.

Un ejemplo claro lo tenemos en los sistemas de programación Lexico y Visual Basic, en los que a cada elemento del programa (objetos, controles, etcétera) se le asignan una serie de eventos que generará dicho elemento, como la pulsación de un botón del ratón sobre él o el redibujado del control.

La programación dirigida por eventos es la base de lo que llamamos interfaz de usuario, aunque puede emplearse para desarrollar interfaces entre componentes de Software como módulos del núcleo también.


Motivación

En los primeros tiempos de la computación, los programas eran secuenciales, también llamados Batch. Un programa secuencial arranca, lee parámetros de entrada, procesa estos parámetros, y produce un resultado, todo de manera lineal y sin intervención del usuario mientras se ejecuta.

Con la aparición y popularización de los pc, el software empezó a ser demandado para usos alejados de los clásicos académicos y empresariales para los cuales era necesitado hasta entonces, y quedó patente que el paradigma clásico de programación no podía responder a las nuevas necesidades de interacción con el usuario que surgieron a raíz de este hecho...


Aproximación de captura de eventos en Batch

En una época temprana de vida de los pc, y bajo sistemas operativos de comandos estilo DOS, hicieron aparición programas que, sin llegar a ser orientados a eventos, si disponían de cierta interacción con el usuario gracias a rudimentarios menús.

Es necesario entender que en la programación clásica podemos capturar eventos del usuario tales como la pulsación de una determinada tecla, pero esta solo puede realizarse en el momento en que lo determine el programador y no cuando el usuario lo desee. De esta manera, las partes de un código batch que capturan los eventos, son bucles de espera que paralizan el flujo de la ejecución hasta que el usuario complete la interacción.

La realización de menús en entornos de programación secuencial, requiere de un gran esfuerzo y los resultados obtenidos suelen ser bastante pobres.

Ejemplo en Script de linux:

 #!/bin/sh
 Opcion=0
 While test $opcion –ne 4
 Do
  echo “1. Realizar tarea “
  echo “2. Leer tarea”
  echo “3. ver tareas”
  echo “4. Salir”
  Read opcion
  Done

Detección de eventos

En contraposición al modelo clásico, la programación orientada a eventos permite interactuar con el usuario en cualquier momento de la ejecución. Esto se consigue debido a que los programas creados bajo esta arquitectura se componen por un bucle exterior permanente encargado de recoger los eventos, y distintos procesos que se encargan de tratarlos. Habitualmente, este bucle externo permanece oculto al programador que simplemente se encarga de tratar los eventos, aunque en algunos lenguajes será necesaria su construcción.

Ejemplo de programa orientado a eventos en pseudo lenguaje:

  While (true){
  Switch (event){
  case mousse_button_down:
  case mouse_click:
  case keypressed:
  case Else:
  }
  }


Problemática

La programación orientada a eventos supone una complicación añadida con respecto a otros paradigmas de programación, debido a que el flujo de ejecución del software escapa al control del programador. En cierta manera podríamos decir que en la programación clásica el flujo estaba en poder del programador y era este quién decidía el orden de ejecución de los procesos, mientras que en programación orientada a eventos, es el usuario el que controla el flujo y decide.

Pongamos como ejemplo de la problemática existente, un menú con dos botones, botón 1 y botón 2. Cuando el usuario pulsa botón 1, el programa se encarga de recoger ciertos parámetros que están almacenados en un fichero y calcular algunas variables. Cuando el usuario pulsa el botón 2, se le muestran al usuario por pantalla dichas variables. Es sencillo darse cuenta de que la naturaleza indeterminada de las acciones del usuario y las características de este paradigma pueden fácilmente desembocar en el error fatal de que se pulse el botón 2 sin previamente haber sido pulsado el botón 1.


GUI's

Con la evolución de los lenguajes orientados a eventos, la interacción del software con el usuario ha mejorado enormemente permitiendo la aparición de interfaces que, a parte de ser la vía de comunicación del programa con el usuario, son la propia apariencia del mismo.

Estas interfaces, también llamadas GUI (Graphical User Interface), han sido la herramienta imprescindible para acercar la informática a los usuarios, permitiendo en muchos casos, a principiantes utilizar de manera intuitiva y sin necesidad de grandes conocimientos, el software que ha colaborado a mejorar la productividad en muchas tareas.

Uno de los periféricos que ha cobrado mayor importancia tras la aparición de los programas orientados a eventos ha sido el ratón, gracias también en parte a la aparición de los sistemas operativos modernos con sus interfaces gráficas.


Herramientas visuales de desarrollo

Con el paso del tiempo, han ido apareciendo una nueva generación de herramientas que incluyen código que automatiza parte de las tareas más comunes en la detección y tratamiento de eventos.

Destacan particularmente los entornos de programación visual que conjugan una herramienta de diseño gráfica para la GUI y un lenguaje de alto nivel. Entre estas herramientas se encuentra la conocida Visual Basic, lenguaje altamente apreciado por principiantes debido a la facilidad para desarrollar software en poco tiempo y con pocos conocimientos, y denostado por tantos otros debido a su falta de eficiencia.


Lenguajes

·Visual Basic

·Javascript

·Java(AWT,swing)

·Visual C++

.Visual .Net

·Visual Velazquez

·Visual C#

·Visual J#

·ASP .Net


Referencias


En español:

  • Adolfo Lozano Tello: Iniciación a la programación utilizando lenguajes visuales orientados a eventos, Ed.Bellisco Ediciones Técnicas y Científicas, ISBN: 84-95279-49-5. ISBN-13: 9788495279491


Enlaces externos

Véase también