Programowanie generyczne w C++

Podobne dokumenty
Paradygmaty programowania. Paradygmaty programowania

Szablony. Szablony funkcji

Szablony funkcji i szablony klas

Wprowadzenie do szablonów klas

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Wartości domyślne, szablony funkcji i klas

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

Szablony funkcji i klas (templates)

Functionalization. Jeszcze o funkcjach i strukturze projektu. Marcin Makowski. 3 grudnia Zak lad Chemii Teoretycznej UJ

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Szablony klas, zastosowanie szablonów w programach

Paradygmaty programowania

Abstrakcyjny typ danych

Wskaźniki, funkcje i tablice

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Paradygmaty programowania. Paradygmaty programowania

Grzegorz Mazur. Zak lad Metod Obliczeniowych Chemii UJ. 14 marca 2007

Stos liczb całkowitych

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe. Wykład 5. C++: szablony

Tablice i funkcje. Marcin Makowski. 26 listopada Zak lad Chemii Teoretycznej UJ

Technologie programowania Wykład 4. Szablony funkcji Notes. Szablony funkcji Notes. Szablony funkcji Notes. Notes. Przemek Błaśkiewicz.

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Kurs programowania. Wykład 9. Wojciech Macyna

Programowanie w języku C++

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

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

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Projektowanie klas c.d. Projektowanie klas przykład

Obliczenia rozproszone z wykorzystaniem MPI

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

Wstęp do programowania obiektowego Szablony w C++ 1

PROGRAMOWANIE GENERYCZNE W JĘZYKU C++

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Named template parameters

PARADYGMATY PROGRAMOWANIA Wykład 4

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Wstęp do Programowania 2

Identyfikacje typu na etapie. wykonania (RTTI)

Stuck in the loop. Sterowanie. Marcin Makowski. 29 października Zak lad Chemii Teoretycznej UJ

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór

Język ludzki kod maszynowy

Zaawansowane programowanie w C++ (PCP)

Algorytmy i Struktury Danych. Anna Paszyńska

Dynamiczne struktury danych

Języki i techniki programowania Ćwiczenia 2

#include <iostream.h> #include <conio.h>

Programowanie w C++ - wybrane przykłady szablonów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

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

Tworzenie aplikacji rozproszonej w Sun RPC

Paradygmaty programowania

Podstawy programowania obiektowego

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

Rozdzia l 3. Laboratorium 3. danych zawierajac

Równoleg le sortowanie przez scalanie

Efekty uboczne błędów

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

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

Języki i techniki programowania Ćwiczenia 4 Wzorce

Ghost in the machine

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Abstrakcyjne struktury danych w praktyce

Fizyka laboratorium 1

Style programowania - krótki przeglad

Ćwiczenia IV - Kontenery (pojemniki)

Programowanie Komponentowe Zarządzanie obiektami: kontenery

20PLN dla pierwszych 50 sztuk oraz 15PLN dla dalszych. Zysk ze sprzedaży biurka wynosi 40PLN dla pierwszych 20 sztuk oraz 50PLN dla dalszych.

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Język C++ wykład VIII

Zagadnienia programowania obiektowego

Programowanie Obiektowew języku C++ Zadania L4

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

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

Kompilator języka C na procesor 8051 RC51 implementacja

PowerShell. Sławomir Wawrzyniak

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

SYSTEM DIAGNOSTYCZNY OPARTY NA LOGICE DOMNIEMAŃ. Ewa Madalińska. na podstawie prac:

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Języki programowania imperatywnego

Here comes the sun. Wyk lad niesystematyczny. Marcin Makowski. 24 października Zak lad Chemii Teoretycznej UJ

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

Programowanie obiektowe Wykład 7. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Style programowania - krótki przeglad

class A { public: A(): i(5), s("abc") { } int i; string s; };

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Funkcje wirtualne. Wskaźniki do klas pochodnych są podstawą dla funkcji wirtualnych i polimorfizmu dynamicznego.

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.

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

Transkrypt:

Bardzo szablonowa prezentacja Zak lad Metod Obliczeniowych Chemii UJ 1 wrzesnia 2005

1 2 3 4 Co to jest? Przyk lad Zastosowania 5

S lowniczek Plan Programowanie generyczne Polega na mo_zliwosci deniowania abstrakcyjnych obiektow wyspecykowanych jedynie przez ich interfejsy i zachowania. J ezyk wspieraj acy programowanie generyczne Pozwala na deniowanie typow ktore mo_zna wyspecjalizowac podaj ac im parametry ktore adaptuj a abstrakcyjne zachowanie dla specycznej instancji.

Houston mamy problem Potrzebujemy funkcji zwracaj acej wi eksz a z dwoch liczb...

Houston mamy problem Potrzebujemy funkcji zwracaj acej wi eksz a z dwoch liczb... i n l i n e double max ( double x double y ) f g r e t u r n x > y? x : y ;

Houston mamy problem Potrzebujemy funkcji zwracaj acej wi eksz a z dwoch liczb... i n l i n e double max ( double x double y ) f g r e t u r n x > y? x : y ; Prawie dobrze...

Houston mamy problem Potrzebujemy funkcji zwracaj acej wi eksz a z dwoch liczb... i n l i n e double max ( double x double y ) f g r e t u r n x > y? x : y ; Prawie dobrze... ale to nie zadzia la poprawnie dla innych typow

To mo_ze makro? Plan Proste prawda? #d e f i n e max ( x y ) ( ( x ) > ( y )? ( x ) : ( y ) )

To mo_ze makro? Plan Proste prawda? #d e f i n e max ( x y ) ( ( x ) > ( y )? ( x ) : ( y ) ) Tylko co si e stanie je_zeli napiszemy i n t i = 0 j = 1 ; i n t i = 0 j = 1 ; i n t k = max ( i j ++);

To mo_ze makro? Plan Proste prawda? #d e f i n e max ( x y ) ( ( x ) > ( y )? ( x ) : ( y ) ) Tylko co si e stanie je_zeli napiszemy i n t i = 0 j = 1 ; i n t i = 0 j = 1 ; i n t k = max ( i j ++); Oczywiscie k=2

To mo_ze makro? Plan Proste prawda? #d e f i n e max ( x y ) ( ( x ) > ( y )? ( x ) : ( y ) ) Tylko co si e stanie je_zeli napiszemy i n t i = 0 j = 1 ; i n t i = 0 j = 1 ; i n t k = max ( i j ++); Oczywiscie k=2 Nie jest to nie jedyny problem wi ec z makro odpada

And the winner is... Prosz e Panstwa oto szablon template <typename T> i n l i n e T max (T x T y ) f g r e t u r n x > y? x : y ;

And the winner is... Prosz e Panstwa oto szablon template <typename T> i n l i n e T max (T x T y ) f g r e t u r n x > y? x : y ; a oto instancja szablonu i n t i = 0 ; i n t j = 1 ; i n t k = max ( i j ++);

Przede wszystkim zrozumiec Szablon to... Szablon funkcji to przis na funkcj e Instancja szablonu to funkcja

Przede wszystkim zrozumiec Szablon to... Analogia Szablon funkcji to przis na funkcj e Instancja szablonu to funkcja Funkcja to przis na wykonanie obliczen Wywo lanie funkcji generuje wynik obliczen wykonanych wed lug podanego przisu

Przede wszystkim zrozumiec Szablon to... Analogia Szablon funkcji to przis na funkcj e Instancja szablonu to funkcja Funkcja to przis na wykonanie obliczen Wywo lanie funkcji generuje wynik obliczen wykonanych wed lug podanego przisu Tylko _ze... W przypadku szablonow wykonanie nast uje w czasie kompilacji Wynikiem obliczen jest funkcja

Argumenty szablonu I Typy oznaczane s lowem kluczowym typename lub class (w tym kontekscie to synonimy) template <typename T> T max (T x T y ) //... template <c l a s s T> T min (T x T y ) //... Sta le typow integralnych oznaczane odpowiednim typem template <i n t N> double power ( double x ) //...

Argumenty szablonu II Oczywiscie argumentow mo_ze byc wi ecej template <typename T typename V> T d o t p r o d u c t ( const V& const V&) //... template <i n t N typename T> T power (T x ) //... Argumenty mog a miec wartosci domyslne template <typename T typename V i n t BS = 32> T b l o c k e d d o t p r o d u c t ( const V& const V&) //... template <typename T1 typename T2 = i n t > T2 costam (T1 x ) //...

Instancje parametry o rany Parametry przy tworzeniu instancji mog a byc Jawnie wyspecykowane x2 = power <2 double >(x ) ; Wzi ete ze specykacji wartosci domyslnych Wydedukowane z kontekstu z = max ( x y ) ;

Specjalizacja szablonow I Powiedzmy _ze mamy funkcj e template <typename T> i n l i n e bool l e s s (T x T y ) f g r e t u r n x < y? true : f a l s e ; To zadzia la dobrze dla typow takich jak int czy double Ale dla np. char* da nieoczekiwany wynik Czyli dla char* potrzebujemy inn a implementacj e Umo_zliwia to mechanizm specjalizacji szablonow

Specjalizacja szablonow II Specjalizacja polega na tym _ze oprocz zdeniowania ogolnego przypadku deniujemy jeden lub wi ecej przypadkow szczegolnych template <> i n l i n e bool l e s s ( const char * x const char * y ) f g r e t u r n strcmp ( x y ) < 0 ; Kompilator zawsze wybierze najbardziej wyspecjalizowany szablon do stworzenia danej instancji

Jeden problem to nie problem Potrzebujemy klas e implementuj ac a stos

Jeden problem to nie problem Potrzebujemy klas e implementuj ac a stos c l a s s Stack f p u b l i c : Stack ( ) ; bool empty ( ) const ; void push ( double ) ; void pop ( ) ; double top ( ) const ; //... g ;

Jeden problem to nie problem Potrzebujemy klas e implementuj ac a stos c l a s s Stack f p u b l i c : Stack ( ) ; bool empty ( ) const ; void push ( double ) ; void pop ( ) ; double top ( ) const ; //... g ; Prawie dobrze... To nie zadzia la poprawnie dla innych typow

Jeden problem to nie problem Potrzebujemy klas e implementuj ac a stos c l a s s Stack f p u b l i c : Stack ( ) ; bool empty ( ) const ; void push ( double ) ; void pop ( ) ; double top ( ) const ; //... g ; Prawie dobrze... To nie zadzia la poprawnie dla innych typow Czyli potrzebujemy szablonow klas

Szablon klasy I Plan Denicja template <typename T> c l a s s Stack f p u b l i c : Stack ( ) ; bool empty ( ) const ; void push ( const T&); void pop ( ) ; const T& top ( ) const ; //... g ;

Szablon klasy II Plan Przyk lad u_zycia Stack<i n t> s1 ; s1. push ( 1 ) ; typedef Stack<double> DoubleStack ; DoubleStack s2 ; s2. push ( s1. top ( ) ) ; s1. pop ( ) ;

Podobienstwa i ro_znice pomi edzy szablonami klas i funkcji Podobienstwa Tak jak szablon funkcji jest przisem na funkcj e szablon klasy jest przisem na klas e Instancja szablonu klasy to klasa Do argumentow szablonu klasy stosuj a sie dok ladnie te same zasady co do argumentow szablonu funkcji Specjalizacja szablonow klas przebiega wed lug dok ladnie tych samych regu l co specjalizacja szablonow funkcji Ro_znice W przeciwienstwie do parametrow szablonu funkcji parametry szablonu klasy nie mog a byc wydedukowane z kontekstu

Alfa Meta... Plan Co to jest? Przyk lad Zastosowania Technika programowania w ktorej szablony s a u_zywane w taki sposob _ze kompilator w trakcie kompilacji kodu wykonuje program.

Alfa Meta... Plan Co to jest? Przyk lad Zastosowania Technika programowania w ktorej szablony s a u_zywane w taki sposob _ze kompilator w trakcie kompilacji kodu wykonuje program. Specyka metaprogramowania Szablony tworz a system zupe lny w rozumieniu Turinga Programowanie w paradygmacie funkcjonalnym

Co to jest? Przyk lad Zastosowania Obliczanie silni na etapie kompilacji Rekurencja template <i n t N> s t r u c t f a c t o r i a l f s t a t i c const i n t v a l u e = N * f a c t o r i a l <N 1 >:: v a l u e ; g ; Warunek koncowy template <> s t r u c t f a c t o r i a l <0> f s t a t i c const i n t v a l u e = 1 ; g ;

Jak tego u_zyc Plan Co to jest? Przyk lad Zastosowania const i n t f 3 = f a c t o r i a l <3>:: v a l u e ; const i n t f 6 = f a c t o r i a l <6>:: v a l u e ;

Jak to dzia la Plan Co to jest? Przyk lad Zastosowania Generacja instancji szablonu factorial<3> powoduje generacj e instancji szablonu factorial<2> Generacja instancji szablonu factorial<2> powoduje generacj e instancji szablonu factorial<1> Generacja instancji szablonu factorial<1> powoduje generacj e instancji szablonu factorial<0> Rekurencja ulega przerwaniu czyli jest efektywnie denicja jest rozwini eta do f a c t o r i a l <3>:: v a l u e = 3 * f a c t o r i a l <2>:: v a l u e * f a c t o r i a l <1>:: v a l u e * f a c t o r i a l <0>:: v a l u e ;

Expression templates Plan Co to jest? Przyk lad Zastosowania Wezmy wyra_zenie x = a * (b + c); Je_zeli a b c s a typu prostego kompilator wygeneruje efektywny kod Je_zeli a b c nie s a typu prostego kompilator nie ma szans na wygenerowanie optymalnego kodu Problem jest nieunikniony przy implementacji np algebry liniowej Rozwi azanie polega na generacji (na etapie kompilacji) parsera ktory wygeneruje optymalny kod

Inne zastosowania Plan Co to jest? Przyk lad Zastosowania Loop unrolling (MTL) Generacja parserow (Boost.Spirit) Generacja interfejsow do Pythona (Boost.Python)...

Szablony s a fajne Plan S a naturalnym (i bardzo mocnym) uogolnieniem j ezyka z silnym typowaniem Umo_zliwiaj a tworzenie ogolnego a zarazem wydajnego kodu pozwala wyjsc poza ograniczenia j ezyka

There's no free lunch Plan Problemy z szablonami Wzrost rozmiaru kodu Wyd lu_zenie czasu kompilacji Dodatkowe skomplikowanie j ezyka Kompletnie nieczytelna diagnostyka Pomimo to szablony stanowi a pot e_zne i bardzo u_zyteczne narz edzie a ich zalety zdecydowanie przewa_zaj a nad wadami