Zpo-13-lab
Ćwiczenie 13. Programowanie komponentowe
Informacje wstępne
Ćwiczenie jest realizowane w języku Java. Sugerowanym środowiskiem jest Eclipse 3.2 wyposażone w plug-in Spring-IDE
Przed przystąpieniem do realizacji ćwiczenia należy zapozanać się z wykładem oraz przeczytać artykuł nt Spring Framework zamieszczony na TheServerSide
Celem ćwiczenia jest implementacja prostej aplikacji komponentowej w oparciu o kontener IoC Spring
Instalacja
Przygotowanie do ćwiczenia polega na zainstalowaniu JDK 5.0, bibliotek Springa, środowiska Eclipse w wersji 3.2 oraz wtyczkę SpringIDE wspierającą rozwój aplikacji Spring. Sposób wykorzystania tej wtyczki został omówiony w artykule znajdującym się tutaj.
Plik z szablonem projektu znajduje się tutaj.
Zadanie
Zadanie polega na stworzeniu prostego kalkulatora realizującego operacje dwuargumentowe: +, -, *, /. Wejściem dla kalkulatora są liczby dziesiętne lub binarne, zapisane w pliku lub wczytywane z konsoli. Program powinien być złożony z komponentów -- klas realizujących dowolną dwuargumentową operację, której kontrakt jest opisany za pomocą interfejsu, np. Dodawanie, Odejmowanie.
Komponentem spinającym operacje matematyczne powinien być centralny komponent Kalkulator, który będzie z nich korzystał.
Jedyne zależności w programie powinny łączyć Kalkulator i interfejs operacji matematycznej. Dodanie komponentu reprezentującego nową operację matematyczną powinno wymagać jedynie modyfikacji pliku konfiguracyjnego applicationContext.xml z definicjami komponentów.
Rozszerzenie zadania
Należy rozszerzyć możliwości programu o:
- wczytywanie danych liczbowych zapisanych w innych systemach reprezentacji, np. binarnym lub heksadecymalnym
- wykonywanie operacji wejścia/wyjścia za pomocą konsoli lub plików
Pytanie do dyskusji
Uważa się, że zastosowanie wzorca Inversion of Control pozwala na ograniczenie zależności pomiędzy komponentami oraz że promuje abstrakcyjny styl programowania. Czy stosowanie IoC rzeczywiście wpływa na wartości metryk obiektowych dotyczących powiązań między obiektami, zależności oraz abstrakcyjności? Jak zinterpretować tę odpowiedź?
Literatura
- M. Fowler "Inversion of Control Containers and the Dependency Injection pattern". http://www.martinfowler.com/articles/injection.html
- R.C. Martin "Dependency Inversion Pattern". http://www.objectmentor.com/resources/articles/dip.pdf