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



Podobne dokumenty
Wykład 5 Okna MDI i SDI, dziedziczenie

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

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Programowanie obiektowe zastosowanie języka Java SE

Szablony klas, zastosowanie szablonów w programach

Języki i metody programowania Java. Wykład 2 (część 2)

Wykład 6 Dziedziczenie cd., pliki

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład 3 Typy danych w C++/CLI, typy fundamentalne, operacje wejścia/wyjścia, właściwości klasy (property) Zofia Kruczkiewicz

Tworzenie projektu zawierającego aplet w środowisku NetBeans. lab1. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

I - Microsoft Visual Studio C++

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

Wykłady 1, 2. Wstęp do programowania w środowisku Visual C++ Autor: Zofia Kruczkiewicz

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie obiektowe

Programowanie zaawansowane

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Projektowanie aplikacji internetowych laboratorium

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Operacje wejścia/wyjścia odsłona pierwsza

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Część 4 życie programu

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Dziedziczenie jednobazowe, poliformizm

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

Zofia Kruczkiewicz, ETE8305_2 1

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Wykład 8: klasy cz. 4

Zadanie 2: Arytmetyka symboli

Języki i metody programowania Java Lab2 podejście obiektowe

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Multimedia JAVA. Historia

Budowa aplikacji wielowarstwowych. Zastosowanie technologii Ajax

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Wykład 3 Składnia języka C# (cz. 2)

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Wykład 8: Obsługa Wyjątków

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Instrukcja laboratoryjna cz.3

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

Rozdział 4 KLASY, OBIEKTY, METODY

Laboratorium nr 10. Temat: Funkcje cz.2.

TEMAT : KLASY DZIEDZICZENIE

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

1 Podstawy c++ w pigułce.

Db4o obiektowa baza danych wersja.net

Laboratorium 1 - Programowanie proceduralne i obiektowe

Programowanie w Internecie. Java

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

Program Rejestr zużytych materiałów. Instrukcja obsługi

Wstęp. Skąd pobrać program do obsługi FTP? Logowanie

Temat: Organizacja skoroszytów i arkuszy

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

Laboratorium 10 - Web Services

Obsługa wyjątków. Język C++ WW12

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Platforma.NET. Laboratorium nr 1 Podstawy języka C#

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

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

LINQ TO XML. Autor ćwiczenia: Marcin Wolicki

Mechanizm dziedziczenia

Komunikatory typu TCP/IP lab2. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

INSTRUKCJA UŻYTKOWNIKA PORTALU SIDGG

LABORATORIUM 7 Cel: 1_1

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Metody Metody, parametry, zwracanie wartości

Programowanie Komputerów 2FD. Materiały pomocnicze do laboratorium

Szkolenie dla nauczycieli SP10 w DG Operacje na plikach i folderach, obsługa edytora tekstu ABC. komputera dla nauczyciela. Materiały pomocnicze

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Aplikacje RMI

Wykład 4: Klasy i Metody

Podstawy Programowania Obiektowego

Wykład 5: Klasy cz. 3

Programowanie 2. Język C++. Wykład 3.

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

Programowanie obiektowe

Transkrypt:

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

Zagadnienia 1. Delegaty wiązane, właściwości indeksowane 2. Delegaty niewiązane 3. Nowa wersja kalkulatora, delegaty 4. Zastosowanie delegatów do obsługi zdarzeń użytkownika

1. Delegaty wiązane (1) Delegaty służą do sygnalizowania zdarzenia. Definicja przykładowego delegatu: public delegate void lista_operacji(wchar_t oper_); typ referencyjny delegatu lista_operacji (pochodny klasy System::Delegate) tworzona jest lista referencji do metod, które spełniają następujące warunki: nagłówek metody powinien zawierać parametr typu wchar_t, a zwracany wynik jest równy void. lista_operacji ^ lista_operacji= gcnew lista_operacji(kalkulator,&dzialania_kalkulatora::obsluga); Metody mogą być typu static lub obiektowe.

Delegaty wiązane (2) Utworzenie listy z jedną metodą obiektową lista_operacji ^ lista_operacji= gcnew lista_operacji (kalkulator,&dzialania_kalkulatora::obsluga); Dodanie do listy metody obiektową lista_operacji += gcnew lista_operacji (kalkulator,&dzialania_kalkulatora::info2); Usunięcie z listy metody obiektowąlista_operacji -= gcnew lista_operacji (kalkulator,&dzialania_kalkulatora::info2); Dodanie do listy metody statycznej lista_operacji += gcnew lista_operacji (Dzialania_kalkulatora::info4);

Delegaty wiązane (3) Tworzenie nowej listy metod obsluga_zdarzen1 lista_operacji^ lista_operacji1 = gcnew lista_operacji (kalkulator,&dzialania_kalkulatora::info2); Utworzenie sumy list lista_operacji += lista_operacji1;

Zakładanie projektu CLR Console Application z plikiem TKalkulator3

Klasa TKalkulator_3 nie posiada jawnej definicji właściwości info

Do obsługi kalkulatora zdefiniowano klasę Dzialania_kalkulatora

1.1. Klasa Dzialania_kalkulatora posiada właściwość indeksowaną komunikaty, która pozwala pobrać właściwy komunikat informujący o stanie pracy kalkulatora Generowanie wyjątku za pomocą throw w przypadku niewłaściwego indeksu. Właściwość komunikaty powinna być wywoływana w bloku try catch, jeśli indeks może przybierać wartość dowolną

Metoda info4 wstawia komunikaty do tablicy komunikat pobierane za pomocą właściwości indeksowanej komunikaty

Wywołanie właściwości indeksowanej Lista_operacji nie potrafi reagować na zły operator po usunięciu z listy delegatu metody info2

2. Delegaty niewiązane (2) Definicja delegatu niewiązanego Delegat niewiązany wskazuje na funkcje obiektowe o określonej liście parametrów dla danego typu obiektu i może być wywołany dla wielu obiektów typu użytego w definicji. public delegate void lista_operacji1(dzialania_kalkulatora^,wchar_t c); dodano do listy metod klasy Dzialania_kalkulatora metodę obsluga lista_operacji1^ lista_operacji = gcnew lista_operacji1(&dzialania_kalkulatora::obsluga); na obiekcie kalkulator1 wykonuje się metodę obsluga dla operacji odejmowanie lista_operacji(kalkulator1,'-'); dodano do listy metod klasy Dzialania_kalkulatora metodę info1 lista_operacji += gcnew lista_operacji1(&dzialania_kalkulatora::info1); na obiekcie kalkulator2 wykonuje się metody obsluga dla operacji mnożenie oraz info1 lista_operacji(kalkulator2, *');

Delegaty niewiązane (2) // TKalkulator3_.cpp : main project file. #include "stdafx.h" #include "TKalkulator3.h" using namespace System; using namespace TKalkulator3; public delegate void lista_operacji1(dzialania_kalkulatora^,wchar_t c); int main(array<system::string ^> ^args) { Dzialania_kalkulatora^ kalkulator1 = gcnew Dzialania_kalkulatora(gcnew TKalkulator_3(2,3,'+')); Dzialania_kalkulatora^ kalkulator2 = gcnew Dzialania_kalkulatora(gcnew TKalkulator_3(5,8,'+')); Dzialania_kalkulatora^ kalkulator3 = gcnew Dzialania_kalkulatora(gcnew TKalkulator_3(2,0,'+')); lista_operacji1^ lista_operacji = gcnew lista_operacji1(&dzialania_kalkulatora::obsluga); lista_operacji += gcnew lista_operacji1(&dzialania_kalkulatora::info1); lista_operacji += gcnew lista_operacji1(&dzialania_kalkulatora::info2); lista_operacji += gcnew lista_operacji1(&dzialania_kalkulatora::info3); lista_operacji(kalkulator1,'-'); Console::WriteLine(L"1: "+kalkulator1->kalkulator->info); lista_operacji(kalkulator2,'k'); Console::WriteLine(L"2: "+kalkulator2->kalkulator->info); lista_operacji(kalkulator3,'/'); Console::WriteLine(L"3: "+kalkulator3->kalkulator->info); return 0; }

3. Nowa wersja kalkulatora, delegaty

Zmiana nazwy pliku nagłówkowego Form1.h na Kalkukator_6.h

Dołączenie do projektu pliku nagłówkowego TKalkulator3.h z projektu konsolowego z p.2. (skopiowano plik TKalkulator3.h do katalogu Kalkulator_6/Kalkulator_6 z katalogu TKalkulator3/TKalkulator3 i dodano go do projektu Kalkulator_6 za pomocą wyskakującego menu wywołanego prawym klawiszem myszy)

Zawartość pliku TKalkulator3.h

Wykorzystanie klasy Dzialania_kalkulatora z przykładu o uniwersalnym wykorzystaniu kalkulatora wywołanie operacji i podanie wyniku lub reakcja na nieprawidłowy operator lub argument (1, 2)

Zastosowanie klasy z uniwersalnym wykorzystaniem kalkulatora z GUI

Zastosowanie klasy z uniwersalnym wykorzystaniem kalkulatora z GUI wersja 1 konstruktora (1-y sposób tworzenia listy funkcji). Tworzenie listy pozwala tworzyć różne scenariusze działania aplikacji podczas jej działania)

Zastosowanie klasy z uniwersalnym wykorzystaniem kalkulatora z GUI wersja 2 konstruktora (2-i sposób tworzenia listy funkcji)

Wywołanie właściwości indeksowanej komunikaty, definiowanie metod info_1 i info_2 wstawianej do listy delegatu typu lista_operacji

Dodanie nowego klawisza, który uruchamia listę metod, służących o obsługi wybranych obliczeń

Pierwszy scenariusz działania aplikacji (konstruktor 1 z pierwszą listą)- zamykanie aplikacji za pomocą prawego górnego klawisza ze znakiem x

Drugi scenariusz działania aplikacji (konstruktor 2 z drugą listą)- zamykanie aplikacji za pomocą prawego górnego klawisza ze znakiem x lub przycisku Nie z okienka dialogowego. Naciśnięcie klawisza Tak powoduje powrót do okna działań kalkulatora. Okienko dialogowe pojawia się po naciśnięciu klawisza Wykonaj

4. Zastosowanie delegatów do obsługi zdarzeń użytkownika

Okno Kalkulator3 domyślnie zamykane jest przyciśnięciem górnego prawego przycisku oznaczonego znakiem + Obsługa zdarzeń użytkownika typu event za pomocą listy typu delegate

Funkcje do obsługi zdarzeń jako elementy listy typu delegate

Zaznaczanie przycisku typu CheckBox (obsługa metodą checkbox1_checkedchanged) pozwala zmieniać obsługę zdarzenia klikania na przycisk Wykonaj (zmiana scenariusza zdarzenia oblicz wywołanego jako wtórne zdarzenie w metodzie wykonaj_click) Zamykanie programu prawym górnym klawiszem + Dodatkowo zamykanie programu możliwe po naciśnięciu na klawisz Wykonaj i naciśnięciu na klawisz Nie w wywołanym standardowym okienku dialogowym

Pierwszy scenariusz działania kalkulatora Drugi scenariusz działania kalkulatora