Strategia (wzorzec projektowy)

Z Wikipedii, wolnej encyklopedii
Przejdź do nawigacji Przejdź do wyszukiwania

Strategiaczynnościowy wzorzec projektowy, który definiuje rodzinę wymiennych algorytmów i kapsułkuje je w postaci klas. Umożliwia wymienne stosowanie każdego z nich w trakcie działania aplikacji niezależnie od korzystających z nich użytkowników.

Instrukcja warunkowa jest elementem języka programowania, które pozwala na wykonanie różnych obliczeń w zależności od tego czy zdefiniowane przez programistę wyrażenie logiczne jest prawdziwe, czy fałszywe. Możliwość warunkowego decydowania o tym, jaki krok zostanie wykonany w dalszej kolejności jest jedną z podstawowych własności współczesnych komputerów – dowolny model obliczeń zdolny do wykonywania algorytmów (tj. równoważny maszynom Turinga) musi ją posiadać.Programowanie kontraktowe (ang. Design by contract, DbC) – w programowaniu, metoda organizowania kodu źródłowego programu w taki sposób, aby wynikało z niego nie tylko jak program ma działać, ale też w jaki sposób zweryfikować poprawność działania konkretnych elementów programu (funkcje, struktury, klasy, moduły, itp.). Programowanie kontraktowe jest związane z programowaniem obiektowym.

Problem[ | edytuj kod]

Rozważmy program generujący statystyki dotyczące podanego na wejściu kodu źródłowego takie, jak liczba wierszy, liczba klas itd. W mechanizmie generowania statystyk możemy wyróżnić część kodu specyficzną dla języka programowania, w którym napisany został kod oraz ogólną, niezależną od języka. Chcielibyśmy, aby nasz program był uniwersalny i obsługiwał wiele języków programowania, a także by w przyszłości istniała możliwość dodawania nowych.

W informatyce przepływ sterowania oznacza kolejność, w jakiej pojedyncze wyrażenia lub instrukcje są wykonywane w paradygmacie programowania imperatywnego. W języku programowania instrukcja przepływu sterowania może zmienić przepływ sterowania tak, aby wyrażenia wykonywane były w innej kolejności, niż ta, w jakiej są wypisane w kodzie źródłowym. Pojęcie przepływu danych jest prawie zawsze ograniczane do pojedynczego wątku aplikacji, ponieważ dotyczy ono wykonywania instrukcji po jednej naraz.HotSpot – maszyna wirtualna Javy, dostarczana przez firmę Oracle Corporation razem z pakietem Java Runtime Environment. Wykorzystuje między innymi takie technologie jak kompilacja w locie oraz optymalizacja adaptacyjna. Dla Javy Standard Edition oraz Enterprise Edition dostępna dla systemów Microsoft Windows, Linux oraz Solaris. Istnieją wersje przeznaczone dla Mobile Edition: CDC HotSpot Implementation (wcześniej CVM), CLDC HotSpot Implementation (wcześniej Monty).

Rozwiązaniem jest zastosowanie wzorca Strategia, gdzie algorytmy specyficzne dla języków programowania wydzielimy jako osobne klasy ze wspólnym interfejsem, który umożliwi programowi wyciąganie określonych informacji o kodzie źródłowym.

Budowa[ | edytuj kod]

Diagram klas wzorca Strategia

We wzorcu Strategia definiujemy wspólny interfejs dla wszystkich obsługiwanych algorytmów i zawierający wszystkie dozwolone operacje. Następnie implementujemy go w poszczególnych klasach dostarczających konkretne algorytmy. Dodatkowo, we wzorcu wyróżniamy także klienta korzystającego z algorytmów. Posiada on referencję do aktualnie używanej strategii oraz metodę ustawStrategie(), która pozwala ją zmienić.

Erich Gamma (ur. 1961 w Zurychu) – szwajcarski informatyk, współautor książki Wzorce projektowe: elementy oprogramowania obiektowego wielokrotnego użytku.Definicja intuicyjna: Kod źródłowy to zapis programu komputerowego w formie czytelnej dla człowieka umożliwiający jego modyfikację i rozwój.

Elementy wzorca:

  • Strategia – interfejs definiujący operacje, które muszą obsługiwać wszystkie dostępne algorytmy. Zakładamy, że wszyscy klienci zainteresowani wykorzystaniem algorytmów będą używać właśnie tego interfejsu.
  • Konkretna strategia – implementuje określony algorytm zgodnie ze zdefiniowanym interfejsem.
  • Klient – użytkownik rodziny algorytmów posiadający referencję do obiektu Strategia.
  • Istotne jest, że obiekty Klient oraz Strategia współpracują ze sobą w celu wykonania określonego zadania. Klient wykonuje wszystkie ogólne zadania i nadzoruje przepływ sterowania, zaś strategie implementują te części zadania, które można wymieniać.

    W programowaniu obiektowym interfejs jest definicją abstrakcyjnego typu posiadającego jedynie operacje, a nie dane. Kiedy w konkretnej klasie zdefiniowane są wszystkie metody interfejsu mówimy, że klasa implementuje dany interfejs. W programie mogą być tworzone zmienne typu referencja do interfejsu, nie można natomiast tworzyć obiektów tego typu. Referencja może wskazywać na obiekt dowolnej klasy implementującej dany interfejs. Interfejs określa udostępniane operacje, nie zawiera natomiast ich implementacji i danych. Z tego powodu klasy mogą implementować wiele interfejsów, bez problemów wynikających z wielokrotnego dziedziczenia. Wszystkie metody w interfejsie z reguły muszą być publiczne.Programowanie obiektowe (ang. object-oriented programming) — paradygmat programowania, w którym programy definiuje się za pomocą obiektów — elementów łączących stan (czyli dane, nazywane najczęściej polami) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań.


    Podstrony: 1 [2] [3] [4]




    Warto wiedzieć że... beta

    Pyłek (ang. Flyweight) znany także jako Waga Piórkowa jest jednym ze strukturalnych wzorców projektowych. Jego celem jest zmniejszenie wykorzystania pamięci poprzez efektywną obsługę wielu małych obiektów za pomocą współdzielenia. Należy do grupy wzorców skatalogowanych przez Gang Czterech.
    Agregacja (inaczej zawieranie się, gromadzenie) w programowaniu obiektowym to sytuacja, w której tworzy się nową klasę, używając klas już istniejących (często nazywa się to "tworzeniem obiektu składowego"). Nowa klasa może być zbudowana z dowolnej liczby obiektów (obiekty te mogą być dowolnych typów) i w dowolnej kombinacji, by uzyskać żądany efekt. Agregacja jest często określana jako relacja typu "zawiera" np. "samochód zawiera silnik" - gdzie "samochód" i "silnik" są klasami, oraz klasa "samochód" zawiera w sobie obiekt (czasami referencję czy wskaźnik) typu "silnik".
    W programowaniu obiektowym klasa jest częściową lub całkowitą definicją dla obiektów. Definicja obejmuje dopuszczalny stan obiektów oraz ich zachowania. Obiekt, który został stworzony na podstawie danej klasy nazywany jest jej instancją. Klasy mogą być typami języka programowania - przykładowo, instancja klasy Owoc będzie mieć typ Owoc. Klasy posiadają zarówno interfejs, jak i strukturę. Interfejs opisuje, jak komunikować się z jej instancjami za pośrednictwem metod, zaś struktura definiuje sposób mapowania stanu obiektu na elementarne atrybuty.
    Przetwarzanie współbieżne (ang. concurrent computing) – przetwarzanie oparte na współistnieniu wielu wątków lub procesów, operujących na współdzielonych danych. Wątki uruchomione na tym samym procesorze są przełączane w krótkich przedziałach czasu, co sprawia wrażenie, że wykonują się równolegle.
    Sklep internetowy – serwis internetowy dający możliwość zamawiania produktów przez Internet, jedna z form handlu elektronicznego. Sklep internetowy jest częścią relacji B2C, rzadziej B2B. Forma ta staje się obecnie coraz popularniejsza z uwagi na wygodę i obniżenie kosztów sprzedaży (i często wynikające z tego niższe ceny towarów), a ponadto daje to możliwość szybkiego porównania cen u wielu dostawców.
    Garbage collection (zbieranie nieużytków, odśmiecanie) – jedna z metod automatycznego zarządzania dynamicznie przydzieloną pamięcią, w której za proces jej zwalniania odpowiedzialny jest nie programista, lecz programowy zarządca nazwany garbage collector. Pierwsza metoda odśmiecania została opracowana w 1959 roku przez Johna McCarthy’ego w celu rozwiązania problemu ręcznego zarządzania pamięcią w Lispie. Mechanizm ten następnie został szeroko rozpowszechniony i jest wykorzystywany w wielu wysokopoziomowych językach programowania, takich jak: Smalltalk, Python, Ruby, Java, C# czy D.
    Hermetyzacja (inna używana nazwa to enkapsulacja, (ang.) encapsulation) – jedno z założeń programowania obiektowego. Hermetyzacja polega na ukrywaniu pewnych danych składowych lub metod obiektów danej klasy tak, aby były one dostępne tylko metodom wewnętrznym danej klasy lub funkcjom zaprzyjaźnionym.

    Reklama