Zpo-5-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
 
(Nie pokazano 1 pośredniej wersji utworzonej przez tego samego użytkownika)
Linia 1: Linia 1:
=Ćwiczenie 5. Metryki obiektowe=
=Ćwiczenie 5. Wzorce projektowe cz. I=


==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 ocena jakości oprogramowania za pomocą metryk obiektowych
Celem ćwiczenia jest zastosowanie wybranych wzorców projektowych w przykładowym systemie obiektowym dotyczącym [[ZPO-bank|banku]].


==Instalacja==
==Instalacja==
Przygotowanie do ćwiczenia polega na zainstalowaniu [http://java.sun.com/javase/downloads/index.jsp JDK 5.0] oraz środowiska [http://www.eclipse.org/downloads Eclipse] 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 i wyborze przestrzeni roboczej należy wykonać instalację wtyczki [http://metrics.sourceforge.net/projects/metrics Eclipse Metrics], która pozwoli na automatyczny pomiar wybranych metryk obiektowych dla programów w środowisku Eclipse.
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.


Ostatni krok polega na zaimportowaniu projektu [[media:sudoku.zip|RCP SuDoKu], stanowiącego kopię projektu RCP SuDoKu ((c) by Henning Vitting) dostępnego w serwisie SourceForge.net
==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.


==Zadanie==
Należy zaimplementować operacje wpłaty, wypłaty i przelewu.
Zadanie polega na obliczeniu metryk obiektowych za pomocą wtyczki Eclipse Metrics dla klas należących do projektu RCP SuDoKu, oraz zinterpretowaniu ich wartości.  


Opcje konfiguracyjne wtyczki Eclipse Metrics są dostępne w menu Preferences->Metrics Preferences. Możliwe jest m.in. określanie kolejności metryk oraz włączenie ostrzeżeń o wykroczeniu metryki poza dopuszczalny zakres
==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.


[[image:zpo-5-metrics-1.png]]
Właściciel rachunku jest obiektem, a docierające do niego komunikaty dołączane do listy przechowywanej przez Właściciela.
 
Określenie zakresów dopuszczalnych dla każdej z metryk jest możliwe w kolejnej zakładce tego okienka
 
[[image:zpo-5-metrics-2.png]]
 
Aby uruchomić obliczanie metryk, należy w preferencjach projektu w opcji Metrics zaznaczyć ''Enable Metrics'', a następnie wymusić skompilowanie kodu: wyłączyć automatyczne budowanie kodu (Project->Build Automatically) oraz wywołać kompilację (Project->Build Project). Po skompilowaniu kodu można ponownie włączyć automatyczne budowanie projektu
 
[[image:zpo-5-metrics-3.png]]
 
Wtyczka Eclipse Metrics umożliwia także wizualizację zależności pomiędzy pakietami. Zależność pomiędzy pakietami występuje wówczas, gdy klasy należące do paietów od siebie zależne.
 
Wygenerowanie widoku zależności pozwala określić pakiety abstrakcyjne i niestabilne oraz zidentyfikować cykle zależności (oznaczane na czerwono i powiązane liczbami w kółku: pierwsza liczba oznacza liczbę pakietów uczestniczących w cyklu, a druga najdłuższą ścieżkę łączącą pakiety w tej grupie). Siła zależości jest prezentowana w postaci długości linii łączącej pakiety.
 
Możliwe jest także prześledzenie szczegółowych zależności pomiędzy poszczególnymi klasami: po kliknięciu prawym klawiszem w kółko należy wybrać z menu kontekstowego opcję ''Analyze details''. Wówczas pakiety są oznaczane zielonymi prostokątami, natomiast pojedyncze klasy - granatowymi.
 
Za pomocą wtyczki Eclipse Metrics należy wyznaczyć wartości następującyc metryk:
* dotyczących powiązań między obiektami: Ce, Ca
* dotyczących spójności obiektów: LCOM
* dotyczących niestabliności i abstrakcyjności klas: I, A
* dotyczących dziedziczenia: NOC, DIT


==Pytania do dyskusji==
==Pytania do dyskusji==
* O czym świadczy niska wartość metryki Instability pakietu Engine?
# Czy zastosowanie odpowiednio spreparowanego obiektu obserwatora we wzorcu Observer może zagrozić stabilności aplikacji? Jak musiałby wyglądać ten obiekt?
* Jaki jest związek metryk Ce i Ca z metrykami CBO i CF?
# Czy zastosowanie wzorca Pool of Objects w stosunku do obiektów bezstanowych ma sens? Jeżeli tak, to w jakich sytuacjach?
* Które metryki są bardziej przydatne do całościowej oceny jakości projektu?  
# W jaki sposób można zastąpić obiekty Singleton rozwiązaniami o równoważnej funkcjonalności?
* Które metryki są skorelowane z innymi?


==Literatura==
==Literatura==
# B. Henderson-Sellers "Object-oriented metrics. Measures of complexity". Prentice-Hall, 1995
# E. Gamma, R. Helm, R. Johnson, J. Vlissides "Design Patterns: Elements of Reusable Object-Oriented Software". Addison-Wesley, 1995.
# B. Walter "Metryki obiektowe jako wskaźniki jakości kodu i projektu". [http://www.inmost.org.pl/articles/Metryki_obiektowe_jako_wskaAniki_jakoAci_kodu_i_projektu/base_view InMoST]
# D. Gallardo "Java Design Patterns 101". [[http://www-128.ibm.com/developerworks/edu/j-dw-javapatt-i.html IBM]]
# L. Williams, D. Ho, S. Smith "Software Metrics in Eclipse" [http://open.ncsu.edu/se/tutorials/metrics NCSU]
# J. Cooper "Java. Wzorce projektowe". Helion, 2001
# A. Shalloway, J. R. Trott "Programowanie zorientowane obiektowo. Wzorce projektowe". Wydanie II, Helion, 2005.

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

Ćwiczenie 5. Wzorce projektowe cz. I

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. Celem ćwiczenia jest zastosowanie wybranych wzorców projektowych 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 Po uruchomieniu środowiska należy zaimportować (menu File->Import->Existing projects into workspace) projekt, w którym będą stosowane wzorce projektowe.

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.

Należy zaimplementować operacje wpłaty, wypłaty i przelewu.

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.

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

  1. Czy zastosowanie odpowiednio spreparowanego obiektu obserwatora we wzorcu Observer może zagrozić stabilności aplikacji? Jak musiałby wyglądać ten obiekt?
  2. Czy zastosowanie wzorca Pool of Objects w stosunku do obiektów bezstanowych ma sens? Jeżeli tak, to w jakich sytuacjach?
  3. W jaki sposób można zastąpić obiekty Singleton rozwiązaniami o równoważnej funkcjonalności?

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.