4@KIOP'2012 Refaktoryzacja kodu Javy do AspectJ
typ projektu: klasyczny
edycja: 2012
liczba studentów w projekcie 3 - 5
kierownik: -
AspectJ to rozszerzenie Javy o konstrukcje programowania aspektowego. Programowanie aspektowe powstało z myślą o lepszej separacji tzw. zagadnień przecinających, czyli takich których implementacja w języku obiektowym jest rozproszona po systemie i przeplata się z implementacją innych zagadnień z powodu braku odpowiednich abstrakcji programistycznych. Dobrym przykładem zagadnienia przecinającego jest zadanie zmierzenia czasu wykonywania każdej metody w danym programie i wyświetlenie tej informacji na ekran. Implementacja tego zagadnienia w AspectJ wygląda następująco:
public aspect TimeLogging { //1
Object around(): execution(* *.*(..)) { //2
long start = System.currentTimeMillis(); //3
Object tmp = proceed(); //4
long end = System.currentTimeMillis(); //5
Signature sig = thisJoinPointStaticPart.getSignature();//6
System.out.println(sig +" - "+ (end-start)); //7
return tmp; //8
}
}
Wiersz drugi powoduje przechwycenie próby wykonania dowolnej metody z dowolnej klasy i zamiast niej wykonanie kodu around(). Z kolei wiersz czwarty powoduje wykonanie oryginalnego kodu przechwyconej metody. Aby zrealizować to samo zadanie w języku obiektowym, wiersze 3, 5 i 7 należałoby umieścić w każdej metodzie (lub zastosować refleksję, co również nie jest eleganckim rozwiązaniem). Inne klasyczne zagadnienia przecinające to obsługa wyjątków, synchronizacja kodu współbieżnego, autoryzacja, tworzenie logów systemowych.
Cel projektu:
Porównanie możliwości paradygmatu obiektowego i aspektowego pod względem modularyzacji i ewolucji oprogramowania.
Zadania do wykonania:
1. Zapoznać się z dokumentacją AspectJ (udostępnię materiały).
2. Zapoznać się z technikami/wzorcami/przykładami refaktoryzacji z Javy do AspectJ (udostępnię materiały).
3. Wybrać program (rozmiar około 1KLOC lub więcej) zaimplementowany w Javie, zawierający zagadnienia przecinające.
4. Przenieść implementację zagadnień przecinających do aspektów.
5. Zaproponować dwa lub więcej scenariusze rozszerzenia/modyfikacji programu.
6. Dla obu wersji (obiektowej i aspektowej) zaimplementować rozszerzenia.
7. Ocenić mocne i słabe strony obu wersji.
Członkowie zespołu
Plakat
Semestr 1 : Brak plakatu |
Prezentacja / Dokumentacja
Semestr 1 : Brak prezentcji |