programowanie obiektowe 13, c c++, c#


Wzorce projektowe, część I

Przegląd zagadnień

0x08 graphic

Zajęcia poruszą problem wzorców projektowych - bardzo ważnego elementu programowania obiektowego.

Omówione zostanie pojęcie wzorców projektowych, a także przyczyny ich używania.

Na zajęciach pojawi się również krótki podział wzorców projektowych na konstrukcyjne, strukturalne i czynnościowe.

W drugiej części Laboratorium omówione zostaną wzorce konstrukcyjne na przykładzie Fabryki, Budowniczego i Singletonu.

Zajęcia zakończy napisanie programu wykorzystującego zdobytą wiedzę.

Wzorce projektowe (1)

0x08 graphic

Trudno powiedzieć, kiedy pojawiły się pierwsze wzorce projektowe w programowaniu, jest jednak niezaprzeczalnym faktem, że od czasu ukazania się w 1995 roku książki „Design Patterns” autorstwa Gammy, Helma, Johnsona i Vlissidesa nastąpił wzrost zainteresowania tą tematyką.

Wzorce projektowe są od tego czasu integralną częścią inżynierii oprogramowania jako abstrakcyjny opis zależności pomiędzy klasami.

Dzięki wykorzystaniu wzorców projektowych możliwa była standaryzacja kodu, wskutek czego stał się on bardziej czytelny, efektywniejszy i mniej zawodny.

Wzorce projektowe (2)

0x08 graphic

Jedna z podstawowych klasyfikacji wzorców projektowych wyróżnia trzy istotne grupy:

0x08 graphic
Fabryka (1)

Wzorzec fabryki doskonale sprawdza się w sytuacjach, w których mamy konieczność dokonania wyboru pomiędzy instancjami klas w zależności od dostarczanych danych.

Wszystkie klasy mają w nim wspólnego przodka i wspólne metody, jednak typ danych determinuje, w jaki sposób wykonają swoje zadania.

W efekcie każda z klas działa w specyficzny dla siebie sposób.

0x08 graphic
Fabryka (2)

W powyższym przykładzie w zależności od płci osoby, pojawia się na ekranie stosowne powitanie.

Wadą metody jest konieczność przygotowania przez klienta podklasy kreatora, żeby uzyskać konkretny efekt.

Budowniczy (1)

0x08 graphic

Wzorzec Budowniczego umożliwia rozdzielenie skomplikowanej struktury klasy od jej reprezentacji.

Jego podstawowymi elementami są interfejs budowniczego, sam budowniczy, kierownik wykorzystujący interfejs budowniczego do konstrukcji produktu oraz konstruowany produkt.

Budowniczy (2)

0x08 graphic

Powyższy przykład ilustruje wzorzec projektowy budowniczego.

Końcowy efekt - klasa ZestawNarciarza jest powstaje przez zadziałanie nadrzędnego procesu przez interfejs Produkt.

Rolę konkretnego budowniczego w przykładzie pełnie klasa Zjazdowe:Narty.

Singleton (1)

0x08 graphic

Czasami zachodzi potrzeba, aby pewna klasa miała co najwyżej jedną instancję. Może tak się zdarzyć, gdy klasa wymaga dużej ilości zasobów do instancjonowania, lub obsługuje połączenie z bazą danych czy sprzęt. Można wówczas skorzystać z wzorca Singleton.

Singleton może mieć najwyżej jedną instancję. Przyjrzyjmy się budowie tej klasy. Konstruktor singletonu jest prywatny - nie można go więc wywoływać dowolnie spoza klasy. Instancję można utworzyć statyczną metodą getInstance() (oczywiście nazwę można zmienić). Na potrzeby tej metody jest jeszcze statyczna składowa - zmienna obiektowa S klasy singleton. Gdy zmienna ta jest pusta, metoda getInstance() tworzy instancję singletonu i umieszcza referencję do niej w zmiennej S, a następnie zwraca tę referencję. Jeśli zmienna S przechowuje już referencje, metoda tylko ją zwraca.

Gdy zatem pierwszy raz definiujemy zmienną obiektową klasy Singleton, metoda getInstance() tworzy instancję. Za drugim razem dostaniemy instancję do stworzonego już wcześniej obiektu.

Singleton (2)

0x08 graphic

Zobaczmy na przykładową klasę Baza, która jest singletonem. Struktura klasy jest podobna jak na poprzednim slajdzie, dodana została jedna metoda i komunikaty wyświetlane w konsoli.

Pierwsze wywołanie połączenia z bazą spowoduje utworzenie instancji klasy Baza. Za drugim razem otrzymamy komunikat, że baza już istnieje, a wszystkie operacje będą dotyczyły instancji utworzonej za pierwszym razem.

0x08 graphic
Podsumowanie

Wzorce konstrukcyjne umożliwiają rezygnację z bezpośredniego tworzenia instancji klas na rzecz pozyskiwania obiektów.

0x08 graphic
Pytania sprawdzające

Pytania sprawdzające:

  1. Wymień i opisz podstawowe typy wzorców projektowych.

  2. Omów wzorzec Budowniczego.

  3. Jak działa wzorzec Fabryka?

  4. Omów wzorzec Singleton

0x08 graphic
Laboratorium

  1. Zaimplementuj wzorzec Fabryki w programie, który zajmie się obsługi różnych nośników danych.

  2. Napisz program, który na bazie wzorca Budowniczego przygotuje w salonie samochodowym auto z wyposażeniem dla konkretnego klienta.

  3. Wymyśl sposób zaimplementowania wzorca Singleton.

L

L



Wyszukiwarka