Програмирање вођено догађајима (енгл. ) је парадигма у програмирању у којој је ток програма одређено догађајима као што су акције корисника (клик мишем, притискање тастера), сензор излаза, или порукама из других програма / нити. Програмирање вођено догађајима је доминантна парадигма која се користи код графичких корисничких интерфејса и у другим апликацијама (нпр JavaScript веб апликације) које су усмерене да обављају поједине радње у одговору на кориснички унос.

У апликацији вођеној догађајима, генерално постоји главна петља која слуша догађаје, а затим активира повратни позив функције када се детектује догађај. У уграђеним системима исти се може постићи коришћењем хардверских интерапата уместо главне петље која се стално извршава. Програми вођени догађајима могу бити написани у било ком програмском језику, мада их је лакше писати у језицима који обезбеђују апстракције на високом нивоу, као што су затворења.

Хендлери догађаја

Тривијални хендлери догађаја

Како код за проверу догађаја и главне петље не зависи од саме апликације, многи програмски фрејмворци брину о њиховој имплементацији и на кориснику је само да обезбеди код за управљање догађајима. У овом једноставном примеру може постојати позив за догађај трговине који се зове који као аргумент узима ниску карактера, која одговара ономе шта је корисник откуцао пре нето шго је притиснуо тастер ЕНТЕР. Да би се сабрала два броја, неопходно је складиштити податке изван хендлера догађаја. Следи пример имплементације:

глобално декларисан бројач K и цео број T.
OnKeyEnter(character C)
{
   конвертуј C у број N
   ако је K једнако нули, ускладишти N у T и увећај K
   у супротном додај N у T, одштампај резултат и врати K на нулу
}

Праћење историје је једноставно у класичном програму, али у програму вођеном догађајима изискује посебну пажњу и планирање.

Хендлери изузетака

У PL/1, иако сам програм не мора бити претежно вођен догађајима, извесни абнормални догађаји као што су хардверске грешке, прекорачења бафера или „програмске провере“ могу да се догоде и да евентуално спрече даље извршавање програма. Хендлери изузетака могу да се дају коришћењем „ исказа“ у позивајућим методама како би се обезбедиле рутине за чишћење стања пре завршетка рада.

Прављење хендлера догађаја

Први корак у развоју програма вођених догађајима је писање низа потпрограма, или метода, који се називају рутинама за руковање (хендловање) догађајима. Ове рутине хендлују догађаје на које ће главни програм реаговати. На пример, један клик левог дугмета миша на командно дугме у GUI програму може да позове рутину која ће отворити још један прозор, сачувати податке у базу података или затворити апликацију. Многа модерна програмерска окружења програмеру пружају шаблоне за хендлере догађаја, чиме омогућавају програмеру да се сконцентрише на писање самог кода догађаја.

Други корак је да се хендлери догађаја вежу за догађаје, тако да се при јављању догађаја позове одговарајућа, исправна метода. Графички уређивачи спајају прва два корака: двокликом на дугме, уређивач прави (празан) хендлер догађаја повезан са акцијом клика на дугме, и отвара прозор у коме програмер може да измени хендлер догађаја.

Трећи корак у развоју програма вођеног догађајима је писање главне петље. Ово је функција која проверава да ли је дошло до догађаја, и кад дође до неког догађаја позива одговарајући хендлер који ће да обради догађај. Већина програмерских окружења за писање програма вођених догађајима имају готове главне петље, тако да апликативни програмер не мора сам да је имплементира. RPG, рани програмски језик из IBMа, чији дизајн из 1960их је наликовао програмирању вођеном догађајима описаном изнад, је имао уграђену главну I/O петљу (познату као „програмски циклус“), где калкулације реагују у складу са 'индикаторима' (флеговима) постављеним раније током циклуса.

Критика и најбоља пракса

Програмирање вођено догађајима има широку примену у графичким корисничким интерфејсима, на пример Андроид конкурентни фрејмворци су дизајнирани коришћењем обрасца,[1] где се користи комбинација једнонитне петље за процесирање догађаја (за главну нит за кориснички интерфејс) и синхроних нити (за позадинске нити). То је зато што додаци (енгл. ) за кориснички интерфејс нису нит-безбедни, и пошто су прошириви, не постоји начин да се гарантује да су све имплементације нит-безбедне, тако да једнонитни модел ублажава овај проблем.

Дизајн ових алата је предмет критике, на пример од стране Мира Самека, због промовисања претерано поједностављеног модела догађаја и акција, што програмере наводи да пишу апликациони код који је подложан грешкама, компликован за дораде и претерано комплексан. Миро Каже:

Такав приступ је плодно тле за багове из најмање три разлога:

  1. Увек доводи до комплексне условне логике.
  2. Свака тачка гранања захтева израчунавање комплексног израза.
  3. Пребацивање између различитих модова изискује измену многих променљивих, што лако може да доведе до недоследности.
Miro Samek, Who Moved My State?, C/C++ Users Journal, The Embedded Angle column (Април 2003)

и залаже за коришћење коначних аутомата као изводљиве алтернативе.[2]

Нити без стека

Приступ вођен догађајима се користи у језику за описивање хардвера. Контексту нити је CPU стек неопходан само док активно обрашује догађај. Након завршетка обраде, CPU може да пређе на друге нити вођене догађајима, што омогућава извршавање изузетно великог броја нити. У суштини овај приступ представља коначан аутомат.

Види још

  • Временски активиран систем (алтернативна архитектура рачунарских система)
  • Интерапт
  • Поређење програмских парадигми
  • Dataflow програмирање (сличан концепт)
  • DOM догађаји
  • Архитектура вођена догађајима
  • Обрада тока догађаја (сличан концепт)
  • Језик за описивање хардвера
  • Инверзија контроле
  • Message-oriented middleware
  • Програмске парадигме
  • Образац publish-subscribe
  • Сигнално програмирање (сличан концепт)
  • Виртуелна синхронија, модел дистрибуираног извршавања за програмирање вођено догађајима

Референце

Спољашње везе

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.