🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #993

Re: Generowanie zdarzeń

#993
From: Marek Janaszewski USUNTO. z adre...
Date: Thu, 22 Apr 2004 15:53
45 lines
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-mail
References: <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