Callback a Event Handler - różnice?

0

Witam,

mam pytanie odnośnie różnicy pomiędzy "callbackiem" a "event handlerem". Mianowicie: callback jest to metoda zwrotna, wywoływana w momencie zajścia jakiegoś zdarzenia, na którego zajście ta metoda została zarejestrowana. Event Handler jest to metoda obsługi zdarzenia. W wielu artykułach (m. in. firmy Philips dotyczącego stylu kodowania w języku C#) piszą, że metoda, która obsługuje dane zdarzenie to Event Handler. Jednak ta metoda to Callback. Chciałbym zrozumieć tą subtelną różnicę? Czy Event Handler to to samo co Callback?

Z góry dzięki

Pozdrawiam
Sebastian</ort>

0

Wydaje mi sie, ze w sumie to jest to samo, z tym, ze event handler jest utozsamiany raczej z programowaniem obiektowym (czyli wszystko ladnie pogrupowane, tylko przypisac), natomiast znaczenia callback uzywa sie czesciej na troche nizszym poziomie.

0

Heh dobre pytanie.
Przyklad z zycia codziennego :)

Na EventHandlery natkniesz się w aktualnie obowiązującym w javie "delegacyjnym modelu obslugi zdarzen",gdzie obiekty nasluchujące przechwytują zdarzenia od obiektow np. przycisku. (metoda handleEvent)

Poporzedni mechanizm polegał na tym ,że rejjestrowało się funkcję (callback) ,ktorej zadaniem bylo przechwycic i obsluzyc dane zdarzenie.

Wydaje mi się ,że jedyna rożnica jest w kwestii nazewnictwa, jakkolwiek EventHandler kojarzy mi się bardziej z obiektem (jego przeznaczeniem) zaś callback z typem funkcji/metody

0
PawelW napisał(a)

[...] gdzie obiekty nasluchujące przechwytują zdarzenia od obiektow np. przycisku. (metoda handleEvent)

Hmm chyba na odwrót ;) To obiekt generujący zdarzenie "szuka" odpowiedniego handlera do jego obsługi. Handler na ogół podłączany jest do sender'a.

0

Witam,

dzięki za odpowiedzi. Mi kojarzyło się to podobnie, że EventHandler stosuje się bardziej przy programowaniu obiektowym.

0x666 co do tego, że "obiekt generujący zdarzenie "szuka" odpowiedniego handlera do jego obsługi" to nie bardzo się zgodze. Jest to chyba raczej tak, że do obiektu generującego jakieś zdarzenie rejestrują się obiekty zainsteresowane danym zdarzeniem. W momencie gdy to zdarzenie wystąpi obiekt informuje wszystkie zainteresowane (zarejestrowane) obiekty, czyli wzorzec Obserwator. Więc obiekt generujący zdarzenie nie musi nikogo szukać. Czyli tak jak napisałeś w drugim zdaniu "handler podłączony jest do sendera".

Pozdrawiam
Sebastian</email>

0

Zgadzam się z PawelW i chciałbym dodać że EventHandler i callback są tym samym mechanizmem dynamicznego określania przepływu sterowania. Różnica polega na tym, że callback jest konstrukcją pochodzącą z proceduralnego programowania a EventHandler jest związany z programowaniem obiektowym a dokładniej - ze wzorcem projektowym "listener" (tudzież "observer").

pozdrawiam

0
sebcio_lcp napisał(a)

Jest to chyba raczej tak, że do obiektu generującego jakieś zdarzenie rejestrują się obiekty zainsteresowane danym zdarzeniem. W momencie gdy to zdarzenie wystąpi obiekt informuje wszystkie zainteresowane (zarejestrowane) obiekty, czyli wzorzec Obserwator. Więc obiekt generujący zdarzenie nie musi nikogo szukać. Czyli tak jak napisałeś w drugim zdaniu "handler podłączony jest do sendera".

Dziwne, ale mam wrażenie, że napisałem dokładnie to samo ;-P Zauważ, że słowo 'szuka' dałem w cudzysłów.

Jeszcze raz:

[...] gdzie obiekty nasluchujące przechwytują zdarzenia od obiektow np. przycisku. (metoda handleEvent)

Można to zrozumieć tak, że np. okno czeka na jakieś zdarzenie z kontrolki, a przecież jest tak, że to kontrolka informuje onko o tym, że wygenerowała jakieś zdarzenie. Rzadko się zdarza żeby to handler pytał się sender'a "czy już może"...

0

Ostatnio sie bawilem troche callback'ami i w sumie podobne pytanie mi sie nasunelo... odpowiedz tez mi sie sama nasunela... do callback'a mozna podpiac tylko jedna funkcje, a event handlerow moze byc wiele... przynajmniej takie jest moje rozumowanie

programuje w C# i callbacki mialem z dll'ek pisanych w C. Przy kodzie juz w samym C# uzywalem event handlerow, bo moglem wiele funkcji podczepic pod jedno zdarzenie.
Jesli sie myle to niech ktos wyprowadzi mnie z bledu :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1