Programowanie aspektowe
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.
Autorem koncepcji jest Gregor Kiczales i jego zespół w firmie Xerox PARC. Stworzyli oni również pierwsze i wciąż najbardziej popularne aspektowe rozszerzenie dla języka Java - AspectJ.
Przyczyna zapotrzebowania
Każde realizowane zagadnienie pociąga za sobą w praktyce potrzebę realizacji zagadnień pobocznych. Na przykład program przelewający pieniądze na kontach bankowych realizuje nie tylko swój główny cel (tj. pomniejszenie zawartości jednego konta i powiększenie zawartości drugiego), ale równocześnie z nim również zagadnienia logowania, bezpieczeństwa, spójności transakcyjnej, autoryzacji, synchronizacji wielowątkowej i wiele innych. Jest to zjawisko normalne, wynikające ze złożoności wymagań klienta. Zagadnienia te są w dużym stopniu rozłączne pomiędzy sobą pod względem funkcjonalnym. Aby je zrealizować, programista musi poprzeplatać ich implementacje (tzw. warkocz), co czyni kod mniej czytelnym, bardziej podatnym na błędy, trudniejszym w modyfikacji.
Programowanie aspektowe zapobiega tym negatywnym skutkom oddzielając fizycznie kod każdego zagadnienia poprzez umieszczenie ich w oddzielnych aspektach i logiczne zdefiniowanie punktów interakcji pomiędzy nimi.