print
A A A

Programowanie aspektowe

Motywacją do rozwoju programowania aspektowego jest obserwacja, że w programach pojawiają się elementy dwóch typów:

  • elementy dające się hermetyzować w jednostki o ściśle określonej funkcjonalności, dobrze oddzielone od innych (realizowane poprzez komponenty, klasy, a także funkcje)‏
  • elementy, które „przecinają” (cross-cut) jednostki hermetyzacji, określające pewien aspekt całej grupy jednostek hermetyzacji, aspekt który powinien być jednakowo traktowany we wszystkich grupach

Przykładami aspektów są np.: organizacja dostępu do pamięci, organizacja komunikacji między komponentami, synchronizacja komponentów, zagwarantowanie bezpieczeństwa, obsługa awarii i błędów, optymalizacja.

Sposobem realizacji programowania aspektowego jest wprowadzenie do jednostek hermetyzacji danego języka programowania możliwości modyfikacji określonego aspektu danej jednostki. Sposobem osiągnięcia tego celu jest np. wprowadzenie punktów łączenia (join points) – miejsc gdzie modyfikacja jest możliwa.

Drugim mechanizmem jest możliwość kontroli danego aspektu dla całej grupy jednostek hermetyzacji:

  • odpowiedni język umożliwia wyrażenie działań (advices) realizowanych w momencie osiągnięcia punktu łączenia w dowolnej jednostce hermetyzacji
  • faktyczne wykrycie punktów łączenia i realizacja przewidzianych działań dokonywane jest często w trakcie wykonania kodu (wymaga to współpracy środowiska wykonania)

Przykład w AspectC++

#include<cstdio>
aspect Tracing{  
//   wyświetla nazwę funkcji przed jej wykonaniem
     advice execution („% ...::%(...)”) : before () {
          std::printf („in %s\n”, JoinPoint::signature ());
     }
}

Programowanie aspektowe jest realizowane na dzień dzisiejszy przez rozszerzenia istniejących języków programowania (np. AspectJ dla Javy i co najmniej 50 innych dla innych języków i środowisk, np. .NET)‏. Programowanie aspektowe staje się dostępne w coraz większej liczbie środowisk wykonywania oprogramowania.

Programowanie aspektowe jest związane z inną cechą oprogramowania: mechanizmem refleksji, za pomocą którego program może modyfikować swoje własne zachowanie w trakcie wykonania. Programowanie aspektowe wprowadza szereg nierozwiązanych jeszcze problemów związanych np. z wydajnością i bezpieczeństwem kodu.

«Ponowne użycie kodu     RAD»