Io-8-lab-wiki

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Ćwiczenie 8. Projektowanie i wzorce projektowe

Informacje wstępne

Ćwiczenie stanowi ilustrację do wykładu nt. wzorców projektowych. Przed przystąpieniem do realizacji ćwiczenia należy zapozanać się z wykładem oraz rozdziałem poświęconym wzorcowi Observer w książce Shallowaya i Trotta. Celem ćwiczenia jest zaimplementowanie wzorca Observer w prostym systemie obsługi.

Zadanie

Napisz program stanowiący implementację systemu producentów i konsumentów z wykorzystaniem wzorca Observer.

W programie występują trzy rodzaje obiektów:

  • Producenci, będący instancjami klasy Producent. Wstawiają oni do obiektu Magazyn wyprodukowane przez siebie produkty (kolejne liczby naturalne).
  • obiekt Magazyn, który istnieje dokładnie w jednej kopii
  • Konsumenci, będący instancjami klasy Konsument. Usuwają oni z obiektu Magazyn wstawione tam przez Producentów liczby oraz wyświetlają ich wartości na ekranie.

W programie obiektem aktywnym jest Magazyn. Jest on obiektem obserwowanym przez wszystkich Producentów i wszystkich Konsumentów, stanowiących dwie grupy jego obserwatorów. Magazyn w momencie gdy jest posiada miejsce do wstawienia nowych elementów, powiadamia o tym wszystkich obserwujących go Producentów. W odpowiedzi każdy z nich, po upewnieniu się, że faktycznie może wstawić nowy element, produkuje go i wstawia do Magazynu. W momencie gdy Magazyn przechowuje jakiekolwiek elementy, powiadamia o tym wszystkich obserwujących go Konsumentów. W odpowiedzi każdy z nich, po upewnieniu się, że faktycznie może odebrać element, usuwa go z Magazynu i wyświetla jego wartość na ekranie.

Zatem obiekty Producent i Konsument definiują jedynie metody produkujące i konsumujące, natomiast głównym wątkiem jest powtarzająca się w pętli sekwencja powiadomień wysyłanych do Producentów i Konsumentów przez obiekt Magazyn.

Podczas uruchomienia programu do Magazynu (o określonej z góry pojemności) dołączane są jako jego obserwatory obiekty Producentów i Kosumentów. Następnie wykonywana jest opisana powyżej pętla.

Pytania do dyskusji

  1. Jakie powiązania istnieją pomiędzy wszystkimi obiektami w tym systemie? Jaki jest wpływ Producentów i Konsumentów na siebie nawzajem?
  2. Czy Producent i Konsument mogą być instancjami tej samej klasy?
  3. Jakie możliwe zmiany w tym systemie mogą zostać wprowadzone (czyli jaki jest zakres jego zmienności) bez konieczności zmieniania struktury sterowania programu?

Literatura

  1. J. Cooper "Java. Wzorce projektowe". Helion, 2001
  2. A. Shalloway, J. R. Trott "Programowanie zorientowane obiektowo. Wzorce projektowe. Wydanie II". Helion, 2005.