Zpo-6-lab: 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:
=Ćwiczenie 6. Wzorce projektowe cz. I=
=Ćwiczenie 6. Wzorce projektowe cz. II=


==Informacje wstępne==
==Informacje wstępne==
Ćwiczenie jest realizowane w języku Java w środowisku Eclipse 3.2.
Ćwiczenie jest realizowane w języku Java w środowisku Eclipse 3.2.
Przed przystąpieniem do realizacji ćwiczenia należy zapozanać się z wykładem.
Przed przystąpieniem do realizacji ćwiczenia należy zapozanać się z wykładem.
Celem ćwiczenia jest zastosowanie wybranych wzorców projektowych w przykładowym systemie obiektowym dotyczącym [[ZPO-bank|banku]].
Ćwiczenie jest kontynuacją cyklu związanego z wzorcami projektowymi. Celem jest zastosowanie kolejnych wzorców w przykładowym systemie obiektowym dotyczącym [[ZPO-bank|banku]].


==Instalacja==
==Instalacja==
Przygotowanie do ćwiczenia polega na zainstalowaniu JDK 5.0 [http://java.sun.com/javase/downloads/index.jsp] oraz środowiska Eclipse [http://www.eclipse.org/downloads] w wersji 3.2
Przygotowanie do ćwiczenia polega na zainstalowaniu JDK 5.0 [http://java.sun.com/javase/downloads/index.jsp] oraz środowiska Eclipse [http://www.eclipse.org/downloads] w wersji 3.2
Po uruchomieniu środowiska należy zaimportować (menu File->Import->Existing projects into workspace) [[media:zpo-5-lab.zip|projekt]], w którym będą stosowane wzorce projektowe.
Ćwiczenie jest kontynuacją poprzedniego, dlatego należy prowadzić prace w dotychczasowym projekcie.


==Zadanie 1==
==Zadanie 1==
Zaimplementuj operacje bankowe w taki sposób, aby stanowiły realizację wzorca Command. Każda operacja powinna być niezależną klasą, implementacją wspólnego interfejsu ''OperacjaBankowa'' i posiadać metodę ''wykonaj()'', która powoduje wykonanie specyficznej operacji. Przekazanie parametrów specyficznych dla poszczególnych operacji odbywa się poprzez konstruktor operacji.
Zaimplementuj w systemie bankowym mechanizm naliczania oprocentowania w postaci wzorca State. Uwzględnij trzy rodzaje oprocentowania:
* oprocentowanie typu A: 2% do kwoty 800 PLN oraz 4% od kwoty powyżej 800 PLN
* oprocentowanie typu B: 3% do kwoty 1000 PLN oraz 5% od kwoty powyżej 1000 PLN
* oprocentowanie typu C: 3.5%, niezależnie od wartości salda na rachunku klienta
Mechanizmy naliczania oprocentowania należy zaimplementować w postaci osobnych klas, dziedziczących po wspólnej nadklasie lub implementujących wspólny interfejs.  


Należy zaimplementować operacje wpłaty, wypłaty i przelewu.
Zmiana oprocentowania związanego z rachunkiem bankowym polega na zmianie bieżącego obiektu reprezentującego oprocentowanie. Polecenia naliczenia odsetek powinno być delegowane do bieżącego obiektu reprezentującego oprocentowanie.
Operacja zmiany odsetek powinna być zaimplementowana podobnie jak inne operacje bankowe, tj. jako realizacja wzorca Command.
 
Zwróć uwagę, aby obiekty reprezentujące oprocentowanie były bezstanowe, tzn. nie przechowywały informacji związanej z rachunkiem (np. wysokości salda). Referencja do rachunku powinna być przekazywana obiektowi reprezentującemu oprogramwanie jako parametr metody obliczającej odsetki.


==Zadanie 2==
==Zadanie 2==
Zaimplementuj w systemie bankowym mechanizm pozwalający bankowi przekazywać tym właścicielom rachunków, którzy wyrażą na to zgodę, komunikaty. W tym celu zastosuj wzorzec Observer, w którym obiektem obserwowanym jest bank, a obserwatorami - właściciele.
Wyłącz z klasy Rachunek interfejs ProduktBankowy, który może posiadać także inne implementacje (np. Lokata, Kredyt). Następnie stwórz metodę-fabrykę, która pozwoli hermetyzować sposób tworzenia instancji produktu bankowego. Powinna ona przyjmować parametry, które określają typ tworzonego obiektu.
 
Właściciel rachunku jest obiektem, a docierające do niego komunikaty są dołączane do listy przechowywanej przez Właściciela.


==Pytania do dyskusji==
==Pytania do dyskusji==
# Czy zastosowanie odpowiednio spreparowanego obiektu obserwatora we wzorcu Observer może zagrozić stabilności aplikacji? Jak musiałby wyglądać ten obiekt?
# Wzorzec Prototype jest zaimplementowany w języku Java w postaci metody ''clone()'', wykonującej tzw. płytką kopię obiektu. Dlaczego domyślnie nie jest wykonywana głęboka kopia obiektu?
# Czy zastosowanie wzorca Pool of Objects w stosunku do obiektów bezstanowych ma sens? Jeżeli tak, to w jakich sytuacjach?
# Co spowodowałoby uczynienie ogniw łańcucha we wzorcu Chain of Responsibility obiektami przechowującymi stan żądania?  
# W jaki sposób można zastąpić obiekty Singleton rozwiązaniami o równoważnej funkcjonalności?


==Literatura==
==Literatura==

Aktualna wersja na dzień 09:37, 30 paź 2006

Ćwiczenie 6. Wzorce projektowe cz. II

Informacje wstępne

Ćwiczenie jest realizowane w języku Java w środowisku Eclipse 3.2. Przed przystąpieniem do realizacji ćwiczenia należy zapozanać się z wykładem. Ćwiczenie jest kontynuacją cyklu związanego z wzorcami projektowymi. Celem jest zastosowanie kolejnych wzorców w przykładowym systemie obiektowym dotyczącym banku.

Instalacja

Przygotowanie do ćwiczenia polega na zainstalowaniu JDK 5.0 [1] oraz środowiska Eclipse [2] w wersji 3.2 Ćwiczenie jest kontynuacją poprzedniego, dlatego należy prowadzić prace w dotychczasowym projekcie.

Zadanie 1

Zaimplementuj w systemie bankowym mechanizm naliczania oprocentowania w postaci wzorca State. Uwzględnij trzy rodzaje oprocentowania:

  • oprocentowanie typu A: 2% do kwoty 800 PLN oraz 4% od kwoty powyżej 800 PLN
  • oprocentowanie typu B: 3% do kwoty 1000 PLN oraz 5% od kwoty powyżej 1000 PLN
  • oprocentowanie typu C: 3.5%, niezależnie od wartości salda na rachunku klienta

Mechanizmy naliczania oprocentowania należy zaimplementować w postaci osobnych klas, dziedziczących po wspólnej nadklasie lub implementujących wspólny interfejs.

Zmiana oprocentowania związanego z rachunkiem bankowym polega na zmianie bieżącego obiektu reprezentującego oprocentowanie. Polecenia naliczenia odsetek powinno być delegowane do bieżącego obiektu reprezentującego oprocentowanie. Operacja zmiany odsetek powinna być zaimplementowana podobnie jak inne operacje bankowe, tj. jako realizacja wzorca Command.

Zwróć uwagę, aby obiekty reprezentujące oprocentowanie były bezstanowe, tzn. nie przechowywały informacji związanej z rachunkiem (np. wysokości salda). Referencja do rachunku powinna być przekazywana obiektowi reprezentującemu oprogramwanie jako parametr metody obliczającej odsetki.

Zadanie 2

Wyłącz z klasy Rachunek interfejs ProduktBankowy, który może posiadać także inne implementacje (np. Lokata, Kredyt). Następnie stwórz metodę-fabrykę, która pozwoli hermetyzować sposób tworzenia instancji produktu bankowego. Powinna ona przyjmować parametry, które określają typ tworzonego obiektu.

Pytania do dyskusji

  1. Wzorzec Prototype jest zaimplementowany w języku Java w postaci metody clone(), wykonującej tzw. płytką kopię obiektu. Dlaczego domyślnie nie jest wykonywana głęboka kopia obiektu?
  2. Co spowodowałoby uczynienie ogniw łańcucha we wzorcu Chain of Responsibility obiektami przechowującymi stan żądania?

Literatura

  1. E. Gamma, R. Helm, R. Johnson, J. Vlissides "Design Patterns: Elements of Reusable Object-Oriented Software". Addison-Wesley, 1995.
  2. D. Gallardo "Java Design Patterns 101". [IBM]
  3. J. Cooper "Java. Wzorce projektowe". Helion, 2001
  4. A. Shalloway, J. R. Trott "Programowanie zorientowane obiektowo. Wzorce projektowe". Wydanie II, Helion, 2005.