Inżynieria oprogramowania Wzorce konstrukcyjne WWW: Jacek Matulewski Instytut Fizyki, UMK.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 9 ( ) Szablony.
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
C++ wykład 4 ( ) Przeciążanie operatorów.
Klasy abstrakcyjne i interfejsy
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Programowanie obiektowe
Programowanie obiektowe
Klasy i obiekty.
Wzorce.
Zaawansowane metody programowania – Wykład V
Programowanie w środowisku sieciowym
Programowanie Obiektowe w Javie (c.d.)
Programowanie obiektowe w Javie
OOP - programowanie zorientowane obiektowo w VB.NET
W ZORCE P ROJEKTOWE … czyli ktoś już rozwiązał Twoje problemy!
Obiektowe metody projektowania systemów
Obiektowe metody projektowania systemów
C++ wykład 2 ( ) Klasy i obiekty.
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
Wzorce projektowe (Design Patterns)
Podstawy programowania II
T: Różnice pomiędzy programowaniem strukturalnym a obiektowym
Wprowadzenie do obsługi programu PowerPoint
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Maciek Mięczakowski
Inicjalizacja i sprzątanie
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.
Projektowanie obiektowe
Projektowanie obiektowe
Farseer Physics Engine. Farseer Physics Engine jest silnikiem fizycznym napisanym dla platformy.NET. Został on zainspirowany przez silnik Box2D znany.
Programowanie obiektowe 2013/2014
Zawansowane techniki programistyczne
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
Prasek Aneta, Skiba Katarzyna. Funkcje stałe const to takie funkcje, które nie mogą modyfikować stanu obiektu. Oznacza to, że funkcja stała nie może zmieniać.
Programowanie w języku C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
K URS JĘZYKA C++ – WYKŁAD 10 ( ) Szablony.
Programowanie strukturalne i obiektowe C++
Wzorce projektowe Jacek Matulewski
Diagram klas Kluczowymi elementami są: klasy (class)
Kurs języka C++ – wykład 4 ( )
Zakres Wzorce projektowe ( -Adapter (str , wykład wzorce projektowe.
Obiektowe metody projektowania systemów Abstract Factory design pattern (aka. Kit)
Zakres Wzorce projektowe - kreacyjne -Factory Method -Abstract Factory.
Paweł Starzyk Obiektowe metody projektowania systemów
Wzorce Projektowe w JAVA
Programowanie Zaawansowane
Dziedziczenie Wykład 7 Dziedziczenie sekwencyjne
Wykład 4 Programowanie obiektowe. Tworzenie własnych obiektów Słowo kluczowe this W JavaScript można tworzyć własne obiekty. Wykorzystuje się tu zapis.
Partnerstwo dla Przyszłości 1 Lekcja 27 Klasy i obiekty.
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Wzorce projektowe w C++ WWW: Jacek Matulewski Instytut Fizyki, UMK WWW:
Inżynieria oprogramowania Wzorce strukturalne WWW: Jacek Matulewski Instytut Fizyki, UMK.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Programowanie Obiektowe – Wykład 6
Inżynieria oprogramowania Wzorce projektowe
Typy wyliczeniowe, kolekcje
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
(według:
Inżynieria oprogramowania Wzorzec architekt. MVC
Programowanie Obiektowe – Wykład 2
Aplikacje i usługi internetowe
PGO Interfejsy Michail Mokkas.
PGO - Projektowanie i implementacja pierwszych klas
PGO Przeciążanie metod i konstruktorów
Zapis prezentacji:

Inżynieria oprogramowania Wzorce konstrukcyjne WWW: Jacek Matulewski Instytut Fizyki, UMK WWW: semestr letni 2016

Główna lektura 1 Głównym materiałem źródłowym jest książka tzw. gangu czworga pt. „Wzorce projektowe”.

Główna lektura 1 Głównym materiałem źródłowym jest książka tzw. gangu czworga pt. „Wzorce projektowe”.

Główna lektura 2 Dodatkowo wykorzystamy adaptacje do C# wzorców G4 opisane w książce S. J. Metskera

Wzorce konstrukcyjne Wzorce pozwalające oddzielić proces tworzenia instancji obiektów od jego definicji: Budowniczy (Builder) Fabryka abstrakcyjna (Abstract Factory) Metoda wytwórcza (Factory Method) Prototyp (Prototype) Singleton (Singleton)

Budowniczy (Builder) Założenia: Model posiada klasę organizującą ( Labirynt ) oraz kilka klas dodatkowych ( Komórka, Ściana, itd.) Cel: 1. Wydzielenie kodu służącego do budowy złożonego produktu (u nas obiektu modelu) z jego klasy 2. Przesłonięcie szczegółów implementacji modelu (tzw. reprezentacji wewnętrznej). 3. Korzystanie z różnych budowniczych prowadzi do tworzenia różnych produktów bez zmiany kodu funkcji tworzącej i zasadniczej struktury produktu

Budowniczy (Builder) Implementacja: Do modelu dodana zostaje klasa służąca tylko do stopniowego budowania złożonej instancji głównej klasy modelu. Po zmianach ważne będą już tylko dwie klasy modelu: Labirynt i BudowniczyLabiryntu Nazwy używane w kontekście tego wzorca: Kontroler – Director, kierownik BudowniczyLabiryntu – Builder, budowniczy StdBudowniczyLabiryntu – Concrete Builder Labirynt – Product, produkt

Budowniczy (Builder)

Budowniczy (Builder)

Budowniczy (Builder) Zadania domowe (1) i konkursy (2, 3): 1.Przygotować budowniczego labiryntu, który zamiast tworzyć labirynt jedynie liczy komórki i drzwi, a na końcu wyświetla uzyskane liczby. 2.Ukryj w przestrzeni klasy tworzące tzw. wewnętrzną reprezentację (klasy inne niż Labirynt i klasę zawierającą budowniczego). 3.Przygotować budowniczego dla labiryntu złożonego z foremnych trójkątów na zamkniętym pasie. Użyć PBC w jednym kierunku (konkurs).

Metoda wytwórcza (Factory method) Założenia: W odróżnieniu od budowniczego chcemy zmieniać nie zawartość złożonego produktu, a móc wybierać między różnymi klasami produktu Cel: 1. Interfejs do tworzenia różnych produktów (ale bez tworzenia nowej klasy wytwórcy) 2. Możliwość rozszerzania o nowe typy produktów 3. Stworzenie wiele „wirtualnych konstruktorów” dla szczegółowych klas modelu

Metoda wytwórcza (Factory method) Implementacja: W klasie kontrolującej aplikację (u nas w kontrolerze) stworzymy metody tworzące elementy labiryntu i sam labirynt. Klasa zawierająca metody – Wytwórca. Można tworzyć klasy potomne Wytwórcy/Kontrolera zmieniając zasady gry i modyfikując elementy labiryntu Nazwy używane w kontekście tego wzorca: Kontroler – Creator, wytwórca StandardowyKontroler – Concrete creator Labirynt - Product StandardowyLabirynt – Concrete product

Metoda wytwórcza (Factory method)

Fabryka abstrakcyjna (Abstract factory) Założenia: W odróżnieniu od budowniczego chcemy zmieniać nie zawartość złożonego produktu, a móc wybierać między różnymi klasami produktu (= metoda wytw.) Cel: 1. Zebranie metod wytwórczych dla rodziny produktu w jednej klasie (często singletonie) 2. Stworzenie interfejsu do tworzenia obiektów (fabryka abstrakcyjna) z możliwością jej nadpisywania w fabryce konkretnej

Fabryka abstrakcyjna (Abstract factory) Implementacja: Tworzymy nową klasę zawierającą zbiór metod wytwórczych tworzących poszczególne elementy labiryntu Nazwy używane w kontekście tego wzorca: FabrykaLabiryntu – Abstract factory StandardowaFabrykaLabiryntu – Concrete factory, fabryka konkretna Labirynt – Abstract product StandardowyLabirynt – Concrete product Kontroler – Client

Fabryka abstrakcyjna (Abstract factory)

Singleton (Singleton) Założenia: Możliwe jest utworzenie tylko jednej instancji klasy Implementacja: Stworzymy klasę potomną fabryki abstrakcyjnej, która będzie przechowywała prototypy i zwracała ich kopie na żądanie

Singleton (Singleton) Prywatna instancja klasy Ukryty (chroniony) konstruktor Metoda pozwalająca na pobranie jednej, przechowywanej instancji Inny sposób implementacji: klasa zawierająca wyłącznie statyczne pola i metody

Singleton (Singleton) Przykładowy kod C++: #pragma once class Singleton { private: static Singleton* instancja; protected: Singleton() {}; //ukryty konstruktor public: static Singleton* PobierzInstancję() { if (instancja == 0) //lazy initialization instancja = new Singleton(); return instancja; } };

Singleton (Singleton) Przykładowy kod C#: class Singleton { private static Singleton instancja; protected Singleton() {}; //ukryty konstruktor public static Singleton Instancja { get { if (instancja == null) //lazy initialization instancja = new Singleton(); return instancja; } };

Singleton (Singleton) Przykładowy kod C# (w wielu wątkach): class Singleton { private static lockObject = typeof(Singleton); private static Singleton instancja; protected Singleton() {}; //ukryty konstruktor public static Singleton Instancja { get { lock(lockObject) { if (instancja == null) //lazy initialization instancja = new Singleton(); return instancja; }

Singleton (Singleton) Problemy: Wzorzec krytykowany za - odmiana zmiennych globalnych - kontrolę tworzenia i cyklu życia - powoduje „ciasne” wiązania w kodzie Singleton vs dziedziczenie Zadanie domowe (1) i konkursy (2): 1.Zmodyfikować wzorzec Singletonu w taki sposób, aby możliwe było tworzenie N instancji 2.Znaleźć sposób, aby uniemożliwić niezależne tworzenie klas potomnych (C#: modyfikator sealed )

Prototyp (Prototype) Założenia: Fabryka, która kopiuje przechowywane wzorcowe instancje produktów, czyli prototypy Konsekwencje: 1. Produkty muszą mieć możliwość klonowania (konstruktor copy i/lub metoda Clone) 2. Inicjowanie stanu klonów już po ich utworzeniu (a więc nie przez konstruktor!) 3. Można zmieniać produkt w trakcie działania programu (wystarczy podmienić prototyp)

Prototyp (Prototype) Implementacja: Stworzymy alternatywną fabrykę abstrakcyjną, przechowującą prototypy i zwracającą ich kopie na żądanie Nazwy używane w kontekście tego wzorca: MiejsceWLabiryncie – Prototype, prototyp (deklaruje metodę Klonuj ) Komórka, Ściana, Drzwi – Concrete prototype, produkt konkretny (definiują metodę Klonuj ) FabrykaLabiryntuZPrototypami – Client (przechowuje instancje prototypów i je klonuje)

Prototyp (Prototype)

Prototyp (Prototype) Zadanie domowe (1) i konkurs (2): 1.Rozszerzyć fabrykę o prototyp labiryntu 2.Zmienić kod fabryki tak, żeby przechowywała dowolną tablicę prototypów

Wzorce konstrukcyjne - zadania 1.Poprzez refaktoryzację doprowadź projekt 'Wąż' do architektury MVC. 2.W aplikacji Windows Forms lub WPF zdefiniować metodę wytwórczą, która będzie tworzyła przycisk, umieszczała go w zadanym miejscu formy lub panelu i zmieniała jego kolor na podany w argumencie. Kliknięcie przycisku powinno powodować zmianę koloru przycisku na czarny. 3.Zdefiniuj metodę wytwórczą, która buduje zielono-czerwoną szachownicę o podanym w argumencie rozmiarze, w której klikanie przycisków powoduje zmianę ich koloru na czarny. 4.Stwórz fabrykę abstrakcyjną, która buduje szachownicę. Kolory będą podane w fabryce konkretnej. 5.Zmień fabrykę w fabrykę z prototypami, w której wzorzec przycisku (bez koloru) podawany jest przez argument konstruktora.