Zaawansowane programowanie w C++ (PCP)

Podobne dokumenty
Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP)

Wzorce projektowe. dr inż. Marcin Pietroo

Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Programowanie obiektowe

Technologia Programowania 2016/2017 Wykład 4

Wzorce projektowe cz. I. Wzorce projektowe cz. I 1/33

Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1)

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński

Testowanie oprogramowania Wzorce projektowe

Dziedziczenie jednobazowe, poliformizm

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

problem w określonym kontekście siły istotę jego rozwiązania

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)

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

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

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

Programowanie obiektowe i zdarzeniowe

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

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

Programowanie w języku Java WYKŁAD

Programowanie obiektowe

Materiały do zajęć VII

PARADYGMATY PROGRAMOWANIA Wykład 4

Projektowanie obiektowe Wzorce projektowe

Programowanie Obiektowe i C++

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

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

Język C++ Programowanie obiektowe

Wzorce projektowe. dr inż. Marcin Pietroo

Zaawansowane programowanie obiektowe - wykład 5

Wzorce projektowe Michał Węgorek

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

Technologia Programowania 2016/2017 Wykład 5

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

Wypożyczalnia VIDEO. Technologie obiektowe

Programowanie obiektowe

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

Programowanie obiektowe

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Wykład 9: Polimorfizm i klasy wirtualne

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

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

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017

Podstawy Programowania Obiektowego

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

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Zaawansowane programowanie w C++ (PCP)

Dziedziczenie. Ogólna postać dziedziczenia klas:

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015

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

10. Programowanie obiektowe w PHP5

Programowanie obiektowe w języku

Enkapsulacja, dziedziczenie, polimorfizm

dr inż. Jarosław Forenc

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

Wzorce projektowe. dr inż. Marcin Pietroo

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

TEMAT : KLASY DZIEDZICZENIE

Zaawansowane programowanie w C++ (PCP)

Kurs WWW. Paweł Rajba.

Programowanie obiektowe - 1.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

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

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

Spis treści. Wprowadzenie 15

C++ - [4-7] Polimorfizm

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

Wykład 8: klasy cz. 4

Programowanie obiektowe

Programowanie obiektowe

PARADYGMATY PROGRAMOWANIA Wykład 2

Wprowadzenie do programowanie obiektowego w języku C++

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

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

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

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

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

Technologie i usługi internetowe cz. 2

Polimorfizm. dr Jarosław Skaruz

PARADYGMATY PROGRAMOWANIA Wykład 3

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Konstruktor kopiujacy

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

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.

PHP 5 język obiektowy

Programowanie Obiektowe i C++

Zaawansowane programowanie w C++ (PCP)

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wykład 6: Dziedziczenie

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce odpowiedzialności

Transkrypt:

Zaawansowane programowanie w C++ (PCP) Wykład 4 - wzorce projektowe. dr inż. Robert Nowak - p. 1/18

Powtórzenie klasy autonomiczne tworzenie nowych typów: dziedziczenie i agregacja dziedziczenie: przedefiniowywanie metod, problem przycinania, zasłanianie problem typu dla klas w hierarchii funkcje wirtualne wirtualny destruktor - p. 2/18

Powtórzenie (2) Zalety podejścia obiektowego: klasy autonomiczne enkapsulacja (ochrona składowych) konstrukcja i destrukcja polimorfizm umożliwia definiowanie ogólnych cech pokrewnych typów; można pisać ogólne funkcje działajace dla wszystkich pochodnych pewnej klasy bazowej; elastyczny system typów: można dodawać nowe typy bez modyfikacji już istniejacego kodu; - p. 3/18

Klasy abstrakcyjne klasy, które maja sens jedynie jako klasa bazowa nie ma sensownej implementacji metod wirtualnych reprezentuje abstrakcyjne pojęcie class Figura { virtual void rysuj() = 0;//Funkcja czysto wirtualna kompilator nie dopuszcza do tworzenia obiektów takich klas wykrywany bład obcinania już na etapie kompilacji! nie musi dostarczać konstruktorów klasa interfejsu - klasa abstrakcyjna, która nie przechowuje stanu. - p. 4/18

Właściwości klasy bazowej Klasa wartość (klasa autonomiczna): brak metod wirtualnych konstruktor, konstruktor kopiujacy, operator przypisania, destruktor najczęściej obiekt automatyczny lub składowa klasy przekazywany przez wartość lub stała referencję Klasa bazowa dla hierarchii klas: używa metod wirtualnych, powinna mieć wirtualny destruktor najlepiej gdy abstrakcyjna albo prywatny konstruktor kopiujacy i operator przypisania (zapobiega wycinaniu) najczęściej obiekt na stercie przekazywana przez wskaźnik lub referencję - p. 5/18

Metody wirtualne a Mechanizm funkcji wirtualnych nie działa w konstruktorach i destruktorach. class Base { Base(){ f(); } virtual void f(){ i=1; } protected: int i; class Derived { Derived() : Base() { } virtual void f(){ i=2; } Derived d; //Jaka jest wartość składowej i? Base& b = d; b.f(); //Jaka jest wartość składowej i? - p. 6/18

Dziedziczenie prywatne i class D: public B {... //Dziedziczenie publiczne class D: protected B {... //Dziedziczenie class D: private B {... //Dziedziczenie prywatne Ochrona dla różnych rodzajów dziedziczenia: rodzaj Dostęp do publiczne prywatne składowych publicznych B wszystkie funkcje składowych protected B metody D oraz klas pochodnych po D konwersji D* B* wszystkie funkcje metody D oraz klas pochodnych po D metody D - p. 7/18

» (2) (2) standardowe rozwiazania często pojawiajacych się problemów projektowych sprawdzone w praktyce najczęściej dotycza programowania obiektowego znajomość wzorców projektowych pozwala lepiej zrozumieć obiektowe podejście do programowania - p. 8/18

Wzorzec singletonu Obiekt globalny (problemy): inicjalizacja, dostęp, jedna kopia w programie.» (2) (2) class Singleton { static Singleton& getinstance() { static Singleton instance; //lokalna zmienna statyczn return instance; } /* pozostałe metody */ private: //Prywatne Singleton() { /* inicjacja składowych */ } Singleton(const Singleton&); /* pozostałe składowe */ - p. 9/18

Wzorzec prototypu (metoda» (2) (2) Kopiowanie bez znajomości typu oraz bez wycinania Wzorzec prototypu: odpowiedzialność przeniesiona na obiekty pochodne wykorzystanie mechanizmu funkcji wirtualnej class Base { virtual Base* clone() = 0;//tworzy kopie danego obiektu private: Base(const Base&);//Zabroniony konstruktor kopiujący class Derived : public Base { virtual Base* clone(){ //Tutaj już wie, jaki typ kopiować! return new Derived(*this); } - p. 10/18

Wzorzec kompozycji reprezentacja drzewiastych struktur obiektów traktowanie w ten sam sposób obiektów prostych i złożonych łatwo dodawać nowe klasy do hierarchii» (2) (2) klient ProstyA ProstyB Komponent + operacja() + dodaj(komponent*) + usun(komponent*) + dajdziecko(index) Złożony + operacja() + operacja() + operacja() + dodaj(komponent*) + usun(komponent*) + dajdziecko(index) - p. 11/18

Kompozycja - przykład» (2) (2) class Figura { virtual void draw() = 0; virtual Figura(){} class Okrag : public Figura { //rysuje okrąg virtual void draw(); okrag zlozona zlozona trojkat trojkat trojkat class Zlozona : public Figura { //dla każdego dziecka wywołuje metodę draw virtual void draw(); private: std::vector<figura*> dzieci; - p. 12/18

Wzorzec obserwatora» (2) (2) zmiana stanu jednego obiektu wymaga zmiany innych obiekt powiadamia o zmianie stanu nie zakładajac niczego o obiektach, które sa powiadamiane ObserwowanyKonkretny + dajstan() Obserwowany + dodaj(obserwator*) + usun(obserwator*) + powiadom() Obserwator + odswierz() ObserwatorKonkretny + odswierz() - p. 13/18

Wzorzec obserwatora (2)» (2) (2) //Abstrakcyjny obserwator class Observer { virtual void update() = 0; virtual Observer(){} //Abstrakcyjny cel obserwacji class Subject { void add(observer* o){ observers_.push_back(o); } void notify(){ /* wywolaj o->update() dla wszystkich */ } virtual Subject() = 0; private: std::vector<observer*> observers_; //Czysto wirtualny destruktor także musi być zaimplementowany! Subject:: Subject(){} - p. 14/18

Wzorzec wizytatora ustalona hierarchia klas wiele metod, metody moga się zmieniać» Wizytator + wizytuj(elementa*) + wizytuj(elementb*) + wizytuj(elementc*) Hierarchia klas Element + accept(visitor) (2) KonkretnyWizytator1 + wizytuj(elementa*) + wizytuj(elementb*) + wizytuj(elementc*) KonkretnyWizytator2 + wizytuj(elementa*) + wizytuj(elementb*) + wizytuj(elementc*) ElementA + accept(visitor) ElementB + accept(visitor) ElementC + accept(visitor) (2) - p. 15/18

Wizytator (2)» (2) (2) class Visitor;//Deklaracja class Element { //Klasa bazowa virtual void accept(visitor& v) = 0; /* Deklaracje konkretnych elementów */ class Visitor { //Abstrakcyjny wizytator virtual void visit(elementa&) = 0; virtual void visit(elementb&) = 0; virtual void visit(elementc&) = 0; class ElementA : public Element { virtual void accept(visitator& v) { v.visit(*this);//woła metodę visit(elementa&) } //Dalsza część implementacji klasy ElementA - p. 16/18

-» (2) (2) wzorce kreacyjne fabryka abstrakcyjna (abstract factory) prototyp (prototype) singleton (singleton) wzorce strukturalne adapter (wrapper) fasada (fasade) most (bridge) proxy (proxy) kompozyt (composite) wzorce czynnościowe iterator (iterator) polecenie (command) odwiedzajacy (visitor) obserwator (observer) interpreter (interpreter) strategia (strategy) stan (state) - p. 17/18

- (2) E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Wzorce projektowe, WNT, 2005.» (2) (2) - p. 18/18