Programowanie sterowane zdarzeniami (ang. event-driven programming) – paradygmat programowania, w którym przepływ programu jest determinowany przez zdarzenia zewnętrzne. Typowymi przypadkami są zdarzenia interfejsu użytkownika generowane przez myszę, klawiaturę, touchpady i ekrany dotykowe oraz dane z zewnętrznych czujników. Zdarzenia mogą być również generowane programowo, na przykład z komunikatów z innych programów, powiadomień z innych wątków lub innych zdarzeń sieciowych.
Programowanie sterowane zdarzeniami jest dominującym paradygmatem stosowanym w aplikacjach graficznych interfejsów użytkownika i serwerach sieciowych.
W aplikacjach sterowanych zdarzeniami zwykle występuje pętla zdarzeń, która nasłuchuje zdarzeń, a następnie uruchamia funkcję wywołania zwrotnego, gdy jedno z tych zdarzeń zostanie wykryte.
Programy sterowane zdarzeniami można pisać w dowolnym języku, choć zadanie to jest łatwiejsze w przypadku języków oferujących abstrakcje wysokiego poziomu.
Ważne jest rozróżnienie między paradygmatami opartymi na zdarzeniach i na komunikatach (zwanymi również kolejkami). Usługi oparte na zdarzeniach (np. AWS SNS) są oddzielone od swoich odbiorców. Usługi oparte na kolejkach lub komunikatach (np. AWS SQS) są natomiast połączone ze swoimi odbiorcami[1].
Pętla zdarzeń
[edytuj | edytuj kod]Ponieważ pętle zdarzeń związane z pobieraniem i wysyłaniem zdarzeń są powszechnym wzorcem w aplikacjach, wiele struktur programistycznych (frameworków) dba o ich implementację i oczekuje, że użytkownik dostarczy jedynie kod dla obsługi tych zdarzeń[potrzebny przypis].
RPG, jeden z pierwszych języków programowania firmy IBM, którego koncepcja projektowa z lat 60. XX wieku była podobna do programowania sterowanego zdarzeniami omówionego powyżej, zapewniał wbudowaną główną pętlę wejścia-wyjścia (znaną jako „cykl programu”), w której obliczenia odpowiadały na „znaczniki” (flagi) ustawione wcześniej w cyklu[potrzebny przypis].
Obsługa zdarzeń
[edytuj | edytuj kod]Rzeczywista logika zawarta jest w funckjach obsługi zdarzeń, na które reaguje program główny. Na przykład pojedyncze kliknięcie lewym przyciskiem myszy na przycisku polecenia w programie graficznym może wywołać procedurę, która otworzy kolejne okno, zapisze dane w bazie danych lub zamknie aplikację. Wiele środowisk IDE udostępnia programistom szablony zdarzeń graficznego interfejsu użytkownika, pozwalając im skupić się na pisaniu kodu zdarzenia[potrzebny przypis].
Śledzenie działania programu sekwencyjnego jest stosunkowo proste. W przypadku programowania zdarzeniowego funkcje obsługi zdarzeń uruchamiane są w odpowiedzi na sygnały zewnętrzne w nieprzewidywalnej kolejności. Dlatego wymagane jest staranne zaprojektowanie struktury tych funkcji, aby działały poprawnie niezależnie od kolejności wywołań[potrzebny przypis].
Typowe zastosowania
[edytuj | edytuj kod]Większość istniejących architektur GUI wykorzystuje programowanie sterowane zdarzeniami[2]. System Windows wewnętrznie wykorzystuje pętlę zdarzeń. Framework Java AWT przetwarza wszystkie zmiany interfejsu użytkownika w jednym wątku, zwanym wątkiem wysyłania zdarzeń (ang. event dispatching thread). Podobnie wszystkie aktualizacje interfejsu użytkownika w strukturze Java JavaFX występują w wątku aplikacji JavaFX[3].
Większość serwerów sieciowych i frameworków, takich jak Node.js, jest sterowana zdarzeniami[4].
Zobacz też
[edytuj | edytuj kod]- Hardware Description Language
- Przerwanie
- Odwrócenie sterowania
- Paradygmat programowania
- Programowanie obiektowe
Przypisy
[edytuj | edytuj kod]- ↑ Premanand Chandrasekaran, Karthik Krishnan, Neal Ford, Brandon Byars, Allard Buijze: Domain-Driven Design with Java - A Practitioner's Guide. Packt Publishing, 2022. ISBN 978-1-80056-476-3.
- ↑ Miro Samek: Who Moved My State?. Dr. Bobb's, 2013-04-01. [dostęp 2018-01-28]. (ang.).
- ↑ Irina Fedortsova: Concurrency in JavaFX. JavaFX Documentation Home, czewiec 2012. [dostęp 2018-01-04]. Cytat: The JavaFX scene graph, which represents the graphical user interface of a JavaFX application, is not thread-safe and can only be accessed and modified from the UI thread also known as the JavaFX Application thread. (ang.).
- ↑ Event-Driven Programming in Node.js [online], DigitalOcean [dostęp 2025-08-21] (ang.).