Przejdź do zawartości

Programowanie aspektowe

Z Wikipedii, wolnej encyklopedii

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[1] i jego zespół w firmie Xerox PARC. Stworzyli oni również pierwsze i wciąż najbardziej popularne aspektowe rozszerzenie dla języka Java - AspectJ.

Microsoft Transaction Server jest uważany za pierwsze znaczące zastosowanie programowania aspektowego (AOP), a następnie Enterprise JavaBeans[2][3].

Przyczyna zapotrzebowania

[edytuj | edytuj kod]

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[4].

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.

Krytyka

[edytuj | edytuj kod]

Najbardziej podstawowym zarzutem wobec programowania aspektowego (AOP) jest to, że przepływ sterowania staje się nieczytelny. Uważa się, że jest to nie tylko gorsze niż powszechnie krytykowana instrukcja GOTO, ale również bliskie analogii do żartobliwej instrukcji COME FROM[5]. Fundamentalna dla wielu definicji AOP cecha "nieświadomości" aplikacji (kod nie zawiera żadnych wskazówek, że zastosowane zostanie doradztwo, które określane jest zamiast tego w punktach przecięcia – pointcut) oznacza, że doradztwo pozostaje niewidoczne, w przeciwieństwie do jawnego wywołania metody. Na przykład można to porównać do programu wykorzystującego instrukcję COME FROM[5].

Przypisy

[edytuj | edytuj kod]
  1. Gregor Kiczales i inni, Aspect-Oriented Programming [online], Xerox Palo Alto Research Center (ang.).
  2. Don Box, Chris Sells, Essential.NET : the common language runtime, Boston : Addison-Wesley, 2003, ISBN 978-0-201-73411-9 [dostęp 2025-01-05].
  3. Ed Roman, Rima Patel Sriganesh, Gerald Brose, Mastering Enterprise JavaBeans, John Wiley & Sons, 22 grudnia 2004, ISBN 978-0-7645-8492-3 [dostęp 2025-01-05] (ang.).
  4. Tal Cohen, Joseph (Yossi) Gil, AspectJ2EE = AOP + J2EEMiddleware Framework [online], Department of Computer Science Technion—Israel Institute of Technology Technion City, Haifa (ang.).
  5. a b Constantinos Constantinides, Therapon Skotiniotis, Maximilian Stoerzer, AOP considered harmful [online], European Interactive Workshop on Aspects in Software (EIWAS) (ang.).