Wzorce projektowe

Stronę tą wyświetlono już: 149 razy

Wstęp

Wzorzec projektowy jest pewnym przepisem, rozwiązaniem, które opisuje w jaki sposób można rozwiązać typowe problemy programistyczne w sposób wydajny tzn. taki, że algorytm zaimplementowany w ten sposób będzie działał szybko oraz dawał możliwość łatwej jego modyfikacji w razie potrzeby. Stawia się tutaj również szczególny nacisk na zwiększenie czytelności kodu np. poprzez wydzielenie określonych zadań różnym obiektom klas oraz częstemu wykorzystaniu polimorfizmu.

Podział wzorców projektowych

Najogólniej rzecz biorąc wzorce projektowe można podzielić na wzorce:

  • klasowe - dotyczące klas;
  • obiektowe - dotyczące obiektów klas

Nieco bardziej szczegółowym podziałem jest podział względem realizowanych przez dany wzorzec działań. Pod tym względem wyróżnia się następujące wzorce projektowe:

  • kreacyjne (konstrukcyjne) - celem tego typu wzorców jest tworzenie i inicjalizowanie obiektów klas;
  • strukturalne - celem tego typu wzorców jest opis struktury powiązania z sobą obiektów;
  • czynnościowe (behawioralne, operacyjne) - celem ich jest opis zachowania i odpowiedzialności współpracujących z sobą obiektów

Wzorce kreacyjne

Wzorce strukturalne

Wzorce czynnościowe

Diagramy UML

W celu zaprezentowania sposobu realizacji danego wzorca oraz zależności pomiędzy poszczególnymi obiektami w danym wzorcu stosuje się często diagramy UML (zunifikowanego języka modelowania). Korzystanie z tego typu diagramów wymaga znajomości podstawowych oznaczeń na nim wykorzystywanych.

Diagramy diagramy UML opisują następujące związki (powiązania) pomiędzy obiektami klas:

  • zależność - jest to najsłabszy typ zależności, w którym jedna z klas wykorzystuje drugą do realizacji części swoich zadań. Na diagramie zależność tego typu oznacza się za pomocą linii przerywanej zakończonej strzałką wskazującą kierunek zależności. Dla przykładu niech istnieje sobie klasa Interpolation, której celem jest wyznaczenie współczynników wielomianu interpolującego zawarte w tej klasie punkty. W tym celu klasa ta ma metodę publiczną calc, która wewnątrz tworzy obiekt klasy Matrix. Klasa ta jest odpowiedzialna za obliczenie współczynników szukanego wielomianu a następnie jest niszczona. Diagram UML w ogólności będzie więc wyglądał jak na poniższym rysunku

    Diagram UML opisujący prostą zależność
    Rys. 1
    Diagram UML opisujący prostą zależność klasy Interpolation od klasy Matrix
  • agregacja jest to relacja typu całość-część, gdzie elementy składowe mogą należeć do większej całości ale mogą też występować oddzielnie. Agregacja na diagramie zaznaczana jest linią zakończoną pustym rombem. Typowym przykładem agregacji są pola klasy, które zawierają obiekty innych klas. Jest więc to zawieranie się jednego typu obiektu w drugim. Weźmy naszą klasę Interpolation, która zawiera obiekt typu vector przyjmujący jako argumenty obiekty klasy dPoint2D. Tak więc klasa Interpolation agreguje klasę vector a ta agreguje obiekty klasy dPoint2D opisującej współrzędne punktu 2W.

    Diagram UML opisujący agregację
    Rys. 2
    Diagram UML opisujący agregację przez klasę Interpolation klasy vector i klasy dPoint2D
  • generalizacja jest to związek opisujący dziedziczenie przez daną klasę innych klas. Tego typu związek opisuje się na diagramie UML za pomocą niewypełnionej strzałki skierowanej w kierunku klasy dziedziczonej.

    Diagram UML opisujący generalizację
    Rys. 3
    Diagram UML opisujący generalizację jako dziedziczenie klasy dPoint2D przez klasę dPoint3D
  • kompozycja jest to związek opisujący relację całość-część, gdzie element składowy stanowi integralną część całości. Każda część jest niszczona wraz z obiektem głównym. Na diagramach UML kompozycję oznacza się rombem zamalowanym na czarno.

Strony powiązane
strony powiązane
  1. sourcemaking.com/design_patterns - strona z opisem wzorców projektowych w języku angielskim

Komentarze