Article View: alt.pl.comp.lang.csharp
Article #993Re: Generowanie zdarzeń
From: Marek Janaszewski USUNTO. z adre...
Date: Thu, 22 Apr 2004 15:53
Date: Thu, 22 Apr 2004 15:53
45 lines
3253 bytes
3253 bytes
Tomasz Bosak wrote: > Witam. > Czy ktoś próbował (czy jest możliwe) generowanie zdarzeń > "pseudosystemowych". Juz wyjaśniam. Jedna klasa wyświetla pasek > postępu i zmienia jego wartość pod wpływem zdarzenia. Zdarzenie może > być generowane w kilku innych klasach. Czy koniecznie musze > zdefiniować z jakich klas będę odbierał zdarzenie, czy tez istnieje > sposob reagowania na zdarzenia pochodzace od "nieznajomych". Witam! Wydaje mi się, że najrozsądniejsze rozwiązanie to wykorzystanie trzeciego elementu. Czyli zdefiniowanie interfejsu, za pomocą które gadają dwie klasy. W tym sensie klasa odbiorca musi implementować z góry określony interfejs. Obiekty powinny być zebrane w jakąś listę albo drzewo. Przechodzimy po wszystkich węzłach drzewa albo pozycjach listy. Sprawdzamy czy klasa implementuje interfejs i wywołujemy metodę. W przypadku drzewa trzeba jeszcze rozwiązać problem rozsyłania zdarzenia w głąb drzewa. Odbiorach zdarzenia musi je rozesłać dalej albo udostępnić jakiś interfejs to umożliwiający. Powstaje jeszcze problem komunikacje w górę. To znaczy odbiorca zdarzenia chce coś wykonać na obiekcie rozsyłającym, pobrać jakieś ustawienia. Tu można mnoży interfejsy albo użyć argumentów metody. Sam argument także może być interfejsem. Także, klasy o sobie wiedzą tylko tyle, że implementują konkretne interfejsy. Generalnie to nie wiem czy jest sens szukać i uzależniać się od jakiś mechanizmów systemowych. W razie bardziej skomplikowanych przypadków nawet nie należy bezpośrednio działać na klasach systemowych. Np. gromadząc je w listy albo stosują istniejące listy. W tym przypadku trzeba zastosować agregacje, czyli wsadzić obiekt do obiektu. Dopiero ten zewnętrzny obiekt, którym sterujemy będzie sterował klasami systemowymi. Jest to także rodzaj interfejsu zrobionego własnym sumptem. Oprócz problemu odbierania wiadomości jest jeszcze problem powstawia wiadomością. Wiadomość czy zdarzenie nie musi powstać wcale w obiekcie przechowującym listę obiektów, które muszą być powiadomione o zdarzeniu. Taki obiekt dopiero musi odnaleźć obiekt odpowiedzialny za rozesłanie zdarzenia. Jak go nazwałem dyspozytorem, Dispatcher. -- Pozdrawiam, Marek Janaszewski [ j_m...@gazeta.pl ]
Technical Details
Message-ID:
<c69aru$2qjr$2@news.atman.pl>Path:
mbox-mo1.pugleaf.net!archiver1.google.com!news1.google.com!news.glorb.com!nntp.idg.pl!news.atman.pl!not-for-mailReferences:
<c6847r$30aj$1@omega.artcom.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!archiver1.google.com!news1.google.com!news.glorb.com!nntp.idg.pl!news.atman.pl!not-for-mail From: "Marek Janaszewski /USUN_TO. z adresu!/" <USUN_TO...@gazeta.pl> Newsgroups: alt.pl.comp.lang.csharp Subject: Re: Generowanie zdarzeń Date: Thu, 22 Apr 2004 17:53:56 +0200 Organization: ATMAN Lines: 46 Message-ID: <c69aru$2qjr$2@news.atman.pl> References: <c6847r$30aj$1@omega.artcom.pl> NNTP-Posting-Host: staticline702.toya.net.pl Mime-Version: 1.0 X-Trace: news.atman.pl 1082666686 92795 217.113.228.127 (22 Apr 2004 20:44:46 GMT) X-Complaints-To: use...@atman.pl NNTP-Posting-Date: Thu, 22 Apr 2004 20:44:46 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1409 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2800.1409 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit