Zpo-12-lab

From Studia Informatyczne

Spis treści

Ćwiczenie 12. Programowanie aspektowe

Informacje wstępne

Ćwiczenie jest realizowane w językach Java oraz AspectJ. Sugerowanym środowiskiem jest Eclipse 3.2 wyposażone w plug-in AJDT

Przed przystąpieniem do realizacji ćwiczenia należy zapozanać się z wykładem oraz przeczytać serię artykułów autorstwa R. Laddada na stronie JavaWorld

Celem ćwiczenia jest zaimplementowanie prostych aspektów umożliwiających modyfikację zachowania programu w języku Java.

Instalacja

Przygotowanie do ćwiczenia polega na zainstalowaniu JDK 5.0, środowiska Eclipse w wersji 3.2 oraz plug-ina AJDT

Zadanie 1

Zadanie polega na stworzeniu aspektu, który uniemożliwi wywołanie metody napiszImie() z parametrem Alicja, który powoduje zgłoszenie wyjątku. Powinien przechwycić wywołanie metody, a następnie, w zależności od przekazanych jej parametrów, przekazać jej sterowanie lub ją zignorować.

Po napisaniu kodu zdekompiluj otrzymany bajtkod i przanalizuj sposób łączenia kodu źródłowego i aspektów.

Zadanie 2

Zadanie polega na stworzeniu aspektu, który spowoduje, że wywołanie metody toString() w klasie Osoba spowoduje zwrócenie wyniku będącego połączeniem wyniku metody imie() oraz nazwisko(), rozdzielonych pojedynczą spacją.

Zadanie 3

Napisz aspekt dla systemu bankowego rozwijanego w ćwiczeniach dotyczących wzorców projektowych, który utworzy w każdym rachunku listę będącą historią operacji na rachunku oraz spowoduje dopisanie do niej informacji o każdej operacji wykonywanej na rachunku.

Pytanie do dyskusji

Jaka jest różnica pomiędzy wykorzystaniem zmiennej thisJoinPoint w języku AspectJ a użyciem w podobnych celach mechanizmu Java Reflection? Które z rozwiązań jest efektywniejsze? Dlaczego?

Literatura

  1. M. Stochmiałek "Wprowadzenie do programowania aspektowego". e-Informatyka
  2. R. Laddad "I want my AOP!" (Part 1, 2, 3). JavaWorld
  3. R. Laddad "AspectJ in Action. Practical Aspect-oriented Programming". Manning Publications, 2003.
  4. N. Lesiecki "Improve modularity with AspectJ programming". IBM