1 / 19

Agenda

Agenda. O co w ogóle chodzi? Proste przykłady użycie zdarzeń Tworzymy swoje zdarzenie Jak to wszystko działa Pytania. O co w ogóle chodzi?. Problem komunikacji klas Możliwe (złe) rozwiązania: (Za) dużo metod i pól publicznych (Za) dużo metod i pól statycznych

makoto
Download Presentation

Agenda

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Agenda • O co w ogóle chodzi? • Proste przykłady użycie zdarzeń • Tworzymy swoje zdarzenie • Jak to wszystko działa • Pytania

  2. O co w ogóle chodzi? • Problem komunikacji klas • Możliwe (złe) rozwiązania: • (Za) dużo metod i pól publicznych • (Za) dużo metod i pól statycznych • Dużo przekazywania referencji – silne powiązania między klasami

  3. Motywacja - przykład Aplikacja okienkowa z klasą formy i kilkoma klasami, które robią „coś” i stanowią jakiś wewnętrzny system. • Forma wyświetla informacje pochodzące z wnętrza systemu i przyjmuje żądania od użytkownika (czyli potrzebuje dostępu do systemu). • System korzysta z zasobów zewnętrznych i musi informować Formę o zmianach (czyli potrzebuje dostępu do formy). • Zarówno użytkownik, który widzi formę, jak i system i jego zewnętrzne zasoby (web serwisy, baza danych...) działają niezależnie, bez żadnej synchronizacji - wszystko dzieje się naraz. • System (jak i aplikacja w całości) jest wielowątkowy.

  4. Zdarzenia - podstawy • Komunikacja przez metody. • Brak sztywnego wiązania klas ze sobą – pełna niezależność. • Możliwość dynamicznego (w czasie uruchomienia) łączenia i rozłączania klas w systemie.

  5. Zdarzenia - przykład • Biblioteki Windows Forms i ASP.NET opierają się na zdarzeniach. • Korzystanie ze zdefiniowanych zdarzeń w tych bibliotekach odbywa się zupełnie bezmyślnie (co nie jest złe). • Obsługa zdarzenia sprowadza się do zaimplementowania (zazwyczaj prostej) metody.

  6. DEMO #1Zdarzenia w Windows Forms

  7. Obsługiwanie zdarzeń • Tworzymy metodę (lub pozwalamy by Visual Studio zrobiło to za nas) obsługującą zdarzenie, o sygnaturze:public/private void metoda(object sender, EventArgs e); • Dodajemy metodę do listy metod obsługujących zdarzenie za pomocą operatora += (istnieje kilka innych możliwości):jakiśObiekt.Zdarzenie += metoda; • I to wszystko ;)

  8. Tworzenie zdarzenia • (Opcjonalnie) Definiujemy klasę, która będzie nieść argumenty zdarzenia (klasa musi dziedziczyć z EventArgs). • Deklarujemy zdarzenie jako pole w klasie, za pomocą słowa kluczowego event:public event EventHandler<EArgs> Zdarzenie; • Zgłaszamy zdarzenie w wybranych miejscach klasy, za pomocą składni:Zdarzenie(this, args);

  9. DEMO #2Deklarowanie własnych zdarzeń i ich obsługa

  10. Kiedy stosować zdarzenia? • Do komunikacji w aplikacjach z GUI. • Do komunikacji między klasami lub (w niektórych przypadkach) wewnątrz jednej klasy. • W przypadku aplikacji wielowątkowych do komunikacji między wątkami. • Przy budowaniu bibliotek i kodu, który będzie używany przez inne osoby. • Do debugowania. • Do logowania (zapisujemy klasę logującą do wszystkich interesujących nas zdarzeń).

  11. Kiedy nie stosować zdarzeń? • Gdy można rozwiązać komunikację prościej – np. wewnątrz jednej klasy – bez utraty niezależności i hermetyzacji poszczególnych fragmentów. • Zdarzenia nie służą do zgłaszania błędów (do tego służą wyjątki).

  12. Jak działają zdarzenia? • Zdarzenia używają wewnętrznie delegatów do zapisu informacji o metodach i do wywoływania ich. • Delegaty można kojarzyć z wskaźnikami do funkcji w C. • Zdarzenia (słowo kluczowe event) jest tłumaczone przez kompilator (preprocesor?) na delegaty. • Delegaty są tłumaczone na specjalne obiekty, które przechowują listę adresów do obiektów i ich metod.

  13. Jakie informacje przechowuje delegat • Adres obiektu i metody (wewnętrzne informacje – z reguły nie potrzebne programiście). • Listę argumentów i wartość zwracaną metody. • Wskaźniki do innych delegatów, które tworzą łańcuch wywołań.

  14. Zastosowania delegatów • W wielu przypadkach delegaty można stosować zamiennie ze zdarzeniami. • Wywołanie wielu metod wewnątrz jednej lub wielu klas, przy czym lista metod może się zmieniać w czasie uruchomienia. • Przekazywanie „referencji” do metod a nie do całych obiektów. • Możliwość realizacji podejścia zbliżonego do programowania aspektowego (AOP).

  15. Pytania?

  16. Materiały w sieciwww.hope.art.pl/wyklady

  17. W następnym odcinkuWeb Service Software Factory

  18. Dziękuję za uwagęi zapraszam ponownie ;)

More Related