Programowanie obiektowe

Slides:



Advertisements
Podobne prezentacje
Programowanie obiektowe
Advertisements

Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.
Proces doboru próby. Badana populacja – (zbiorowość generalna, populacja generalna) ogół rzeczywistych jednostek, o których chcemy uzyskać informacje.
Ekonometria WYKŁAD 10 Piotr Ciżkowicz Katedra Międzynarodowych Studiów Porównawczych.
Jak złożyć wniosek ? (GWA) Regionalny Program Operacyjny Województwa Pomorskiego na lata
Wyszukiwanie informacji w Internecie. Czym jest wyszukiwarka? INTERNET ZASOBY ZAINDEKSOWANE PRZEZ WYSZUKIWARKI Wyszukiwarka to mechanizm, który za pomocą.
© Kazimierz Duzinkiewicz, dr hab. inż. Katedra Inżynierii Systemów Sterowania 1 Metody optymalizacji - Energetyka 2015/2016 Metody programowania liniowego.
© Matematyczne modelowanie procesów biotechnologicznych - laboratorium, Studium Magisterskie Wydział Chemiczny Politechniki Wrocławskiej, Kierunek Biotechnologia,
Excel 2007 dla średniozaawansowanych zajęcia z dnia
EWALUACJA JAKO ISTOTNY ELEMENT PROJEKTÓW SYSTEMOWYCH Sonia Rzeczkowska.
Zmienne losowe Zmienne losowe oznacza się dużymi literami alfabetu łacińskiego, na przykład X, Y, Z. Natomiast wartości jakie one przyjmują odpowiednio.
Organizacja, przepisy i procedury Na przykładzie Śląskiego OW NFZ Dr n. med. Z Klosa.
Skuteczności i koszty windykacji polubownej Wyniki badań zrealizowanych w ramach grantu Narodowego Centrum Nauki „Ocena poziomu rzeczywistej.
Teoria masowej obsługi Michał Suchanek Katedra Ekonomiki i Funkcjonowania Przedsiębiorstw Transportowych.
Menu Jednomiany Wyrażenia algebraiczne -definicja Mnożenie i dzielenie sum algebraicznych przez jednomian Mnożenie sum algebraicznych Wzory skróconego.
Instalacja nienadzorowana windows xp Jakub klafta.
Optymalna wielkość produkcji przedsiębiorstwa działającego w doskonałej konkurencji (analiza krótkookresowa) Przypomnijmy założenia modelu doskonałej.
Metody sztucznej inteligencji - Technologie rozmyte i neuronowe 2015/2016 Perceptrony proste nieliniowe i wielowarstwowe © Kazimierz Duzinkiewicz, dr hab.
Usługa ePodatki (MF) Michał Dobrzyński, Departament Informatyki MRPiPS tel
Definiowanie i planowanie zadań typu P 1.  Planowanie zadań typu P  Zadania typu P to zadania unikalne służące zwykle dokonaniu jednorazowej, konkretnej.
1 Definiowanie i planowanie zadań budżetowych typu B.
Renata Maciaszczyk Kamila Kutarba. Teoria gier a ekonomia: problem duopolu  Dupol- stan w którym dwaj producenci kontrolują łącznie cały rynek jakiegoś.
Jak tworzymy katalog alfabetyczny? Oprac.Regina Lewańska.
API jądra do obsługi przestrzeni użytkownika Co jest tematem tej prezentacji: Transport danych pomiędzy przestrzeniami użytkownika i jądra (asm/uaccess.h)
Moduł II. Obszar formułowania Programów i Projektów.
O PARADOKSIE BRAESSA Zbigniew Świtalski Paweł Skałecki Wydział Matematyki, Informatyki i Ekonometrii Uniwersytet Zielonogórski Zakopane 2016.
Język Java Paweł Rajba
Dziedziczenie, polimorfizm, Interfejsy
Programowanie Obiektowe – Wykład 1
Schematy blokowe.
Kurs języka C++ – wykład 2 ( )
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
(według:
MATEMATYCZNE MODELOWANIE PROCESÓW BIOTECHNOLOGICZNYCH
Rachunki zdań Tautologiczność funkcji
Nazwa firmy Plan biznesowy.
Liczby pierwsze.
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Kurs języka C++ – wykład 6 ( )
Akademia C# lab. 9 Zdarzenia i delegaty.
Funkcja – definicja i przykłady
Programowanie obiektowe Wykład 10
Programowanie obiektowe
Kurs języka C++ – wykład 13 ( )
Elementy fizyki kwantowej i budowy materii
Tytuł – [najlepiej aby jak najtrafniej oddawał opisywane rozwiązanie]
Programowanie obiektowe
Języki programowania.
Programowanie obiektowe
Instrukcje wyboru.
Damian Urbańczyk xHTML Tworzenie stylów CSS.
Prezentacja planu biznesowego
Podstawy informatyki Zygfryd Głowacz.
Programowanie obiektowe Wykład 11
Zmienne i typy danych w C#
Tytuł – [najlepiej aby jak najtrafniej oddawał opisywane rozwiązanie]
Proste obliczenia w arkuszu kalkulacyjnym
Zdarzenia (eventy) Zdarzenia służą do powiadomienia użytkownika, gdy w używanej klasie dojdzie do pewnych wydarzeń zdefiniowanych przez twórcę klasy.
Implementacja rekurencji w języku Haskell
Nazwa firmy Biznesplan.
Język C++ Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Wyrok WSA w Bydgoszczy z dnia 27 października 2016 r., I SA/Bd 613/16
Program na dziś Wprowadzenie Logika prezentacji i artykułu
dr Robert Kowalczyk, PWSZ Płock
Zapis prezentacji:

Programowanie obiektowe Wykład 9 Programowanie obiektowe Szablony cz. II Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe Wykład 9 Parametry domyślne Definiując szablon możemy dla danego parametru typu ustalić wartość domyślną, tzn. wartość, którą dany parametr osiągnie, gdy podczas konkretyzacji wartość typu zostanie pominięta. template <typename T1, typename T2 = char> class A { … }; Jeżeli podczas konkretyzacji szablonu A, nie wskażemy wartości dla parametru typu T2, zostanie użyty typ char. A<int,double> a1; //T1 = int, T2 = double A<char*> a2; //T1 = char*, T2 = char template <typename T = int> class B { … }; B<string> b1; // T = string B<> b2; // T = int dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Wartości domyślne w szablonach funkcji Programowanie obiektowe Wykład 9 Wartości domyślne w szablonach funkcji Definiując szablon klasy możemy korzystać zarówno z wartości domyślnych dla parametrów typu jaki i wartości domyślnych dla argumentów wyrażeń (nie-typów). Definiując szablon funkcji możemy używać wartości domyślne co najwyżej dla argumentów wyrażeń. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Niejawna konkretyzacja szablonów Programowanie obiektowe Wykład 9 Niejawna konkretyzacja szablonów W przypadku, gdy na podstawie szablonu deklarujemy obiekt, określając żądany typ, korzystamy z niejawnej konkretyzacji szablonu. W takim przypadku kompilator uszczegóławia definicję klasy według schematu zadanego przez szablon tej klasy. A<int> a; niejawna konkretyzacja szablonu Ponadto kompilator zastosuje niejawną konkretyzację wówczas, gdy zostanie użyty obiekt konkretyzowanej klasy: A<int>* wsk; obiekt klasy jeszcze nie jest użyty, więc brak konkretyzacji wsk = new A<int>(); obiekt klasy A<int> jest tworzony, więc musi nastąpić konkretyzacja szablonu dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Jawna konkretyzacja szablonów Programowanie obiektowe Wykład 9 Jawna konkretyzacja szablonów Jawna konkretyzacja zachodzi wówczas, gdy podczas deklaracji klasy użyte jest słowo kluczowe template oraz podane są dokładne wartości typów. Definicja takiej klasy jest tworzona nawet jeśli nie tworzony jest obiekt tej klasy. Np.: template class A<double>; //możemy teraz korzystać z klasy A<double> dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Jawne uszczegółowienie szablonu Programowanie obiektowe Wykład 9 Jawne uszczegółowienie szablonu Jawne uszczegółowienie polega na utworzeniu szablonu dla konkretnej wartości typu lub typów. Ma to zastosowanie w przypadku, gdy dla konkretnego typu chcemy zmienić działanie szablonu. template <typename T> class LiczbaTP { private: T x; public: LiczbaTP(T _x) : x(_x) {} T dodaj(LiczbaTP L); }; T LiczbaTP<T>::dodaj(LiczbaTP L) return x + L.x; } dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Jawne uszczegółowienie szablonu c.d. Programowanie obiektowe Wykład 9 Jawne uszczegółowienie szablonu c.d. template <> class LiczbaTP<char> { private: char x; public: LiczbaTP(char _x) : x(_x) {} char* dodaj(LiczbaTP L); bool czyWiekszaOd(const LiczbaTP L); }; char* LiczbaTP<char>::dodaj(LiczbaTP L) char* trzy = new char[3]; trzy[0] = x; trzy[1] = L.x; trzy[2] = '\0'; return trzy; } LiczbaTP<int> L1(2), L1(5); //użyto definicji ogólnej szablonu cout << L1.dodaj(L2); //wypisze 7 LiczbaTP<char> C1(‘a’), C2(‘b’); //użyto definicji uszczegółowionej cout << C1.dodaj(C2); //wypisze „ab” dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Uszczegółowienie częściowe Programowanie obiektowe Wykład 9 Uszczegółowienie częściowe Stosując tego typu uszczegółowienie możemy skonkretyzować tylko niektóre parametry typu. Zatem definicja takiego szablonu tylko po części ulega ograniczeniu do konkretnego typu. template <typename T1, typename T2> class A { szablon ogólny … }; template <typename T2> class A<int,T2> { parametr T1 został uszczegółowiony … do parametru int }; template <> class A<int,int> { parametry T1, T2 zostały uszczegółowione … do parametru int }; A<char,char> a1; //użyto ogólny szablon A A<int,double> a2; //użyto częściowego uszczegółowienia A<int,T2> A<int,int> a3; //użyto jawnego uszczegółowienia A<int,int> dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Zagnieżdżanie szablonów Programowanie obiektowe Wykład 9 Zagnieżdżanie szablonów W ramach definicji jednego szablonu dopuszczalne jest definiowanie wewnętrznego szablonu składowego. template <typename U> class Para { private: template <typename V> class Elem V x; public: Elem(V _x = 0) {x=_x;} V get() const {return V;} }; Elem<int> e1; Elem<U> e2; Para(U u, int i) : e1(i), e2(u) {} … dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Szablony a funkcje zaprzyjaźnione Programowanie obiektowe Wykład 9 Szablony a funkcje zaprzyjaźnione Definiując szablon, możemy stosować funkcje zaprzyjaźnione. Możemy wtedy wyróżnić następujące przypadki: Nieszablonowe funkcje zaprzyjaźnione, czyli takie, które nie są zależne od parametru typu. Funkcje zaprzyjaźnione, których typ argumentów jest zależny od szablonu. Funkcje zaprzyjaźnione szablonowe, ale takie, które nie są związane z szablonem. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Nieszablonowe funkcje zaprzyjaźnione Programowanie obiektowe Wykład 9 Nieszablonowe funkcje zaprzyjaźnione template <typename T> class A { private: int x; public: A(); friend void f(); }; Funkcja f jest funkcją zaprzyjaźnioną z klasą będącą dowolną konkretyzacją szablonu A. Np. f jest zaprzyjaźniona z następującymi klasami: A<int>, A<double>, A<char*>, A<string>, A<bool>, … . W powyższej deklaracji funkcji f brak jest argumentów. Jaki jest zatem sens zaprzyjaźniać tego typu funkcje z klasą? dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Nieszablonowe funkcje zaprzyjaźnione z argumentami szablonowymi Programowanie obiektowe Wykład 9 Nieszablonowe funkcje zaprzyjaźnione z argumentami szablonowymi template <typename T> class A { private: int x; public: A(); friend void f(A &); }; źle!!! W celu przekazania do argumentu funkcji klasę szablonową, należy wskazać jej uszczegółowienie. friend void f(A<T> &); Ponieważ powyższa funkcja nie jest szablonowa, możemy zatem podać definicję tylko dla konkretnych typów. void f(A<int> & a) { cout << a.x + 1; } void f(A<char> & a) { cout << (int)a.x; } dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Szablonowe funkcje zaprzyjaźnione związane z szablonem Programowanie obiektowe Wykład 9 Szablonowe funkcje zaprzyjaźnione związane z szablonem W celu zdefiniowania szablonowej funkcji zaprzyjaźnionej związanej z szablonem należy w pierwszej kolejności przed definicją klasy ją zadeklarować. Następnie deklarujemy szablon wraz z wcześniej zadeklarowaną funkcją zaprzyjaźnioną. template <typename T> void f(T &); template <typename T> void g(); template <typename TYP> class PrzykladTP { private: TYP x; static int i; public: friend void f<>(PrzykladTP<TYP> &); friend void g<TYP>(); }; template <typename T> int PrzykladTP<T>::i=0; void f(T & t) cout << t.x; } template <typename T> void g() { cout << PrzykladTP<T>::i; } dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Szablonowe funkcje zaprzyjaźnione niezwiązane z szablonem Programowanie obiektowe Wykład 9 Szablonowe funkcje zaprzyjaźnione niezwiązane z szablonem To takie funkcje, których każde uszczegółowienie jest funkcją zaprzyjaźnioną dla każdego uszczegółowienia danej klasy. template <typename T> class A { private: T x; public: A(T _x) : x(_x) {} template <typename U> friend void f(U &); }; void f(U & u) cout << u.x << endl; } int main() { A<double> a1(2.3); A<char> a2(‘h’); f(a1); f(a2); return 0; } dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Dziękuję za uwagę!  Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ