Programowanie zaawansowane

Podobne dokumenty
Programowanie obiektowe

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Programowanie obiektowe

Instrukcja użytkownika systemu medycznego. Pracownik medyczny psycholog / rehabilitant

Platformy Programowania

MS Excel 2007 Kurs zaawansowany Obsługa baz danych. prowadzi: Dr inż. Tomasz Bartuś. Kraków:

CMS - INFORMACJE. *** Mirosław Kuduk E mail: tel. kom DODATKOWE FUNKCJE - PANEL ADMINISTRATORA

UMOWY INSTRUKCJA STANOWISKOWA

Aplikacje w środowisku Java

ELEKTRONICZNA KSIĄŻKA ZDARZEŃ

DIAGNOSTYKA DIAGNOSTYKA

Wprowadzenie do projektu QualitySpy

Instrukcja użytkownika systemu medycznego. Pracownik medyczny psycholog / rehabilitant

Instrukcja użytkownika systemu medycznego

Aplikacje w środowisku Java

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Programowanie Obiektowe GUI

Wykład 8: klasy cz. 4

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

OBIEKTY TECHNICZNE OBIEKTY TECHNICZNE

Programowanie obiektowe - zadania

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Instrukcja do programu DoDPD 1.0

Skrócona instrukcja pracy z Generatorem Wniosków

Projektowanie aplikacji internetowych laboratorium

UONET+ moduł Dziennik. Dokumentowanie lekcji w systemie UONET+

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Instrukcja laboratoryjna nr.4

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

UONET+ moduł Dziennik

Instrukcja użytkownika systemu medycznego

Platforma e-learningowa

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Kolumna Zeszyt Komórka Wiersz Tabela arkusza Zakładki arkuszy

Instrukcja do programu DoUPS 1.0

Instrukcja obsługi Zaplecza epk dla Pracowników Instytucji w zakresie zarządzania danymi szczegółowymi dotyczącymi sposobu realizacji procedury

MVVM Light Toolkit. Julita Borkowska

MS Word Długi dokument. Praca z długim dokumentem. Kinga Sorkowska

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Rozdział 4 KLASY, OBIEKTY, METODY

Karty pracy. Ustawienia. W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne.

ODSZUKANIE PRZELEWU ING BUSINESS

Przychodnia 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę Osoba.

Instrukcja obsługi Szybkiego paragonu w programie LiderSim [ProLider].

BAZY DANYCH MAKRA I PRZYCISKI. Microsoft Access. Adrian Horzyk. Akademia Górniczo-Hutnicza

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Miejski System Zarządzania - Katowicka Infrastruktura Informacji Przestrzennej Pozwolenia wodnoprawne i zgłoszenia przydomowych oczyszczalni ścieków

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Instrukcja użytkownika systemu medycznego w wersji mobilnej. meopieka

WellCommerce Poradnik: Dodawanie języka i waluty. autor: Adrian Potępa (biuro@eclairsoaware.pl)

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe

Operacje. instrukcja obsługi wersja 2.9.2

Podstawy technologii WWW

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

Instrukcja laboratoryjna cz.3

OPIS TECHNICZNY I INSTRUKCJA OBSŁUGI PROGRAMU DO MIERNIKA ZOT4. PM wer. 5.0

Wykład 5 Okna MDI i SDI, dziedziczenie

Podstawy obiektowości

Instrukcja obsługi aplikacji e-szklanka

Część 4 życie programu

Aplikacja Mobilna. Platformy B2B Kompanii Biurowej

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

Instrukcja do programu DoGLS 1.0

System obsługi wag suwnicowych

Konfiguracja modułu alarmowania w oprogramowaniu InTouch 7.11

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1 Podstawy c++ w pigułce.

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Backend Administratora

ZAPOTRZEBOWANIE DO MAGAZYNU ZMM_WNMAG NA MATERIAŁY CIĄGŁEGO UŻYCIA (ZA) I MATERIAŁY PROMOCYJNE (ZR) W REFERENCJI DO RW

ZAPOTRZEBOWANIE DO MAGAZYNU ZMM_WNMAG NA DRUKI ŚCISŁEGO ZARACHOWANIA (ZD) W REFERENCJI DO MM

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Podręczna pomoc Microsoft Power Point 2007

Kurier DPD dla Subiekt GT

Instrukcja użytkownika

Instrukcja uŝytkowania programu

Instrukcja dostępu do usługi Google Scholar

Laboratorium 7 Blog: dodawanie i edycja wpisów

Zawartość. Wstęp. Moduł Rozbiórki. Wstęp Instalacja Konfiguracja Uruchomienie i praca z raportem... 6

Zaawansowane aplikacje internetowe - laboratorium

w kalendarzu pracownika po wybraniu z menu podręcznego polecenia Dziennik zdarzeń pracownika

Instrukcja wprowadzania graficznych harmonogramów pracy w SZOI Wg stanu na r.

ING BusinessOnLine FAQ. systemu bankowości internetowej dla firm

Instrukcja użytkownika systemu medycznego. Pracownik medyczny Lekarz ZDLR

Instrukcja do programu DoDHL 1.5

Przewodnik dla klienta

Instrukcja obsługi Zaplecza epk w zakresie zarządzania tłumaczeniami opisów procedur, publikacji oraz poradników przedsiębiorcy

Bazy danych TERMINOLOGIA

Nowe funkcje w programie SYMFONIA Handel Premium w wersji 2009.c

Baza Aktów Własnych. Autor: Piotr Jegorow. ABC PRO Sp. z o.o.

Podstawy Programowania 2

Wprowadzenie do formuł i funkcji

Transkrypt:

Programowanie zaawansowane Ćwiczenie 6 Komunikacja silnie typowana I. Utwórz aplikację okienkową realizującą proste obliczenia arytmetyczne. Obsługa zdarzeń w aplikacji typu Windows Form Application odbywa się za pośrednictwem delegatów. Najważniejszym z nich jest standardowy delegat EventHandler. Utwórz interfejs graficzny podobny do przedstawionego poniżej (najłatwiej jest ustawić kontrolki dla pierwszego działania, a następnie je skopiować i podmienić znak działania). Obsługę zdarzeń kliknięcia każdego z przycisków zaimplementuj i podepnij na wymienione poniżej sposoby. W punkcie pierwszym, środowisko automatycznie podepnie wygenerowaną metodę do zdarzenia w pliku Form1.Designer.cs w tym pliku z klasą częściową znajdują się definicje kontrolek, które umieszczamy na naszym formularzu. W punkcie 2), 3), 4) i 5) metody obsługujące zdarzenie Click podpinamy ręcznie w konstruktorze formularza. Obsługa zdarzeń będzie oczywiście polegała na pobraniu wartości z odpowiednich pól tekstowych i wyświetleniu wyniku wybranego działania na odpowiedniej etykiecie. 1. Dla dodawania: obsługę kliknięcia zrealizuj poprzez środowisko programistyczne. Dwukrotne kliknięcie na przycisku powoduje utworzenie szkieletu metody przeznaczonej do obsługi zdarzenia i jej automatyczne zarejestrowanie w odpowiednim zdarzeniu. Wygenerowana metoda obsługująca zdarzenie podpowie nam również, jak mają wyglądać sygnatury metod zgodne z delegatem EventHandler (zwracają void, a parametrami są obiekty klas Object i EventArgs). 2. Dla odejmowania: najpierw utwórz metodę do obsługi zdarzenia, a następnie ręcznie podepnij ją do zdarzenia Click odpowiedniego przycisku (Wskazówka 1.a), 3. Dla mnożenia: tak samo, jak dla odejmowania,

4. Dla dzielenia: podepnij obsługę zdarzenia Click poprzez metodę anonimową (Wskazówka 1.b), 5. Dla dzielenia modulo: podepnij obsługę zdarzenia Click poprzez wyrażenie lambda(wskazówka 1.c). Zadanie na wyobraźnię: obsłuż 3 dowolnie wybranych zdarzeń dla dowolnych kontrolek. Po wybraniu kontroli, jej właściwości i zdarzenia można edytować w oknie Properties (standardowo umieszczonym w prawym dolnym rogu). Jeżeli nie jest widoczne, wystarczy nacisnąć przycisk F4. Lista zdarzeń znajduje się w pod-zakładce oznaczonej błyskawicą. Aby automatycznie wygenerować szkielet metody do obsługi danego zdarzenie, wystarczy dwa razy kliknąć na polu obok jego nazwy. Obsługę zdarzeń możemy też zrealizować ręcznie w konstruktorze formularza. Nazwy zdarzeń na liście składowych obiektu są również oznaczone symbolem błyskawicy. II. Utwórz bibliotekę zawierającą klasy i mechanizmy wspomagające zarządzaniem kadrami. 1. Zdefiniuj klasę reprezentującą pracownika firmy (imię, nazwisko, staż, liczbą sprzedaży, pensja). 2. Zdefiniuj delegat pozwalający na przechowywanie i wywoływanie metod przyjmujących jako parametr pracownika i nie zwracających żadnych wartości. 3. Zdefiniuj klasę reprezentującą firmę. Klasa ta ma odpowiadać za przechowywanie listy pracowników. Dodaj do klasy metodę przyjmującą jako parametr obiekt wcześniej zdefiniowanego delegata. Ma ona wywoływać przekazaną metodę dla każdego z pracowników. 4. Zdefiniuj statyczną klasę reprezentującą dział płac. W klasie tej zaimplementuj następujące statyczne metody (zgodne ze wcześniej zdefiniowanym delegatem): 1) metodę zwiększającą pensję o 200, jeżeli pracownik ma ponad 10 dokonanych sprzedaży, 2) metodę zmniejszającą pensję, o 10%, jeżeli pracownik pracuje mniej niż 2 lata, 3) metodę zerującą ilość dokonanych sprzedaży. Każda z metod powinna również wypisywać odpowiedni komunikat zawierający imię i nazwisko pracownika. 5. Metody Find() i FindAll() zdefiniowane w klasie generycznej Lis<T> przyjmują jako parametry obiekty typu Predicate<T>. Metody zgodne z tym delegatem zwracają wartość logiczną, a jako parametr przyjmują obiekty typu wskazanego poprzez parametr generyczny. Do klasy reprezentującej firmę dopisz metody, które za pośrednictwem metod Find() lub FindAll() będą realizowały następujące wyszukiwania: 1) wyszukanie pracownika o nazwisku Kowalski,

2) wyszukanie pracownika o wskazanym imieniu i nazwisku, 3) wyszukanie pracowników o ilości dokonanych sprzedaży większych od 10, 4) wyszukanie pracowników o stażu wyższym od podanego. Wyszukiwanie w punkcie 1) zrealizuj na trzy sposoby (czyli metoda ta powinna być napisana w trzech wersjach). Będą się one różnić sposobem przekazania argumentu dla metody Find(. Przekaż go za pomocą: 1) nazwy metody, 2) metody anonimowej, 3) operatora lambda. Wyszukiwanie w punktach 2), 3) i 4) należy zrealizować za pomocą operatora lambda. 6. Definiowanie i korzystanie ze zdarzeń (słowo kluczowe event) Dodaj do firmy trzy wersje metody do usuwania pracownika spod podanego indeksu. Dodaj do nich wywołanie odpowiednich zdarzeń w momencie usunięcia pracownika. 1) Pierwsza wersja: zdefiniuj prywatny obiekt naszego delegata (dla metod przyjmujących pracownika jak parametr i nic nie zwracających), oraz publiczne metody do rejestrowania i wyrejestrowywania metod z nim zgodnych. Podczas usunięcia wywołaj metody przechowywane o zdefiniowanym obiekcie delegata. 2) Druga wersja: zdefiniuj publiczne zdarzenie (event) dla naszego delegata i wywołaj je podczas usuwania pracownika. 3) Trzecia wersja: utwórz publiczne zdarzenie wykorzysujące standardowy delegat EventHandler orz klasę dziedziczącą po EventArgs pozwalającą na przekazanie informacji o usuwanym pracowniku. Wywołaj to zdarzenie przed usunięciem pracownika. 7. Zdefiniuj metody przyjmujące jako parametry obiekty odpowiednich delegatów i pozwalające na (Wskazówka 2): 1) wyświetlenie wybranej informacji o każdym z pracowników, 2) wyszukanie pracowników względem zadanego kryterium, 3) posortowanie pracowników względem zadanego kryterium. III. Utwórz aplikację konsolową testującą przygotowaną bibliotekę klas. 1. Zdefiniuj firmę z kilkoma pracownikami. 2. Wywołaj metodę z delegatem dla każdej z metod zdefiniowanych w dziale płac.

3. Przetestuj metody do wyszukiwania pracowników. 4. Napisz metody do obsługi zdarzenia usunięcia pracownika, podepnij je pod odpowiednie zdarzenia i przetestuj ich działanie wywołuj odpowiednie wersje metod do usunięcia. 5. Przetestuj działanie metod do wyświetlania, wyszukiwania i sortowania dla różnych kryteriów. Wskazówka 1. Definiowanie delegata, definiowanie zdarzenia i podpinanie metod. W poniższym przykładzie chcemy, aby programista korzystający z naszej klasy do logowania (zapisywania w logu), mógł przetworzyć logowaną wiadomość na dowolny, wskazany przez siebie sposób. Dla uproszczenia, logowaną wiadomość podajemy jako parametr metody Log, w rzeczywistości metoda ta byłaby automatycznie wywoływana, np., w przypadku przechwycenia wyjątków. Idealnym rozwiązaniem są oczywiście delegaty. Dzięki nim, programista będzie w stanie wskazać nam metodę (zbiór instrukcji), którą mamy wywołać dla logowanej wiadomości tuż przed jej zapisaniem do pliku. Aby to obsłużyć wystarczy: 1) zdefiniować typ delegata określający sygnaturę metod, które będziemy mogli przechowywać w obiektach tego delegata. W naszym przypadku będą one przyjmować obiekt klasy String jako parametr i nic nie zwracać (linia 10); 2) zdefiniować publiczne zdarzenie typu naszego delegata (linia 14), czyli konkretną zmienną, która będzie mogła przechowywać metody zgodne ze wskazanym schematem. Dzięki wykorzystaniu sława kluczowego event, środowisko wygeneruje prywatny obiekt delegata i metody służące do podpinania i odpinania metod (operator += i -= ). Nazwy zdarzeń rozpoczynamy oczywiście wielką literą (są publiczne). Konwencją jest również rozpoczynanie ich słowem On (przy, podczas). Jeżeli chcemy zaznaczyć, że zdarzenie będzie wywoływane przed daną aktywnością, używamy końcówki ing (np. OnLogging), a gdy po aktywności, końcówki ed (np. OnLogged). 3) wywołać zdarzenie w odpowiednim miejscu (linie 18-20). W ten sposób zostaną wywołane wszystkie metody podpięte do naszego zdarzenia. Ich parametrem będzie logowana wiadomości. Należy pamiętać, o sprawdzeniu, czy do naszego zdarzenia podpięto metody (czyli czy jest różne od null).

Programista korzystający z naszej klasy do logowania może podpiąć metody obsługujące nasze zdarzenie (czyli mające zostać wywołane w odpowiednim momencie) na kilka sposobów. Oczywiście najpierw musi utworzyć obiekt klasy Logger. Podpięcie metod do zdarzania powinno być zrealizowane przed miejscem jego wystąpienia, czyli przed wywołaniem metody Log(). a) Pierwszym sposobem na podpięcie metody jest zdefiniowanie standardowej metody zgodnej ze schematem delegata i wskazanie jej nazwy po operatorze +=. Możemy tu skorzystać z pomocy środowiska, które po wpisanie operatora += po nazwie zdarzenia zaproponuje nam nazwę metody (nazwa obiektu + znak _ + nazwa zdarzenia). Po naciśnięciu naszego ulubionego klawisza TAB szkielet metody zostanie automatycznie wygenerowany. Wystarczy wypełnić go instrukcjami wedle naszej potrzeby. Na liście podpowiedzi składowych obiektu zdarzenia oznaczone są symbolem błyskawicy. Widząc ten symbol wiemy, że możemy użyć właśnie operatora +=. b) Drugim sposobem jest zdefiniowanie metody anonimowej. Zamiast definiować standardową metodę i przekazywać jej nazwę, definiujemy metodę od razu w miejscu podpięcia do zdarzenia (w takim przypadku nazwa metody nie jest potrzebna, stąd też jej anonimowość). Rozwiązanie to stosujemy w przypadku, gdy metoda ta jest wykorzystywana tylko do obsługi danego zdarzenia i nie będzie wywoływana w innych miejscach programu. Definiowanie metody rozpoczynamy od słówka delegate, następnie podajemy parametry metody (opcjonalnie tzn. nie musimy ich

podawać, jeżeli nie będziemy z nich korzystać w ciele metody) i ciało metody. Instrukcję zakańczamy średnikiem. c) Trzecim sposobem jest wykorzystanie wyrażenia lambda skróconego zapisu metody anonimowej. W zapisie tym podajemy tylko nazwy parametrów (typy zostaną wywnioskowane automatycznie), operator lambda => i ciało metody. W przypadku pojedynczej instrukcji możemy pominąć klamerki i słowo kluczowe return (w przypadku metod zwracających wartości).

Wskazówka 2. Definiowanie metod z delegatami jako parametrami. Wywołanie