Wzorce projektowe. Przegląd.

Programowanie Teoria dodano: 30.05.2019
EDYCJA 30.05.2019

Sprawdzone i uniwersalne rozwiązania. Pokazują powiązania między klasami i obiektami. Ułatwiają tworzenie kodu źródłowego.
  • Wstęp
    1. Abstract abstrakcyjne klasy nie moga mieć swoich instancji. Abstrakcyjne metody nie mogą mieć swoich ciał { ... }
    2. Final nie możemy z takiej klasy dziedziczyć i nie można nadpisać / przeciążać metody finalnej.
    3. Interface wzorzec wg. którego opisujemy obiekty (lista metod i parametry, bez implementacji). Implementacja będzie w klasie, która korzysta z tego interfejsu. Uogólniamy pierwszą klasę abstrakcyjną (czyli nie tworzymy instancji klasy), tak by zawierała tylko deklarację abstrakcyjnych metod publicznych.
  • Wzorce kreacyjne (konstrukcyjne.
    1. Fabryka generuje obiekt dla klienta bez eksponowania klientów. Logika tworzenia obiektu: : : Do produkcji obiektów danej klasy nie używamy konstruktora tylko warstwy abstrakcji, który zapewnia fabryka - wyprodukowuje obiekt odpowiedniej klasy.
    2. Metoda wytwórcza wzorzec definiuje INTERFEJS do tworzenia obiektów.
    3. Fabryka abstrakcyjna Chcemy obiekt, nie interesuje nas jaka jest klasa tego obiektu. Np zestaw kontrolek (przycisk w menu) dla konkretnego OS (Windows, Mac). Cała idea tworzenia fabryki polega na tym, aby nie używać operatora NEW, tak by nie tworzyć obiektów bezpośrednio, a za pomocą klas fabryki.
    4. Bulider Unikanie konstruktora z dużą ilością parametrów np. 5-10. Tworzenie obiektu etapami. bardziej logiczne i przejrzyste od rozbudowanego konstruktora.Do grupy powiązanych obiektów: checkbox, pole w form.
    5. Prototyp tworzenie obiektu przez klonowanie obiektu istniejącego. Klonowanie pozwala uniknąć kosztów związanych z inicjalizacją. (wysoki koszt tworzenia obiektu)
    6. Singleton antywzorzec. Ogranicza możliwość tworzenia obiektów klasy tylko do jednej instancji, przydatny gdy potrzebny jest jeden obiekt do koordynacji działań w systemie. Do połączenia z Bazą Danych. Trudność w testowaniu aplikacji - wprowadza globalny stan aplikacji. Implementacjia: stat. składnik przechowujący instancje; prywatny konstruktor; statyczna publiczna metoda zapewniająca globalny dostęp do instancji.
  • Wzorce strukturalne współpraca między klasami. Statyczna struktura współpracujących elementów.
    1. Adapter jak sprawić, by niekompatybilne klasy (i interfejsy) mogły z obą współpracować. Tzw. przejściówka. Dostarcza cenę metodą displayPrice() z interfejsem a klient spodziewa się metody getPrice().
    2. Most - bridge łączenie 2 rzeczy - oddzielnie abstrakcji obiektu od jego implementacji. Np. komponenty na aplikacje mobilne. Dwie osobne hierarchie, komponenty aplikacji to abstrakcja; łatwa struktura do modyfikacji i rozszerzenia: dodanie komponentów lub platform.
    3. Kompozyt grupa obiektów traktowana jako jeden obiekt (hierarchia w formie struktury drzewiastej) np. system plików (obiektów) i katalogów (obiektów), lub menu i subpozycje menu. To jednocześnie kolekcja obiektów.
    4. Dekorator dynamiczna zmiana zachowania (udekorować - coś zmienić) pakując go w inny obiekt. Dodawanie nowych zachowań do podstawowego obiektu, i nie modyfikowanie innych - pozostałych obiektów tego typu. Np. mechanizm tworzenia nowych okien.
    5. Fasada ukrywa przed klientem złożoność problemów i opakowuje złożony system w prosty interfejs. Np. bankomat. Skomplikowany system zamówień: złożone obiekty. Obiekt płatność, o. wysyłka / o. produkt, o. klient.
    6. Pyłek - fly-weight wzorzec nastawiony na wydajność, współdzielenie odpowiedzialności z podobnymi obiektami, zastosowanie przy dużej ilości małych. Współdzielenie w jednej instancji obiektów które do siebie są podobne. Gry czasu rzeczywistego - duża ilość obiektów, np. las z tysięcy drzew.. Nie do aplikacji webowych - te działają na zasadzie żądanie - odpowiedź.
    7. Proxy WEB. Pośrednik, pełnomocnik. To klasa która jest interfejsem do zewnętrznej klasy (np. sys. plików, duży obiekt w pamięci). Klient korzysta z proxy, a nie bezpośrednio z elementu. Pośrednik może kontrolować dostęp do zewnętrznej klasy lub odpowiada za chachowanie zawartości. Klient korzysta z proxy jak z realnego obiektu, np. system ładowania obrazków - proxy dodaje funkcjonalność cache i nie trzeba za każdym razem fizycznie ładować obrazka z dysku.
  • Wzorce czynnościowe behawioralne zachowania. Skupiają się na procesie komunikacji a nie na strukturze (sztywna i statyczna). Np. w jaki sposób wysyłane są informacje między obiektami.
    1. Łańcuch zobowiązań (odpowiedzialności) klient wysyła żądanie: handler - obiekt w łańcuchu żądanie przechodzi przez łańcuch dopóki nie trafi na właściwy handler. Np. płatności do 909 - payPall, 99 - 999 przelew, 999 - karta
    2. Command klient do innego obiektu wysyła żądanie - na tym opiera się większość kodu aplikacji. TU: żądanie klienta traktowane jest jako kolejny obiekt. Umożliwia to:
      1. kolejkowanie żądań
      2. możliwość parametryzacji.
      3. zapamiętywanie żądań
      Dzięki temo można zaimplementować WYCOFYWANIE ZMIAN W APLIKACJI lub przypisać skróty klawiszowe.
      Klient -> przełącznik -> włącz / wyłącz -> odbiornik (silnik)
    3. Iterator Aplikacja WEBOWA - MENU. Iteracja czyli pętla która umożliwia iterację (np. listę obiektów, użytkowników, elementów menu) mamy dostęp do elementów obiektów bez ujawniania jego elementów, np. lista piosenek mp3.
    4. Mediator zapewnia jednolity interfejs dla różnych elementów w danym podsystemie. Pośredniczy. Jako klasa ma wszystkie metody innych klas.. wie wszystko o wszystkich. Np. chat webowy.
    5. Memento (pamiątka) Zapamiętywanie bieżącego stanu obiektu by można go przywrócić. Np. cofanie zmian w edytorze Ctrl + Z.
    6. Obserwator obiekt obserwowany przechowuje listę obserwatorów. Jeśli zmienia się stan obiektu to obiekty zależne zostaną powiadomione. ZMIANA STANU -> zmiana wartości. Np. prosty system powiadomień. Obserwowany - subskrybenci.
    7. State zmieniamy zachowanie obiektu w zależności od jego stanu. Stany oraz przejścia. Przejrzysty sposób na zmianę stanu bez instrukcji IF i SWITCH. Np. 2 tryby pracy telefonu wpływają na różne akcje. Tryb cichy - brak dzwonka, lub mały / duży / średni pędzel.
    8. Strategia wybieramy strategię w zależności od sytuacji, zestaw klas w którym każda klasa reprezentuje określone zachowanie, a wybór jednej klasy zmienia zachowanie programu. (przez klienta - on dokonuje zmiany strategii). Algorytmy sterujące...
    9. Template Method metoda szablonowa. Szkielet algorytmu określa główne etapy / kroki. Implementacja poszczególnych etapów jest realizowana w dziedziczących klasach. BAZY DANYCH - klasa zapytań do BD. Zapytanie: te same kroki: przygotuj - wyślij - odbierz rezultat. Abstrakcyjna klasa definiuje abstrakcyjne kroki. Łatwy i często używany wzorzec produkcyjny.
    10. Visitor odwiedzający. Odseparowanie algorytmu od obiektu, na którym on operuje. Możemy łatwo dodać nowe operacje do obiektu bez konieczności modyfikowania jego struktury (klas). Bardzo popularny. Klasy są otwarte na rozszerzenia ale zamknięte na modyfikacje przez reguły OOP. Obiekt musi zaakceptowac odwiedzającego.


Losowe zdjęcia


O sobie


gawronski
A.D. 2016

Lubię jazdę na rowerze, wspinaczkę, czytać książki i biegać. Studiowałem mechanikę i budowę maszyn oraz psychologię. Nie zostałem inżynierem ani psychologiem.