W ZORCE P ROJEKTOWE … czyli ktoś już rozwiązał Twoje problemy!

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.
Związki w UML.
Programowanie obiektowe
Wzorce.
Zaawansowane metody programowania – Wykład V
Obiektowe metody projektowania systemów Design Patterns STRATEGY.
Programowanie w środowisku sieciowym
Nguyen Hung Son Uniwersytet Warszawski
Programowanie obiektowe w Javie
Co UML może zrobić dla Twojego projektu?
Obiektowe metody projektowania systemów
Obiektowe metody projektowania systemów
Obiektowe metody projektowania systemów Command Pattern.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Wstęp do programowania obiektowego
Projektowanie i programowanie obiektowe II - Wykład IV
Język Java Wielowątkowość.
Projektowanie - wprowadzenie
czyli (anty)wzorzec Singleton
Wzorce projektowe (Design Patterns)
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
UML 2.x Robert Pająk.
Podstawy programowania II
T: Różnice pomiędzy programowaniem strukturalnym a obiektowym
Programowanie strukturalne i obiektowe
Jakub Wołczko W obiektowym świecie… Jakub Wołczko
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Maciek Mięczakowski
Inicjalizacja i sprzątanie
Seminarium problemowe
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
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
OCPJP Inner classes.
Programowanie w języku C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Diagram klas Kluczowymi elementami są: klasy (class)
Kurs języka C++ – wykład 4 ( )
Diagram klas Diagramy klas służą do obrazowania statycznych aspektów projektowanych systemów jako: Projekt struktury logicznej baz danych Projekt składników.
Projektowanie obiektowe. Przykład: Punktem wyjścia w obiektowym tworzeniu systemu informacyjnego jest zawsze pewien model biznesowy. Przykład: Diagram.
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.
Projektowanie bazy danych z użyciem diagramów UML Obiektowe projektowanie relacyjnej bazy danych Paweł Jarecki.
Paweł Starzyk Obiektowe metody projektowania systemów
Wzorce Projektowe w JAVA
Programowanie Zaawansowane
Partnerstwo dla Przyszłości 1 Lekcja 27 Klasy i obiekty.
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
Inżynieria oprogramowania Wzorce konstrukcyjne WWW: Jacek Matulewski Instytut Fizyki, UMK.
Programowanie Obiektowe – Wykład 6
Wątki, programowanie współbieżne
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
(według:
Programowanie Obiektowe – Wykład 2
PGO Interfejsy Michail Mokkas.
PGO - Projektowanie i implementacja pierwszych klas
Zapis prezentacji:

W ZORCE P ROJEKTOWE … czyli ktoś już rozwiązał Twoje problemy!

Witamy w krainie wzorców projektowych (ang. Design pattern) - w inżynierii oprogramowania to uniwersalne, sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych "Każdy wzorzec opisuje problem, który ciągle pojawia się w naszej dziedzinie, a następnie określa zasadniczą część jego rozwiązania w taki sposób, by można było zastosować je nawet milion razy za każdym razem w nieco inny sposób" definicja wzorca projektowego podana przez C. Alexander, S. Ishikawa, M. Silverstein w "A Pattern Language", Nowy York, Oxford University Press, 1977

Klasyfikacja Wzorce konstrukcyjne / kreacyjne Wzorce strukturalne Wzorce operacyjne / czynnościowe / behawioralne Wzorce klasowe Wzorce obiektowe

Wzorzec projektowy od środka Nazwa wzorca – skrót najlepiej opisujący wzorzec Problem – wyjaśnia o co chodzi, kiedy stosować dany wzorzec Rozwiązanie – przedstawia rozwiązanie problemu Konsekwencje – wady i zalety wzorca

Wybrane wzorce

Obserwator jak sprawić, by Twoje obiekty były zawsze dobrze poinformowane Wzorzec Obserwator definiuje pomiędzy obiektami relację jeden–do–wielu w taki sposób, że kiedy wybrany obiekt zmienia swój stan, to wszystkie jego obiekty zależne zostają o tym powiadomione i automatycznie zaktualizowane.

Kiedy stosujemy Jakaś abstrakcja ma dwa aspekty, jeden zależny od drugiego – kapsułkowanie umożliwia niezależne zmienianie i używanie tych obiektów Zmiana jednego obiektu wymaga zmiany innych i nie wiadomo ile obiektów trzeba będzie zmienić Obiekt powinien być w stanie powiadamiać inne obiekty, gdy chcemy uniknąć ścisłego powiązania tych obiektów

Konsekwencje Abstrakcyjne powiązanie pomiędzy Podmiotem a Obserwatorem Wsparcie dla rozsyłania komunikatów Nieoczekiwane uaktualnienia

Struktura – diagram klas

Jaja towarzyszą człowiekowi od początku jego istnienia!!(wikipedia.org)

Pomysł Krzysia

Miałbym pewien pomysł, ale nie myślcie, żeby był bardzo dobry. Kubuś Puchatek

Dekorator dekorowanie zachowania obiektów Wzorzec Dekorator pozwala na dynamiczne przydzielanie danemu obiektowi nowych zachowań. Dekoratory dają elastyczność podobną do tej, jaką daje dziedziczenie, oferując jednak w zamian znacznie rozszerzoną funkcjonalność.

Kiedy stosujemy Gdy chcemy dynamicznie i nie wpływając na inne obiekty dodać zobowiązanie do pojedynczych obiektów W wypadku zobowiązań, które mogą być cofnięte Gdy rozszerzanie przez definiowanie podklas jest niepraktyczne; definicja klasy może też być ukryta lub inaczej niedostępna, jeśli chodzi o tworzenie podklas.

Konsekwencje Większa elastyczność niż przy stosowaniu statycznego dziedziczenia Unikanie przeładowanych właściwościami klas na szczycie hierarchii Dekorator i jego komponent nie są identyczne Wiele małych obiektów

Struktura – diagram klas

public abstract class Jajko { protected String opis ="Jajo"; public String pobierzOpis () { return opis; } public class JajkoKurze extends Jajko { public JajkoKurze(){ super(); opis="Jajko Kurze"; } public abstract class DekoratorJaj extends Jajko { protected Jajko jajko; public abstract String pobierzOpis();} public class DWyklejanka extends DekoratorJaj { public DWyklejanka(Jajko j){ super(); jajko = j; public String pobierzOpis() { return jajko.pobierzOpis()+", Wyklejanka"; } }}

Jak wykorzystać Dekoratora do przystrojenia jaj?? public static void main(String[] args) { Jajko mojeJajko = new JajkoKurze(); System.out.println("Zwykle jajo: " + mojeJajko.pobierzOpis()); mojeJajko = new DFarby(mojeJajko); System.out.println("To jest moje jajko: " + mojeJajko.pobierzOpis()); Jajko jajkoMojegoBrata = new JajkoStrusie(); jajkoMojegoBrata = new DWosk(jajkoMojegoBrata); System.out.println("To jest jajko mojego brata: " + jajkoMojegoBrata.pobierzOpis()); Jajko jajkoMojejSiostry = new JajkoKurze(); jajkoMojejSiostry = new DFarby(new DWosk(new DWyklejanka(jajkoMojejSiostry))); System.out.print("A to jest jajo mojeje siostry: " + jajkoMojejSiostry.pobierzOpis()); }

Singleton obiekt jedyny w swoim rodzaju Wzorzec Singleton zapewnia, że dana klasa będzie miała tylko i wyłącznie jedną instancję obiektu i zapewnia globalny punkt dostępu do tej instancji.

Kiedy stosujemy Klasa musi mieć właśnie jeden egzemplarz, dostępny dla jej klientów Powinno być możliwe rozbudowanie tego jedynego egzemplarza poprzez definiowanie podklas, a klienci powinni móc używać rozszerzonego egzemplarza bez modyfikowania swojego kodu

Konsekwencje Kontrolowany dostęp do jedynego egzemplarza Mniejsza przestrzeń nazw Możliwe udoskonalanie operacji i reprezentacji Większa elastyczność, niż w wypadku operacji klasowych

Struktura – diagram klas

Klasyczna implementacja Singleton Public class Singleton{ private static Singleton unikalnaInstancja; private Singleton() {} public static Singleton pobierzInstance(){ if(unikalnaInstncja==null){ unikalnaInstancja = new Singleton();} return unikalnaInstancja; }

Singleton - wielowątkowość Singleton jako wzorzec jest szczególnie przydatny do zastosowań wielowątkowości. UWAGA: poprzednia standardowa wersja nie będzie działała!!

Rozwiązanie I public class Smerfetka { private static Smerfetka smerfetka; private Smerfetka(){} public static synchronized Smerfetka pobierzSmerfetke() { if (smerfetka==null){ smerfetka = new Smerfetka(); } return smerfetka; }

JVM pomoże nam w dostępie do Smerfetki!!! public class Smerfetka { private static Smerfetka smerfetka = new Smerfetka(); private Smerfetka(){} public static synchronized Smerfetka pobierzSmerfetke() { return smerfetka; }

Metoda podwójnego blokowania Najpierw sprawdzamy czy instancja naszego obiektu już została utworzona; jeśli nie WTEDY uruchamiamy synchronizacje metody. W ten sposób skorzystamy z synchronizacji tylko raz, podczas tworzenia obiektu

public class Smerfetka { private volatile static Smerfetka smerfetka = new Smerfetka(); private Smerfetka(){} public static Smerfetka pobierzSmerfetke() { if(smerfetka==null){ synchronized (Smerfetka.class){ if(smerfetka==null){ smerfetka = new Smerfetka(); } return smerfetka; }

Fabryka Abstrakcyjna tworzymy rodziny produktów Wzorzec Fabryka Abstrakcyjna dostarcza interfejs do tworzenia całych rodzin spokrewnionych lub zależnych od siebie obiektów bez konieczności określania ich klas rzeczywistych.

Kiedy stosujemy System powinien być niezależny od tego, jak jego produkty są tworzone, składane i reprezentowane System powinien być konfigurowany przy użyciu jednej z wielu rodzin produktów Rodzina związanych ze sobą obiektów - produktów jest zaprojektowana tak, by te obiekty były używane razem Chcemy dostarczyć bibliotekę klas produktów, ujawniając jedynie ich interfejsy, a nieimplementacje

Konsekwencje Odseparowanie klas konkretnych Łatwiejsza wymiana rodzin produktów Spójność produktów Utrudnione dołączanie nowych rodzajów produktów

Struktura – diagram klas

Jak NIE stosować wzorców projektowych Nie należy ich wykorzystywać byle jak Powinny być stosowane tylko wtedy, kiedy zapewniana przez niego elastyczność jest rzeczywiście potrzebna

Dziękujemy za uwagę!