Zpo-11-wyk-Slajd15: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Linia 1: Linia 1:
==Command: przykład==
==Replace Type Code with State==


[[Image:zpo-11-wyk-Slajd15.PNG|Command: przykład]]
[[Image:zpo-11-wyk-Slajd15.PNG|Replace Type Code with State]]




Bank zarządza grupą obiektów Account reprezentujących rachunki bankowe. Operacje bankowe, wykonywane na rachunkach, są implementacjami interfejsu Operation, posiadającego metodę ''execute'' ''().'' Jej implementacja zależy od rodzaju operacji, dlatego w przypadku obiektu InterestChange będzie ona zmieniała stopę procentową, a w przypadku obiektu Transfer – dokonywała przelewu. Ponieważ każda operacja wymaga innych parametrów, dlatego są one przekazywane w konstruktorze poszczególnej klasy, a nie bezpośrednio w metodzie ''execute'' ''().'' W tym przykładzie rolę obiektu Invoker pełni bank, ponieważ on wykonuje metodę ''execute'' ''(),'' a rolę przedmiotu polecenia (obiektu Receiver) – obiekt Account.
Przekształcenie to jest podobne do poprzedniego, a różnica polega na zastąpieniu mechanizmu dziedziczenia delegacją. Stosuje się je w tych przypadkach, gdy użycie podklas jest niemożliwe, np. w sytuacji, gdy obiekt musi zmienić swój stan (w przypadku podklas wymagałoby to utworzenia nowego obiektu, co często jest nie do przyjęcia z uwagi na różnicę referencji starego i nowego obiektu).
 
Celem przekształcenia jest wyłączenie sfery związanej ze stanami i zmiennym zachowaniem do oddzielnej hierarchii dziedziczenia, złożonej z klasy abstrakcyjnej (lub interfejsu) oraz jej podklas. Obiekt jest związany z obiektem reprezentującym określony stan relacją kompozycji, i poprzez nią deleguje wywołania do obiektu stanu.
 
Mechanika przekształcenia przebiega w następujących krokach. Na początku należy zahermetyzować pole stanu i udostępnić je przez metody dostępowe set/get. Następnym krokiem jest zdefiniowanie klasy abstrakcyjnej, której implementacje będą reprezentować stany obiektu, wraz z metodami set/get zapewniającymi dostęp do starego pola stanu. Inne metody zadeklarowane w tej klasie, które następnie będą pokrywane w podklasach, umożliwiają określenie, jakie zachowanie będzie zależało od stanu. Po stworzeniu klasy abstrakcyjnej należy zdefiniować jej podklasy, pokrywając odpowiednio metody set/get dostępu do pola stanu dziedziczone z nadklasy. W tym momencie następuje zdefiniowanie nowego mechanizmu opisu stanu: z pola przechowywanego bezpośrednio w klasie źródłowej do nowej, niezależnej hierarchii klas reprezentujących stany. Polega to na stworzeniu pola w klasie źródłowej, wskazującego na obiekt typu klasy abstrakcyjnej, a następnie zmianie metod set/get, tak aby odwoływały się do nowego pola reprezentującego stan. Ostatnim krokiem jest usunięcie starego pola stanu.  




[[zpo-11-wyk-Slajd14 | << Poprzedni slajd]] | [[zpo-11-wyk-toc|Spis treści ]] | [[zpo-11-wyk-Slajd16 | Następny slajd >>]]
[[zpo-11-wyk-Slajd14 | << Poprzedni slajd]] | [[zpo-11-wyk-toc|Spis treści ]] | [[zpo-11-wyk-Slajd16 | Następny slajd >>]]

Aktualna wersja na dzień 17:36, 4 lis 2006

Replace Type Code with State

Replace Type Code with State


Przekształcenie to jest podobne do poprzedniego, a różnica polega na zastąpieniu mechanizmu dziedziczenia delegacją. Stosuje się je w tych przypadkach, gdy użycie podklas jest niemożliwe, np. w sytuacji, gdy obiekt musi zmienić swój stan (w przypadku podklas wymagałoby to utworzenia nowego obiektu, co często jest nie do przyjęcia z uwagi na różnicę referencji starego i nowego obiektu).

Celem przekształcenia jest wyłączenie sfery związanej ze stanami i zmiennym zachowaniem do oddzielnej hierarchii dziedziczenia, złożonej z klasy abstrakcyjnej (lub interfejsu) oraz jej podklas. Obiekt jest związany z obiektem reprezentującym określony stan relacją kompozycji, i poprzez nią deleguje wywołania do obiektu stanu.

Mechanika przekształcenia przebiega w następujących krokach. Na początku należy zahermetyzować pole stanu i udostępnić je przez metody dostępowe set/get. Następnym krokiem jest zdefiniowanie klasy abstrakcyjnej, której implementacje będą reprezentować stany obiektu, wraz z metodami set/get zapewniającymi dostęp do starego pola stanu. Inne metody zadeklarowane w tej klasie, które następnie będą pokrywane w podklasach, umożliwiają określenie, jakie zachowanie będzie zależało od stanu. Po stworzeniu klasy abstrakcyjnej należy zdefiniować jej podklasy, pokrywając odpowiednio metody set/get dostępu do pola stanu dziedziczone z nadklasy. W tym momencie następuje zdefiniowanie nowego mechanizmu opisu stanu: z pola przechowywanego bezpośrednio w klasie źródłowej do nowej, niezależnej hierarchii klas reprezentujących stany. Polega to na stworzeniu pola w klasie źródłowej, wskazującego na obiekt typu klasy abstrakcyjnej, a następnie zmianie metod set/get, tak aby odwoływały się do nowego pola reprezentującego stan. Ostatnim krokiem jest usunięcie starego pola stanu.


<< Poprzedni slajd | Spis treści | Następny slajd >>