Paradygmaty programowania. Paradygmaty programowania

Podobne dokumenty
Paradygmaty programowania. Paradygmaty programowania

Paradygmaty programowania

Programowanie i struktury danych

Wstęp do Programowania 2

Programowanie Obiektowe i C++

Programowanie w języku C++

Szablon klasy std::list

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

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

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

Algorytmy i Struktury Danych. Anna Paszyńska

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Szablony funkcji i szablony klas

Kurs programowania. Wykład 9. Wojciech Macyna

Paradygmaty programowania

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie generyczne w C++

Operatory na rzecz typu TString

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Programowanie i struktury danych

Wprowadzenie do szablonów szablony funkcji

Programowanie obiektowe i C++ dla matematyków

Wprowadzenie do szablonów szablony funkcji

Programowanie obiektowe w C++ Wykład 12

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

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Programowanie obiektowe i C++ dla matematyków

PARADYGMATY PROGRAMOWANIA Wykład 4

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Konstruktor kopiujacy

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

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

PARADYGMATY PROGRAMOWANIA Wykład 3

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Algorytmy i Struktury Danych.

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

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Programowanie, część I

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

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

Listy powiązane zorientowane obiektowo

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Jak napisać listę jednokierunkową?

Wyliczanie wyrażenia obiekty tymczasowe

Plik klasy. h deklaracje klas

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

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

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

Szablon klasy std::vector

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

Wstęp do Programowania 2

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Wprowadzenie do szablonów klas

Podstawy programowania w języku C++

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

STL: Lekcja 1&2. Filozofia STL

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

Rozdzia l 3. Laboratorium 3. danych zawierajac

TEMAT : KLASY POLIMORFIZM

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

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

Programowanie obiektowe w C++ Wykład 11

Referencje do zmiennych i obiektów

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

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

C++ - szablony kontenerów. Kontenery i szablony kontenerów. C++ - szablony kontenerów. C++ - szablony kontenerów. C++ - szablony kontenerów

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

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

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Język C++ wykład VIII

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

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

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

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Wskaźniki, funkcje i tablice

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

TEMAT : KLASY DZIEDZICZENIE

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

Zaawansowane programowanie w C++ (PCP)

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

Zaawansowane programowanie w C++ (PCP)

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

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Przeciążenie operatorów

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe w języku

Projektowanie klas c.d. Projektowanie klas przykład

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

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

Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie:

Techniki Programowania wskaźniki 2

Wykład :37 PP2_W9

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

Algorytmy i Struktury Danych.

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

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

Transkrypt:

Paradygmaty programowania Paradygmaty programowania Dr inż. Andrzej Grosser Cz estochowa, 2013

2

Spis treści 1. Zadanie 2 5 1.1. Wprowadzenie.................................. 5 1.2. Wskazówki do zadania.............................. 8 3

4 Spis treści

1. Zadanie 2 1.1. Wprowadzenie Iterator jest pośrednikiem w dost epie do elementów obiektu z lożonego (np. elementów tablicy, listy), umożliwia ukrycie reprezentacji wewn etrznej tego obiektu. Takie podejście pozwala uprościć interfejs klasy agregujacej elementy, ponadto pozwala na zmiane sposobów przechodzenia po elementach (np. poprzez zdefiniowanie hierarchii klas). Lista jednokierunkowa to dynamiczna struktura danych, której elementy przechowuja oprócz jakieś danej zawiera również wskaźnik pokazujacy na nastepny element. W przypadku listy elementy moga być rozrzucone w pamieci, nie musza być umieszczone w jednym ciag lym bloku tak jak w przypadku tablicy. Takie podejście daje możliwość latwego wstawiania elementów do listy bez potrzeby przesuwania wszystkich kolejnych elementów. Rozważmy nastepuj ac a implementacje tej struktury danych: template <typename T> class S i n g l e L i s t { class SingleListNode { public : explicit SingleListNode ( const T& elem = T( ) ) : value ( elem ), next ( n u l l p t r ) { SingleListNode ( ) { delete next ; SingleListNode add ( const T& elem = T( ) ) { SingleListNode tmp = new SingleListNode ( elem ) ; next = tmp ; return tmp ; friend class I t e r a t o r ; friend class S i n g l e L i s t ; private : T value ; SingleListNode next ; ; 5

6 1. Zadanie 2 public : class I t e r a t o r { public : I t e r a t o r ( ) : node ( n u l l p t r ) { I t e r a t o r ( SingleListNode n) : node ( n) { bool operator!=( const I t e r a t o r& i ) const { return node!= i. node ; I t e r a t o r& operator++() { node = node >next ; return this ; I t e r a t o r operator++(int ) { I t e r a t o r i t e r ( this ) ; ++( this ) ; return i t e r ; T& operator ( ) const { return node >value ; T operator >() const { return &node >value ; private : SingleListNode node ; ; S i n g l e L i s t ( ) : head ( n u l l p t r ), l a s t ( n u l l p t r ) { S i n g l e L i s t ( ) { delete head ; S i n g l e L i s t (T b, T e ) : head ( n u l l p t r ), l a s t ( n u l l p t r ) { while ( b!= e ) { push back ( b++); S i n g l e L i s t ( const S i n g l e L i s t &) = delete ; S i n g l e L i s t& operator=(const S i n g l e L i s t &) = delete ; void push back ( const T& elem ) { i f (! head ) { head = new SingleListNode ( elem ) ; l a s t = head ; else { l a s t = l a s t >add ( elem ) ;

1.1. Wprowadzenie 7 I t e r a t o r begin ( ) { return I t e r a t o r ( head ) ; I t e r a t o r end ( ) { return I t e r a t o r ( l a s t >next ) ; private : SingleListNode head ; SingleListNode l a s t ; ; Z nastepuj acym przyk ladem użycia tego szablonu: int main ( ) { int tab [ ] = { 2, 3, 5, 7, 1 1 ; S i n g l e L i s t <int> l s t ( tab, tab + 5) ; for ( auto i t e r = l s t. begin ( ) ; i t e r!= l s t. end ( ) ; ++i t e r ) { std : : cout << i t e r << std : : endl ; for ( auto i t e r = l s t. begin ( ) ; i t e r!= l s t. end ( ) ; ++i t e r ) { std : : cout << i t e r << std : : endl ; return 0 ; Klasa SingleList zawiera dwa wskaźniki head i last pokazujace odpowiednio na poczatek listy i na ostatni element listy zawierajacy wartość (u latwia to wstawianie nowych elementów do listy). Implementuje także metody zwracajace iterator do pierwszego elementu listy (begin()) i ostatniego elementu za lista (end()). Z ciekawostek przedstawionego kodu należy zwrócić uwag e na: S i n g l e L i s t ( const S i n g l e L i s t &) = delete ; S i n g l e L i s t& operator=(const S i n g l e L i s t &) = delete ; Informuje to, że nie b edzie implentowany ani operator przypisania ani konstruktor kopiujacy (jest to element z nowego standardu C++, jeżeli kompilator bedzie zg lasza l zastrzeżenia to wystarczy przenieść deklaracje tych metod do sekcji prywatnej, oczywiście bez = delete). S lowo nullptr jest odpowiednikiem 0 i sta lej NULL z wcześniejszych wersji standardu (należy zastapić zerem lub sta l a NULL, jeżeli kod sie nie kompiluje).

8 1. Zadanie 2 Klasa SingleListNode z kolei implementuje kolejne elementy listy (w ez ly listy). Zawiera wartość danej (value) a także wskaźnik na nast epny element (typu SingleListNode; to wskaźnik, wi ec kompilator zna jego rozmiar). Klasa SingleListNode implementuje jedynie operacje wstawiania elementu za bieżacy weze l (add()). Najciekawszym elementem jest przedstawionego kodu jest klasa iteratora ukrywa ona sposób dost epu do kolejnych w ez lów listy, dopiero za jej pośrednictwem można si e odwo lać do konkretnych wartości znajdujacych sie na liście. Dlatego sa implementowane operatory wy luskania i dost epu do sk ladowej. Ponieważ iterator b edzie s luży l, oprócz dost epu do elementów, do przechodzenia po kolejnych wez lach listy dlatego sa zaimplementowane operatory inkrementacji, operator różny (operator dekrementacji nie implementuje si e tutaj ze wzgl edu na to, że da si e poruszać jedynie do przodu, wskaźnik w w eźle pokazuje jedynie na nast epny w eze l). Popatrzmy teraz na implementacj e obydwu operatorów inkrementacji: I t e r a t o r& operator++() { node = node >next ; return this ; I t e r a t o r operator++(int ) { I t e r a t o r i t e r ( this ) ; ++( this ) ; return i t e r ; Pierwszy z nich jest operatorem preinkrementacji (++iter) natomiast drugi jest operatorem postinkrementacji. Kompilator rozróżnia obie wersje na podstawie przekazywanego argumentu (int). Implementacja operatora postinkrementacji korzysta z operatora preinkrementacji, chodzi o zapewnienie symetrii tych operatorów (żeby każdy dzia la l wed lug tego samego schematu i ewentualne zmiany kodu ogranicza ly si e tylko do jednego miejsca. 1.2. Wskazówki do zadania Implementacja klasy Table jest prostsza od pokazanej wcześniej klasy SingleList implementujacej liste jednokierunkowa. Wymagane jest tutaj jedynie pomys l co bedzie przechowywa l wewnatrz iterator, na czym sie bedzie przesuwa l pokazujac kolejne elementy (w tym przypadku iterator bedzie móg l przesuwać sie do przodu i do ty lu). Ma l a podpowie-

1.2. Wskazówki do zadania 9 dzia z mojej strony jest, że kolejne elementy w tablicy zajmuja ciag ly obszar w pamieci, prosz e też sobie przypomnieć o zamiennym stosowaniu pewnych elementów w C++ (nie ma potrzeby implementacji klasy TableNode). Innymi s lowy przypomnijcie sobie w jaki sposób dost ep do elementów tablicy by l realizowany za pośrednictwem wskaźników. Tutaj bedzie zachowana duża analogia, przy czym iterator bedzie można powiedzieć dodatkowa warstwa abstrakcyjna.