wtorek, 18 marca 2008

AOP wstęp

Zainspirowany blogiem Jacka Laskowskiego postanowiłem zacząć opisywać moje doświadczenia związane z Java i różnymi jej aspektami. Ostatnio trafiło mi się zdanie zmodyfikowania systemu uprawnień do aplikacje do tworzenia grafiki (plakatów, ulotek, automatyzacji całego procesu drukwoania). Po krótkiej rozmowie z osobą która stworzyła już pierwszą wersje pseudo działających systemu uprawnień, okazało się, że powstało on w ciągu jednego dnia przed jakaś prezentacja produktu. A rozwiązanie polegało na tym, że wszędzie w kodzie odpowiedzialnym za wyświetlanie modelu było wstawiane
if(masz_dostep()){
rysuj();
}
niestety jak to często bywa system zaczął się rozrastać i coraz większe narzekanie na dodawanie jakiś if() . Po krótkim namyślę, postanowiłem na nowo napisać system uprawnień przy użyciu AOP.
A więc zaczynamy, definicja według Wikipedii:
Programowanie aspektowe (aspect-oriented programming, AOP) to paradygmat tworzenia programów komputerowych wspomagający separację zagadnień i rozdzielenie programu na części w jak największym stopniu niezwiązane funkcjonalnie.
W czym AOP powinno nam pomóc:
- zagadnienia przenikające ( crosscutting concerns)
- ograniczeniu powielaniu kodu
- wprowadzeniem dodatkowych zachowań za pomocą tak zwanych przecięć (pointcuts)
- możliwość sprawdzenia pewnych warunków przed wywołaniem metody jak i po, oraz przechwycenie wyjątku jeśli takowy metoda rzuca
Najważniejsze pojęcia z AOP a później już tyko praktyka (AspectJ):
- przecięcia (pointcuts) określają punkty złączeń dla których należy stosować poszczególne rady (advices)
- rada (advice) określa co należy zrobić w punkcie złączenia, rada jest z reguły definiowana w obiektach przechwytujących metody (method interception)
- inter-type declarations - pozwalają programiście na zmianę statycznej struktury i relacji pomiędzy klasami
- aspects - jednostka modularyzacji dla zagadnień przenikających
Po krótkim wstępie w następnej części już praktyka na podstawie AspectJ.

2 komentarze:

Unknown pisze...

Cieszę się, że mogłem być dla Ciebie inspiracją. Dodatkowo cieszy mnie fakt, że dotknąłeś tematu, który dotykałem raczej pobieżnie. Już zasubskrybowałem Twój blog i czekam na kolejne odcinki o AOP.

Piotr Gabryanczyk pisze...

Pisalem jakis czas temu o przykladach zastosowan AOP.
Zapraszam:
http://piotrga.wordpress.com/2008/04/01/aspect-oriented-programming-real-live-examples/