Wzorce projektowe – a po co to komu?

Wzorce projektowe – a po co to komu?

Cześć Wam!

Bardzo cieszę się, że udaje mi się podtrzymywać czwartkową tendencję i postanowienie – więc jeszcze raz: witam w czwartkowy wieczór! Zaczynamy tydzień programistyczny / informatyczny, więc musi też być i wpis o charakterze innym niż biegowy. Dzisiaj chciałbym ogólnikowo skupić się na wzorcach projektowych i odpowiedzieć na takie pytania:

  • co to są wzorce projektowe?
  • po co są wzorce projektowe?
  • jakie wzorce są najważniejsze?

Wzorce projektowe – moja definicja

Każdy (większość) osób studiujących informatykę prawdopodobnie napotkało na różne przedmiot z których musieliśmy uczyć się na pamięć definicji wzorców, nie za bardzo wiedząc jak stosuje się je w praktyce. Grupa programistów która się przekwalifikuje i nie uczęszczała na studia związane z informatyką mogła o wzorcach w ogóle nie usłyszeć, stąd pierw chciałbym przytoczyć oficjalną definicję z wikpedii:

Wzorzec projektowy (ang. design pattern) – uniwersalne, sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych. Pokazuje powiązania i zależności pomiędzy klasami oraz obiektami i ułatwia tworzenie, modyfikację oraz pielęgnację kodu źródłowego. Jest opisem rozwiązania, a nie jego implementacją. Wzorce projektowe stosowane są w projektach wykorzystujących programowanie obiektowe.

Kończąc formalizmy: jest to po prostu sposób pisania kodu który ma ułatwić prace programiście, osobie przeglądającej ten kod i osobie która dołącza do projektu. Służą do rozwiązywania problemów tworzenia naszego kodu czy oprogramowania. Można nawet stwierdzić, że wzorce projektowe powiązane są z “clean code” (czyli czystym kodem) ale o czystym kodzie będzie osobny wpis, ponieważ jest to temat rzeka. Informacyjnie wzorce możemy podzielić na następujące rodziny:

  • Kreacyjne (konstrukcyjne) – opisujące proces tworzenia nowych obiektów; ich zadaniem jest tworzenie, inicjalizacja oraz konfiguracja obiektów, klas oraz innych typów danych.
  • Strukturalne – opisujące struktury powiązanych ze sobą obiektów.
  • Czynnościowe – opisujące zachowanie i odpowiedzialność współpracujących ze sobą obiektów.

Po co są wzorce projektowe?

Jak już wspomniałem w punkcie powyżej, wzorce projektowe służą do wspierania procesu tworzenia oprogramowania. Nie ma innych ukrytych przekazów. Stosowanie wzorców na pewno przyczynia się do naszych dobrych praktyk tworzenia oprogramowania. Kod będzie prostszy do refaktoryzacji, będzie czytelniejszy i osoba która dołącza np. do projektu – szybciej może wdrożyć się w to wszystko widząc dobry, uporządkowany kod z zastosowanymi wzorcami projektowymi. Jak już wspomniałem, często jest tak, że programista używa jakiegoś wzorca projektowego nie mając pojęcia o jego istnieniu.

Jakie wzorce są najważniejsze?

Wszystkie. Nie znaczy to oczywiście, że teraz każdy programista musi wkuć na pamięć definicje wszystkich wzorców projektowych, zaczynając od kreacyjnych a kończąc na czynnościowych. Chodzi o to, by mieć świadomość, że taki a nie inny wzorzec istnieje i być może w przyszłości pomoże nam to rozwiązać jakiś problem czy zadanie. Są wzorce mniej i bardziej popularne. Ja chciałbym bardzo ogólnie opisać trzy wzorce, z którymi prawdopodobnie macie najwięcej do czynienia: 

  • Singleton – na pewno spotkaliście się z tym pojęciem. Przez niektórych uważany jest za anty-wzorzec. Celem singletonu jest możliwość orgraniczenia tworzenia obiektów danej klasy do jednej instacji. Co za tym idzie – zapewniamy globalny dostęp do stworzonego obiektu. Nic skomplikowanego w tym nie ma.
  • MVC (Model – View – Controller) – jest wzorcem architektonicznym a jego zastosowanie na prawdę jest dość duże. Jak sama nazwa mówi, wzorzec ten polega na oddzieleniu widoku aplikacji od modelu. Komunikacja między tymi warstwami powinna odbywać się właśnie przez kontroler. Model jest częścią reprezentującą dany problem bądź logikę aplikacji. Widok opisuje interfejs użytkownika. Kontroler przyjmuje dane wejściowe od użytkownika i jak sama nazwa wskazuje – kontroluje, zarządzając modelem oraz odświeżaniem widoku.
  • Budowniczy (builder) – najprościej mówiąc, służy on do tworzenia obiektów poprzez wcześniejsze stworzenie jego fragmentów. Najlepszym przykładem wg mnie jest na przykład tworzenie zestawu komputerowego. Jako ten budowniczy będzie ogół – czyli zestaw komputerowy a zestawy mogą być różne ale wciąż będziemy budować je na podstawie tego głównego szkieletu (jeden może mieć np 4GB RAM, drugi 2GB RAM).

Reasumując i kończąc ten ogólnikowy wpis – nie bójmy się stosować wzorców projektowych. Być może zetknęliście się z skomplikowanymi definicjami ale wcale tak nie musi być. Większość wzorców na prawdę stosuje się łatwo, szybko i przyjemnie. To ma być ułatwienie, a nie udręka programisty. W przyszłości planuję poświęcić osobne wpisy o wzorcach projektowych i poruszyć szerzej dany temat (np diagramy klas, przykładowe implementacje itp) więc wybaczcie za brak szczegółów w przypadku opisywania tych trzech wzorców. Do zobaczenia w poniedziałek (ciekawostka programistyczna na blogu).

Pozdrawiam serdecznie,
biegajacyprogramista.pl

Dodaj komentarz

three + 1 =

Close Menu