Paweł Starzyk Obiektowe metody projektowania systemów

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

C++ wykład 4 ( ) Przeciążanie operatorów.
Wzorce Projektowe Bartosz Baliś, Na podstawie
Klasa listy jednokierunkowej Przekazywanie parametrów do funkcji
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 4 Wojciech Pieprzyca.
Standardowa biblioteka języka C++
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas. 2 Wzorce Często pojawia się konieczność pisania podobnych funkcji lub klas operujących na argumentach.
Programowanie obiektowe
Programowanie obiektowe
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne.
Programowanie obiektowe PO PO - LAB 3 Wojciech Pieprzyca.
Klasy i obiekty.
Wzorce.
Zaawansowane metody programowania – Wykład V
Static, const, volatile.
Obiektowe metody projektowania systemów Design Patterns STRATEGY.
Bezpieczeństwo wyjątków w C++: OpenGL
Implementacja ekstensji klasy
Budowa i integracja systemów informacyjnych
Programowanie obiektowe w Javie
Szablony (wzorce) Przykład 1: Szablon klasy -
OOPC++ - wstêp, klasy1 Klasy Do struktury można dołączyć operacje działające na jej polach. struct date { int day, month, year; void set (int d, int m,
Licznik template<class Count_Type> class Count { public:
W ZORCE P ROJEKTOWE … czyli ktoś już rozwiązał Twoje problemy!
Obiektowe metody projektowania systemów
Obiektowe metody projektowania systemów
Obiektowe metody projektowania systemów Command Pattern.
C++ wykład 2 ( ) Klasy i obiekty.
Języki programowania obiektowego
Język Java Wielowątkowość.
czyli (anty)wzorzec Singleton
czyli (anty)wzorzec Singleton
Wzorce projektowe (Design Patterns)
Test Doubles Adam Gabryś , v1.1,
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Podstawy programowania II
Projektowanie obiektowe
Zadanie Dev C++.
Przekazywanie argumentów
Programowanie strukturalne i obiektowe
Java – coś na temat Klas Piotr Rosik
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Programowanie obiektowe 2013/2014
Programowanie w języku C++
Programowanie strukturalne i obiektowe C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++ Przeładowanie operatorów Robert Nowak.
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
Obiektowe metody projektowania systemów The Composite DESIGN PATTERN.
Obiektowe metody projektowania systemów Adapter. Wstęp: „Dostosowanie interfejsu klasy do interfejsu, którego oczekuje użytkownik. Adapter umożliwia współprace.
Obiektowe metody projektowania systemów Abstract Factory design pattern (aka. Kit)
Wzorce Projektowe w JAVA
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Wykład 2 Klasa Zesp i jej hermetyzacja 1.Przykład definicji klasy Zesp 2.Zmiana definicji klasy 3.Zmienne i funkcje statyczne PO2-1 / 28.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Inżynieria oprogramowania Wzorce konstrukcyjne WWW: Jacek Matulewski Instytut Fizyki, UMK.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Wątki, programowanie współbieżne
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
PGO - Projektowanie i implementacja pierwszych klas
Zapis prezentacji:

Paweł Starzyk Obiektowe metody projektowania systemów Design Pattern - Singleton Paweł Starzyk Obiektowe metody projektowania systemów

Paweł Starzyk Obiektowe metody projektowania systemów Plan prezentacji Czym jest singleton i jak pracuje? Jaka jest jego struktura? Implementacja w C++ Przykłady zastosowania singletonu Singleton w aplikacjach wielowątkowych Wady i Zalety Bibliografia Paweł Starzyk Obiektowe metody projektowania systemów

Paweł Starzyk Obiektowe metody projektowania systemów Czym jest singleton? Intencja singletonu wg Bandy Czworga: „Zapewnienie, że klasa posiada tylko jedną instancję oraz dostarczenie globalnego punktu dostępu do tej instancji”. Paweł Starzyk Obiektowe metody projektowania systemów

Paweł Starzyk Obiektowe metody projektowania systemów Jak singleton pracuje? Specjalna metoda sprawdza czy obiekt został już utworzony Tworzy instancję i zwraca do niej referencję Zwraca referencję do wcześniej utworzonej instancji Konstruktor deklaruje się jako metodę o dostępie chronionym lub prywatnym (aby zapewnić, że wywołanie tej metody jest jedynym sposobem utworzenia obiektu) Paweł Starzyk Obiektowe metody projektowania systemów

Zadanie wzorca singletonu: Umożliwia utworzenie dokładnie jednej instancji danej klasy i nie wymaga od obiektów użytkownika, by „wiedziały”, czy instancja ta została już utworzona Paweł Starzyk Obiektowe metody projektowania systemów

Paweł Starzyk Obiektowe metody projektowania systemów Struktura singletonu Użytkownik tworzy instancję singletonu wyłącznie za pomocą metody pobierzInstancje Konstruktor deklarujemy jako metodę o dostępie prywatnym aby nie można się było nim posłużyć do utworzenia większej liczby instancji przez jego bezpośrednie wywołanie Paweł Starzyk Obiektowe metody projektowania systemów

Implementacja klasy w C++ class Singleton { public: static Singleton* Instance(); protected: Singleton(); private: static Singleton* _instance; }; Singleton* Singleton::_instance = 0 ; Singleton* Singleton::Instance () { if (_instance == 0) { instance = new Singleton; } return _instance; Paweł Starzyk Obiektowe metody projektowania systemów

Singleton jako Template template <class TYPE> class Singleton { public: // Global access point static TYPE *instance (void); protected: // Default constructor. Singleton (void); // Contained instance. TYPE instance_; }; Paweł Starzyk Obiektowe metody projektowania systemów

Singleton jako Template template <class TYPE> TYPE * Singleton::instance_ = 0; TYPE * Singleton::instance (void) { if (Singleton<TYPE>::instance_ == 0) { Singleton<TYPE>::instance_ = new Singleton<TYPE>; } return Singleton<TYPE>::instance_; }; Paweł Starzyk Obiektowe metody projektowania systemów

Przykład zastosowania singletonu Paweł Starzyk Obiektowe metody projektowania systemów

Paweł Starzyk Obiektowe metody projektowania systemów Przykładowy kod #include <iostream> using namespace std; class Singleton { private: static Singleton *single; Singleton() {} // default constructor Singleton(const Singleton& s) {} // copy constructor public: static Singleton* getInstance(); // The interface of the class. void method(); }; Paweł Starzyk Obiektowe metody projektowania systemów

Paweł Starzyk Obiektowe metody projektowania systemów cd przykładowy kod Singleton* Singleton::single = NULL; Singleton* Singleton::getInstance() { if(single == NULL) single = new Singleton; return single; } else void Singleton::method() cout << "Method of the singleton class" << endl; Paweł Starzyk Obiektowe metody projektowania systemów

Paweł Starzyk Obiektowe metody projektowania systemów Cd przykładowy kod int main() { Singleton *sc1,*sc2, *sc3; sc1 = Singleton::getInstance(); sc1->method(); sc2 = Singleton::getInstance(); sc2->method(); sc3 = Singleton::getInstance(); sc3->method(); if (sc1 == sc2) cout<<"OK. The same pointer"<<endl; else cout<<"Not the same !!!"<<endl; if (sc1 == sc3) return 0; } Paweł Starzyk Obiektowe metody projektowania systemów

A gdy aplikacja jest wielowątkowa? Dwa wątki wywołują pobierzInstancje w tym samym czasie Pierwszy z wątków sprawdza że instancja nie istnieje i wykonuje kod związany z jej utworzeniem Drugi wątek sprawdza, czy referencja do instancji klasy jest pusta a że pierwszy wątek jeszcze nie utworzył obiektu, to wykonuje kod związany z utworzeniem instancji W obu wątkach zostają utworzone osobne instancje klasy Paweł Starzyk Obiektowe metody projektowania systemów

…co powoduje niepożądane efekty Stały ubytek wolnej pamięci (usuwana tylko jedna instancja) Błędy trudne do odnalezienia jeśli obiekt singletonu charakteryzuje się określonym stanem Paweł Starzyk Obiektowe metody projektowania systemów

Rozwiązanie to wzorzec blokowania dwufazowego Sprawdzenie warunku istnienia singletonu Synchronizacja operacji Powtórne sprawdzenie czy obiekt nie został utworzony Paweł Starzyk Obiektowe metody projektowania systemów

Paweł Starzyk Obiektowe metody projektowania systemów Prostsze rozwiązanie Gdy jesteśmy pewni, iż w naszym programie będzie nam potrzebny obiekt danej klasy to zamiast stosować wzorzec singletonu możemy w klasie umieścić zmienną statyczną przechowującą referencję do obiektu Paweł Starzyk Obiektowe metody projektowania systemów

Paweł Starzyk Obiektowe metody projektowania systemów Wady i Zalety Co gdy aplikacja jest wielowątkowa? Oszczędność miejsca na dysku Kontrola dostępu do instancji Operacje są bardziej przejrzyste Łatwość zmieniania liczby instancji Paweł Starzyk Obiektowe metody projektowania systemów

Paweł Starzyk Obiektowe metody projektowania systemów Bibliografia „Design Patterns. Elements of Reusable Object-Oriented Software ” – E. Gamma, R. Helm, R. Johnson, J. Vlissides „DESIGN PATTERNS EXPLAINED, new perspective on obiect-oriented design ” – A. Shalloway, J. R. Trott „Wzorce projektowe” – A. Shalloway, J. R. Trott http://gethelp.devx.com/techtips/cpp_pro/10min/10min0200.asp http://binboy.sphere.pl/index.php?show=serwis&d=qtportal&s=l13.html http://www.e-informatyka.pl/article/show-bw/473#d0e92 http://www.math.tau.ac.il/~estere/OOP_Spring2005/Tr5/singleton.cpp Paweł Starzyk Obiektowe metody projektowania systemów