Händelsedriven programmering

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 13 februari 2016; kontroller kräver 15 redigeringar .

Händelsedriven programmering ( eng.  händelsedriven programmering ; härefter SOP) är ett programmeringsparadigm där programexekveringen bestäms av händelser  - användaråtgärder (tangentbord, mus, pekskärm), meddelanden från andra program och trådar, operativsystemhändelser ( till exempel mottagande av ett nätverkspaket ).

SOP kan också definieras som ett sätt att konstruera ett datorprogram där huvudapplikationsslingan är explicit allokerad i koden (vanligtvis i programmets huvudfunktion) , vars kropp består av två delar: händelsehämtning och händelsebearbetning .

Som regel, i verkliga uppgifter, är det oacceptabelt att köra en händelsehanterare under lång tid, eftersom programmet i detta fall inte kan svara på andra händelser. I detta avseende, när man skriver händelsestyrda program, används ofta automatisk programmering .

Omfattning

Händelsestyrd programmering används vanligtvis i tre fall:

  1. när du bygger användargränssnitt (inklusive grafiska );
  2. vid skapande av serverapplikationer i fall, av en eller annan anledning, generering av tjänsteprocesser är oönskad ;
  3. vid programmering av spel där många objekt styrs.

Applikationer i serverapplikationer

Händelsestyrd programmering används i serverapplikationer för att lösa problemet med skalning till 10 000 samtidiga anslutningar eller mer.

I servrar byggda enligt modellen "en tråd per anslutning" uppstår skalbarhetsproblem av följande skäl:

En filosofisk utgångspunkt för att överge strömningsmodellen för servrar kan vara Alan Cox' uttalande : "En dator är en tillståndsmaskin . Flödesprogrammering är till för dem som inte vet hur man programmerar tillståndsmaskiner” [1] .

Serverapplikationen i händelseorienterad programmering implementeras på ett systemanrop som tar emot händelser samtidigt från många deskriptorer (multiplexering). Händelsehantering använder uteslutande icke-blockerande I/O-operationer så att inget handtag stör behandlingen av händelser från andra handtag.

Multiplexing

Följande operativsystemverktyg kan användas för att multiplexa anslutningar:

Implementeringsexempel

Applikationer i skrivbordsapplikationer

I moderna programmeringsspråk är händelser och händelsehanterare centrala för implementeringen av ett grafiskt användargränssnitt. Tänk till exempel på interaktionen mellan ett program och mushändelser. Att trycka på höger musknapp utlöser ett systemavbrott som kör en specifik procedur inom operativsystemet. Denna procedur söker efter fönstret under muspekaren. Om ett fönster hittas skickas denna händelse till fönstrets meddelandekö. Beroende på fönstertypen kan ytterligare händelser genereras. Till exempel, om ett fönster är en knapp (i Windows är alla grafiska element fönster), så genereras dessutom en knappklickshändelse. Skillnaden med den senaste händelsen är att den är mer abstrakt, den innehåller nämligen inte markörens koordinater, utan säger bara att knappen klickades.

En händelsehanterare kan se ut så här (med C# som exempel):

privat void button1_Click ( objektavsändare , EventArgs e ) { MessageBox . _ Visa ( "Knappen trycktes" ); }

Här är händelsehanteraren en procedur till vilken avsändarparametern skickas, vanligtvis innehållande en pekare till händelsekällan. Detta gör att du kan använda samma procedur för att hantera händelser från flera knappar, och särskilja dem med denna parameter.

Programmeringsspråk

I C# implementeras händelser som ett språkelement och är medlemmar i klasser. Händelsemekanismen implementerar här designmönstret för utgivare/prenumeranter . Exempel på händelsedeklaration:

public class MyClass { public event EventHandler MyEvent ; }

Där EventHandler  är en delegat som anger typen av händelsehanterarprocedur. Att prenumerera på ett evenemang görs på följande sätt:

min klass . MyEvent += ny EventHandler ( Handler );

Här är myClass  en instans av klassen MyClass , Handler  är en hanterarprocedur. En händelse kan ha ett obegränsat antal hanterare. När en händelsehanterare läggs till läggs den till i en speciell stack, och när en händelse inträffar anropas alla hanterare i sin ordning på stacken. Att avsluta prenumerationen på en händelse, det vill säga att ta bort en hanterare, utförs på liknande sätt, men med operatorn "-=".

Olika programmeringsspråk stödjer SOPs i varierande grad. Följande språk har det mest kompletta stödet för evenemang (icke uttömmande lista):

Andra språk stödjer för det mesta evenemang som undantagshantering .

Verktyg och bibliotek

  • Node.js , ett händelsestyrt I/O - ramverk baserat på V8 JavaScript -motorn
  • Cocoa & Objective-C , ett reflekterande objektorienterat programmeringsspråk som lägger till Smalltalk -liknande meddelanden till C-språket .
  • GLib
  • Gui4Cli [4] , ett händelsestyrt programmeringsspråk för Windows
  • libsigc++
  • levande
  • POCO
  • libasync , en del av sfs och sfslite [5] biblioteken, ett effektivt händelsebibliotek för C++
  • Perl Objektmiljö
  • AnyEvent, EV - Perl-moduler för händelsestyrd programmering
  • PRADO, ett händelsedrivet komponentverktyg för webbprogrammering i PHP 5
  • tcl
  • Twisted , Python
  • Qt , ett plattformsoberoende C ++- widgetbibliotek baserat på händelsehanteringsmodellen. Det finns en mindre version som heter Qt/Console som tar bort widgetstödskoden och är ett händelsestyrt ramverk som också innehåller några ytterligare funktioner som nätverk över plattformar, multithreading och XML -manipulation .
  • QP  är en familj av öppna händelsedrivna miljöer för inbyggda realtidssystem [6]
  • Simple Unix Events aka SUE [7] , ett enkelt objektorienterat bibliotek för att bygga händelseorienterade Unix -program i C++ .

Se även

Engelskspråkiga källor

Material på ryska

Länkar

  1. Linux-Kernel Archive: Re: Alan Cox-citat? (var: Re: bokföring (länk ej tillgänglig) . Hämtad 29 april 2008. Arkiverad från originalet 8 februari 2008. 
  2. N. N. Nepeyvoda. 13. Föreläsning: Event programmering // Stilar och metoder för programmering. föreläsningskurs. studiehandledning . - M . : Internet University of Information Technologies, 2005. - S. 213-222. — 316 sid. — ISBN 5-9556-0023-X . Arkiverad 28 januari 2012 på Wayback Machine
  3. S.V. Zykov. Föreläsningar №15 och №16 // Introduktion till programmeringsteori. Objektorienterad strategi . — Internet University of Information Technologies. Arkiverad 13 april 2011 på Wayback Machine
  4. Gui4Cli hemsida . Hämtad 1 juli 2011. Arkiverad från originalet 9 juli 2011.
  5. sfslite: översikt (nedlänk) . Tillträdesdatum: 22 januari 2008. Arkiverad från originalet den 29 mars 2010. 
  6. Ladda ner från Quantum Leaps . Hämtad 22 januari 2008. Arkiverad från originalet 8 juli 2008.
  7. Hemsidan för biblioteket Simple Unix Events (SUE) . Tillträdesdatum: 1 juli 2011. Arkiverad från originalet den 29 mars 2010.