Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Wzorce projektowe (Design Patterns) Barbara Palacz Kraków, 25/10/2004 AGH, Informatyka II rok.

Podobne prezentacje


Prezentacja na temat: "Wzorce projektowe (Design Patterns) Barbara Palacz Kraków, 25/10/2004 AGH, Informatyka II rok."— Zapis prezentacji:

1 Wzorce projektowe (Design Patterns) Barbara Palacz Kraków, 25/10/2004 AGH, Informatyka II rok

2 Wstęp Każdy wzorzec opisuje problem, który ciągle na nowo pojawia się w naszym otoczeniu i opisuje rdzeń jego rozwiązania w taki sposób, że można go używać milion razy i nigdy w ten sam sposób. (Christopher Alexander)

3 Elementy wzorca projektowego Nazwa wzorca Odzwierciedla problem, rozwiązanie i konsekwencje danego wzorca Problem Opisuje zagadnienie i kontekst wystąpienia wzorca Rozwiązanie Opisuje elementy tworzące projekt, ich relacje, odpowiedzialności oraz współpracę Konsekwencje Rezultaty zastosowania wzorca – korzyści i straty

4 Czym jest wzorzec projektowy? Opisem komunikujących się obiektów i klas, które są specjalnie wykonane, aby rozwiązać ogólny problem przy dokładnie określonym kontekście (GangOfFour, 1994) Powracającym rozwiązaniem zagadnień projektowych, z którymi wciąż się spotykamy (Alpert, 1994) Zbiorem reguł opisujących, w jaki sposób osiągnąć pewne cele w dziedzinie programowania (Pree, 1994)

5 Katalog wzorców Przeznaczenie Konstrukcyjne (Creational) Strukturalne (Structural) Behawioralne (Behavioral) ZakresKlasa Factory MethodAdapterInterpreter Template Method Obiekt Abstract Factory Builder Prototype Singleton Adapter Bridge Composite Decorator Facade Proxy Chain of Responsibility Command Iterator Mediator Memento Flyweight Observer State Strategy Visitor

6 Klasyfikacja wzorców Konstrukcyjne (Creational) Dotyczą procesu tworzenia obiektu Strukturalne (Structural) Dotyczą struktury klas lub obiektów Behawioralne (Behavioral) Charakteryzują sposób, w jaki klasy lub obiekty oddziałują i dzielą odpowiedzialności

7 Zasady projektowania Nie staraj się zadziwić innych Rzeczy oczywiste rób w sposób oczywisty Nie rozmawiaj z nieznajomym Projekt jest skończony, jeżeli już nic więcej nie da się z niego usunąć Prostota przed ogólnością Izomorfizm: jeden obiekt abstrakcyjny – jedna klasa Unikaj powielania kodu

8 Opis wzorca projektowego Nazwa wzorca i klasyfikacja Krótko ukazuje istotę wzorca Intencja Co dany wzorzec robi? Do jakiego zagadnienia lub problemu się odnosi? Motywacja Ukazuje problem i sposób, w jaki struktury klas i obiektów go rozwiązują Stosowalność W jakich sytuacjach dany wzorzec może być wykorzystany?

9 Opis wzorca projektowego c.d. Struktura Graficzna reprezentacja klas we wzorcu Elementy Klasy i obiekty uczestniczące w strukturze wzorca, oraz ich odpowiedzialności Powiązania Jak powiązane są elementy struktury? Konsekwencje Jakie są skutki użycia danego wzorca?

10 Opis wzorca projektowego c.d. Implementacja Ogólne wskazówki i techniki programowania, o których powinniśmy wiedzieć Uwzględnienie specyfiki języka Przykładowy kod Fragmenty kodu ilustrujący przykładową implementację

11 Wzorce konstrukcyjne (Creational patterns) Fabryka (Factory Method) Fabryka Abstrakcyjna (Abstract Factory) Singleton Prototyp (Prototype) Budowniczy (Builder)

12 Wzorce konstrukcyjne Zajmują się tworzeniem instancji obiektów Uniezależniają program od obiektów, które tworzą Obudowują wiedzę na temat konkretnych klas, które nasz system używa Ukrywają sposób, w jaki instancje tych klas są kreowane Pozwalają na wprowadzenie większej elastyczności do kodu naszego programu

13 Fabryka (Factory Method) Intencja Wzorzec ten, w zależności od dostarczonych danych, zwraca instancję jednej z możliwych klas Wszystkie zwracane klasy mają zazwyczaj wspólnego przodka i wspólne metody, jednak każda z nich wykonuje swoje zadania w inny sposób Stosowalność Gdy klasa nie może przewidzieć, jakiej klasy obiekty powinna stworzyć Gdy wpływ na rodzaj tworzonego obiektu mają dane

14 Fabryka – przykładowy kod public class Osoba { public String plec; //K (kobieta) lub M (mężczyzna) public String jakaPlec() { return plec; } } public class Kobieta extends Osoba { public Kobieta() { System.out.println(Dzien dobry Pani); } } public class Mezczyzna extends Osoba { public Mezczyzna() { System.out.println(Dzien dobry Panu); } } public class Powitanie { public static void main(String[] args) { Powitanie dziendobry=new Powitanie(); dziendobry.kto(arg[0]); } public Osoba kto(String plec) { if (plec.equals(K)) return new Kobieta(); if (plec.equals(M)) return new Mezczyzna(); else return null; }

15 Fabryka – struktura, konsekwencje Struktura Konsekwencje Tworzenie obiektów w klasie z fabryką jest bardziej elastyczne niż tworzenie ich bezpośrednio Łączy logicznie klasy opisujące pojęcia równoległe Wada: klient musi wytworzyć podklasę kreatora (KonkretnyKreator) czasami tylko po to, żeby uzyskać KonkretnyProdukt Produkt KonkretnyProdukt Kreator Fabryka() Operacja() KonkretnyKreator Fabryka() produkt=Fabryka() return new KonkretnyProdukt

16 Fabryka Abstrakcyjna (Abstract Factory) Intencja Dostarcza możliwość tworzenia rodzin zależnych lub spokrewnionych obiektów bez opisywania konkretnych klas Motywacja Załóżmy, że dostarczamy narzędzia do budowy interfejsu użytkownika, w którym użytkownik może zmieniać jego wygląd pomiędzy kilkoma standardami, np. Windows i RedHat Linux Programowanie aplikacji powinno być niezależne od wyglądu, aby mogło być przenaszalne i łatwo rozszerzalne

17 Fabryka Abstrakcyjna – przykładowy kod public abstract class Okno { /*...*/ } public abstract class Suwak{ /*...*/ } public abstract class SystemOkien { public abstract Okno utworzOkno(); public abstract Suwak utworzSuwak(); } public class WindowsOkno extends Okno { /*def Okna w systemie Windows*/ } public class WindowsSuwak extends Suwak { /*def Suwaka w systemie Windows*/ } public class WindowsSystem extends SystemOkien { public Okno utworzOkno() { return new WindowsOkno(); } public Suwak utworzSuwak() { return new WindowsSuwak(); } public class RedHatOkno extends Okno { /*def Okna w systemie RedHat*/ } public class RedHatSuwak extends Suwak { /*def Suwaka w systemie RedHat*/ } public class RedHatSystem extends SystemOkien {/*analogicznie do WindowsOkna*/}

18 Fabryka Abstrakcyjna – przykładowy schemat SystemOkien utworzOkno() utworzSuwak() WindowsSystem utworzOkno() utworzSuwak() RedHatSystem utworzOkno() utworzSuwak() WindowsOkno Okno RedHatOkno WindowsSuwak Suwak RedHatSuwak Klient

19 Struktura Fabryki Abstrakcyjnej FabrykaAbstrakcyjna UtworzProdukt1() UtworzProdukt2() KonkretnaFabryka2 UtworzProdukt1() UtworzProdukt2() KonkretnaFabryka1 UtworzProdukt1() UtworzProdukt2() Produkt1A AbstrakcyjnyProdukt1 Produkt1B Klient Produkt2A AbstrakcyjnyProdukt2 Produkt2B

20 Elementy Fabryki Abstrakcyjnej FabrykaAbstrakcyjna (SystemOkien) Deklaruje interfejs dla operacji, które tworzą obiekty AbstrakcyjnyProdukt KonkretnaFabryka (WindowsSystem, RedHatSystem) Implementuje operacje do tworzenia obiektów KonkretnyProdukt AbstrakcyjnyProdukt (okno, suwak) Deklaruje interfejs dla typu produktu KonkretnyProdukt (WindowsOkno, WindowsSuwak, itd.) Implementuje interfejs AbstrakcyjnyProdukt Klient Używa tylko interfejsów FabrykaAbstrakcyjna i AbstrakcyjnyProdukt

21 Fabryka Abstrakcyjna – stosowalność, konsekwencje Stosowalność Gdy system powinien być niezależny od sposobu kreowania, kompozycji i reprezentacji produktów Gdy system powinien być skonfigurowany z jedną z kilku rodzin produktów Gdy chcemy dostarczyć bibliotekę klas produktów, nie ujawniając ich implementacji Konsekwencje Izoluje konkretne klasy Ułatwia wymianę rodzin produktów

22 Singleton Intencja Zapewnia, że dana klasa w każdym momencie ma tylko jedną instancję i udostępnia ją globalnie Motywacja Singleton polega na stworzeniu klasy, która przechwytuje żądania powstania liczniejszych instancji, oraz zapewnia łatwy dostęp do tej jedynej istniejącej Jedyna instancja jest rozszerzalna dla jej podklas, w których można jej używać bez modyfikacji kodu Przykłady użycia: w systemie może występować tylko jeden manager okien, jedyny punkt dostępu do baz danych, jedna kolejka do jednej drukarki

23 Singleton – struktura, konsekwencje Struktura Operacja Instance pozwala klientowi dostać się do jedynej instancji (uniqueInstance) Singleton może być odpowiedzialny za tworzenie swojej własnej unikalnej instancji Konsekwencje Kontrolowany dostęp do jedynej instancji Zredukowana przestrzeń nazw Pozwala na zwiększenie dozwolonej ilości instancji Singleton static Instance() SingletonOperation() GetSingletonData() static uniqueInstance singletonData return uniqueInstance

24 Singleton - przykładowy kod public class Singleton { /*tworzymy konstruktor protected; gdyby był private chroniłby przed tworzeniem instancji Singletonu, jednak byłoby niemożliwe tworzenie instancji jego podklas*/ protected Singleton () { //... } static public Singleton _instance = null; /*metoda instance() zwraca jedyną instancję Singletonu; użycie: Singleton.instance()*/ static public Singleton instance() { if (null == _instance) { _instance = new Singleton(); } return _instance; }

25 Prototyp (Prototype) Intencja Kopiowanie instancji już istniejących i modyfikowanie ich, zamiast tworzenia całkiem nowych instancji Stosowalność Gdy proces tworzenia obiektów jest bardzo czasochłonny lub skomplikowany Gdy obiekty danej klasy mogą przyjmować tylko jeden z kilku stanów

26 Prototyp – przykładowy kod /*tworzymy kserokopię oryginału na kserokopiarce*/ public class Kartka implements Cloneable { /*metoda kseruj() jest publiczna aby udostępnić metodę protected clone() z klasy Object*/ public Object kseruj(){ try{ return super.clone(); }catch(Exeption e){ System.out.println(Wystąpił błąd: +e.getMessage()); return null; } /*użycie metody kseruj()*/ public class Wyklad { public static void main(String[] args){ Kartka oryginal=new Kartka(); Kartka kopia=(Kartka)oryginal.kseruj(); }

27 Prototyp – struktura, konsekwencje Struktura Konsekwencje Pozwala na dodawanie i usuwanie obiektów w czasie przebiegu programu Przyspiesza kreowanie dużych obiektów Klient Operacja() Prototyp clone() KonkretnyPrototyp1 clone() KonkretnyPrototyp2 clone() prototyp return kopia siebie

28 Budowniczy (Builder) Intencja Odseparowanie konstrukcji złożonego obiektu od jego reprezentacji, aby te same procesy konstrukcyjne mogły wytworzyć inne reprezentacje Stosowalność Gdy algorytm tworzenia złożonych obiektów powinien być niezależny od części, które tworzą obiekt i od sposobu ich łączenia Gdy proces konstrukcji powinien posiadać różne reprezentacje tworzonego obiektu Konsekwencje Pozwala na zróżnicowanie wewnętrznej reprezentacji produktu Daje lepszą kontrolę nad procesami konstrukcyjnymi

29 Budowniczy – przykład kodu /*tworzymy HappyMeal złożony z burgera (hamburger lub cheeseburger), frytek, napoju (Cola lub Fanta) i zabawki (autko lub lalka)*/ public interface Produkt { public int cena(); } /*klasa Burger pozostaje abstrakcyjna, bo cena zostanie zaimplementowana zależnie od rodzaju burgera*/ public abstract class Burger implements Produkt { public abstract int cena(); } /*klasa Cheeseburger implementuje metodę cena()*/ public class Cheeseburger extends Burger { public int cena() { return 6; } } /*i tak dalej*/ public class HappyMeal { public int wyliczCene() { int suma = new Cheeseburger().cena() + new Frytki().cena() + new Cola().cena() + new Auto().cena(); } return suma; }

30 Budowniczy – struktura, elementyh Struktura Elementy Budowniczy – interfejs KonkretnyBudowniczy – implementacja Budowniczego Dyrektor – konstruuje obiekt przy wykorzystaniu interfejsu Budowniczy Produkt – wynikowy złożony obiekt Dyrektor Buduj () Budowniczy CzescBudowy() KonkretnyBudowniczy CzescBudowy () PobierzRezultat() budowniczy Produkt

31 Koniec Design Patterns E. Gamma, R. Helm, R. Johnson, J. Vlissides Thinking in Patterns B. Eckel


Pobierz ppt "Wzorce projektowe (Design Patterns) Barbara Palacz Kraków, 25/10/2004 AGH, Informatyka II rok."

Podobne prezentacje


Reklamy Google