Zaawansowane programowanie w C++ (PCP)

Podobne dokumenty
Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP)

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

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

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

Zaawansowane programowanie w C++ (PCP)

Szablony klas, zastosowanie szablonów w programach

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

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

Szablony funkcji i szablony klas

IDZ DO KATALOG KSI EK TWÓJ KOSZYK CENNIK I INFORMACJE CZYTELNIA PRZYK ADOWY ROZDZIA SPIS TREŒCI KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

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

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

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

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.

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

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

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

Podstawy Programowania Obiektowego

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

Zaawansowane programowanie w języku C++ Klasy w C++

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

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

Zaawansowane programowanie w C++ (PCP)

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

Wykład 8: klasy cz. 4

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

Dziedziczenie jednobazowe, poliformizm

Wstęp do Programowania 2

Paradygmaty programowania. Paradygmaty programowania

Wykład 4: Klasy i Metody

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

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

Zaawansowane programowanie w C++ (PCP)

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

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

Zaawansowane programowanie w C++ (PCP)

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

Programowanie obiektowe w C++ Wykład 12

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

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

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

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

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

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

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

Programowanie w języku C++

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

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

Programowanie obiektowe i C++ dla matematyków

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

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

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

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

Język C++ wykład VIII

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

Podstawy Programowania Obiektowego

Wskaźniki do funkcji i metod

Projektowanie klas c.d. Projektowanie klas przykład

Konstruktor kopiujacy

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

C++11: szablony zewnętrzne C++ 11: C++11: szablony zewnętrzne. C++11: szablony zewnętrzne. C++11: szablony zewnętrzne C++ 11: Szablony zewnętrzne

Programowanie obiektowe

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

Wstęp do Programowania 2

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

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

Wykład 5: Klasy cz. 3

Mechanizm dziedziczenia

PARADYGMATY PROGRAMOWANIA Wykład 3

Zaawansowane programowanie w C++ (PCP)

Wprowadzenie do szablonów klas

Szablony funkcji i klas (templates)

Programowanie obiektowe - 1.

Materiały do zajęć VII

Stos liczb całkowitych

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

C++11. C++ 11 wybrane elementy. C++11: referencje do rvalue C++ 11: C++11: referencje do rvalue. C++11: referencje do rvalue. Referencje do rvalue

Do czego służą klasy?

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

Programowanie obiektowe

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

obiekty funkcyjne - funktory

Szablony. Szablony funkcji

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Operacje wejścia/wyjścia (odsłona druga) - pliki

Podstawy programowania obiektowego

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

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

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

Paradygmaty programowania

Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming

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

Transkrypt:

Wykład 7 - sprytne wskaźniki. 20 kwietnia 2007

Potrzeba współdzielenia kodu źródłowego Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania największego elementu) Szablony mechanizm czasu kompilacji kod nie jest kompilowany, jeżeli nie został użyty

Problem typu Typowy problem - jawne wskazanie, że identyfikator jest typem class Foo { public: typedef int Element; /* dalsza część implementacji klasy Foo */ }; template<typename T> void f(const T& t) { //Poniżej błędnie zakłada, że T::Element to nazwa składowej T::Element e = 0; //... //Poniżej jawnie wskazano, że T::Element to nazwa typu typename T::Element e = 0; //... };

boost::scoped_ptr Odpowiada strategii zdobywanie zasobów jest inicjowaniem Destruktor usuwa wskaźnik Zabronione kopiowanie template<typename T> class scoped_ptr : noncopyable { public: explicit scoped_ptr(t* p = 0) : p_(p) {} scoped_ptr(){ delete p_; } //Usuwa obiekt wskazywany T& operator*() { return *p_; } T* operator->() { return p_; } private: T* p_; //Wskaźnik, którym zarządza }; void f() { scoped_ptr<mojaklasa> klasa(new MojaKlasa); //kod, który może wyrzucać wyjątki } //Destruktor klasy scoped_ptr wywoła operator delete

Wzorzec pimpl - ukrywanie implementacji class Foo { public: //Interfejs klasy private: //Implementacja jest ukryta struct Impl;//Deklaracja poprzedzająca scoped_ptr<impl> pimpl_;//sprytny wskaźnik }; zalety wady

std::auto_ptr - kopiowanie jest przekazywaniem własności Odpowiada strategii zdobywanie zasobów jest inicjowaniem Destruktor usuwa wskaźnik Dozwolone kopiowanie (!) - przenosi ono uprawnienia template<typename T> class auto_ptr { public: explicit auto_ptr(t* p = 0) : p_(p) {} //nie jest const auto_ptr&! auto_ptr(auto_ptr& a) p_(a.p_) { a.p_ = 0L; } auto_ptr& operator=(auto_ptr& a); //nie jest const auto_ptr& auto_ptr() { delete p_; } //usuwa obiekt wskazywany T& operator*() { return *p_; } T* operator->() const { return p_; } private: T* p_; };

std::auto_ptr - przykłady #include <memory> using namespace std; class Foo { /* implementacja */ }; //funkcja zwraca wskaźnik na obiekt auto_ptr<foo> createfoo(int n) { return auto_ptr<foo>(new Foo(n) ); } { auto_ptr<foo> p(new Foo(1) ); /* tutaj wykorzystuje obiekt klasy */ }//automatycznie wolany destruktor createfoo(2); //nie wykorzystana wartość zwracana zostanie usunięta { auto_ptr<foo> v = createfoo(3); /* wykorzystanie obiektu v */ }//destruktor zwalnia zasob

std::auto_ptr niebezpieczeństwa #include <memory> using namespace std; class Foo { /* implementacja */ }; //Niebezpieczne! użycie auto_ptr jako argumentu void read(auto_ptr<foo> p) { /* wykorzystuje */ } { auto_ptr<foo> x = createfoo(4); read(x); //teraz x nie wskazuje na nic! } //Niebezpieczne! użycie auto_ptr w kolekcji vector<auto_ptr<foo> > v;

boost::shared_ptr - sprytny wskaźnik shared_ptr counter object konstruktor : tworzy licznik i inicjuje go na 1 konstruktor kopiujący: zwiększa licznik odniesień destruktor: zmniejsza licznik odniesień, jeżeli ma on wartość 0 to kasuje obiekt

sprytny wskaźnik - przykład p1 counter 1 #include <boost/shared_ptr.hpp> using namespace boost; class Foo { /* implementacja */ }; { shared_ptr<foo> p1(new Foo(1) ); { shared_ptr<foo> p2(p1); //licznik odniesien == 2 /*... */ } //destruktor p2, licznik = 1 } //destruktor p1 usuwa obiekt p1 p2 p1 object counter 2 object counter object 1

sprytny wskaźnik - przykład 2 #include <boost/shared_ptr.hpp> using namespace boost; class Foo { /* implementacja */ }; //funkcja zwraca wskaźnik na obiekt shared_ptr<foo> createfoo(int n) { return shared_ptr<foo>(new Foo(n) ); } { shared_ptr<foo> p2 = createfoo(2); }//destruktor zwalnia zasob p1 p1 p2 p2 counter 1 object counter 2 object counter object 1

Sprytny wskaźnik boost::shared_ptr zalety wady

- podsumowanie std::auto_ptr boost::shared_ptr boost::weak_ptr boost::intrusive_ptr

wstęp Zasady extreme programming podsumowanie Model wodospadowy Wodospadowy ( tradycyjny ) model tworzenia oprogramowania: 1. analiza, 2. projektowanie, Koszt 3. implementacja, 4. testowanie, 5. wdrożenie, 6. pielęgnacja. Wady: duże ryzyko niepowodzenia projektu, długi czas sprzężenia zwrotnego. Przyczyny: Czas wykładniczy (względem czasu) wzrost kosztów zmian w projekcie.

wstęp Zasady extreme programming podsumowanie Extreme programming Możliwości uzyskania innej krzywej kosztu zmian w czasie: prostota projektu, automatyczne testy, nastawienie na ciągłe zmiany w projekcie, polepszenie komunikacji. Właściwości: krótki czas sprzężenia zwrotnego, Koszt mniejsze ryzyko niepowodzenia projektu. Czas

wstęp Zasady extreme programming podsumowanie Zmniejszenie ryzyka niepowodzenia projektu dobrze sprecyzowany cel projektu, krótkie wersje, planowanie krótkofalowe, ciągła weryfikacja założeń.

wstęp Zasady extreme programming podsumowanie Zmniejszenie kosztów zmian Utrzymywanie działającej wersji przez cały czas: automatyczne testowanie: modułów, funkcjonalne. ciągła integracja. Utrzymywanie kodów źródłowych dobrej jakości zmiana struktury programu bez zmiany funkcjonalności (refactoring) przegląd kodu. Poprawa komunikacji: kolektywne prawo do zmian kodu, stosowanie narzędzi zarządzających wersjami.

wstęp Zasady extreme programming podsumowanie Sterowanie projektem koszt, czas, jakość, zakres.

wstęp Zasady extreme programming podsumowanie Podsumowanie Zasady XP: krótkie cykle oprogramowania, nieustanne testowanie, natychmiastowa integracja, brak szczegółowego projektu, brak szczegółowego planu.