AOP zależy od dwóch rzeczy:
- umiejętność wstrzyknąć dodatkowy kod do istniejącej jednostki kodu
- mechanizm umieścić warunków na którym kod należy wstrzykiwać.
Jest to powszechnie nazywane tkanie kodu. Jest to specjalizacja w szerszym badaniu transformacji programu.
Skompilowane języki JIT mają więcej opcji implementacji tkania kodu niż programy skompilowane statycznie, ponieważ więcej informacji jest przechowywanych w kodzie bajtowym/IL. Wspierają także odbicie, które oferuje możliwość manipulowania kodem w czasie wykonywania.
Delphi.NET i Prism mają taki sam dostęp do tych możliwości, jak każdy inny język .NET.
Są dwie struktury AOP dla Delphi Win32, o których jestem świadomy. Pierwsza to MeAOP, o której już wspomniano. Drugi to Infra. Oba projekty mają podobne podejście do AOP. Używają kombinacji RTTI i inteligentnej manipulacji wskaźnikami do przechwytywania wywołań metod, dzięki czemu można uruchomić dodatkowy kod przed lub po wywołaniu metody. Możesz zdefiniować swoją funkcję przekrojową jako podklasę klasy AOP ramki. Rejestrujesz metody, które chcesz przechwycić, przekazując nazwę metody jako argument łańcuchowy do struktury AOP.
Obie platformy są nadal aktywnie rozwijane i mają większy zasięg niż tylko AOP. Niestety, dokumentacja jest nieco skąpa (aw przypadku Infry głównie w języku portugalskim)
Kolejny projekt próbował AOP za pomocą kodu źródłowego, powracającego w 2004 roku z pewnym sukcesem. Zasadniczo zbudowali tkacz aspektu na uniwersalnym narzędziu do transformacji programów o nazwie DMS i użyli go do wstrzyknięcia kodu do plików źródłowych delphi przed kompilacją. Na ich język zorientowany na aspekt wpłynął przede wszystkim AspectJ.
http://www.gray-area.org/Research/GenAWeave/ zawiera linki do oryginalnego dokumentu i prezentacji, a także niektóre filmy z procesu transformacji.
Możliwe jest również użycie oprzyrządowania kodu wykonawczego, aby to osiągnąć. Jest to technika używana przez niektóre narzędzia profilujące do wstrzykiwania liczników i śledzenia stosów w uruchomionym kodzie bez modyfikowania oryginalnego źródła. Podobną technikę można zastosować do wstrzykiwania problemów przekrojowych do statycznie skompilowanego pliku wykonywalnego. Projekt PinTool jest tego dobrym przykładem.
Dla pryzmatu Delphi dostępna jest natychmiastowa obsługa AOP: http://prismwiki.codegear.com/en/Cirrus – Miel
AOP można również wykonać za pomocą wirtualnej tabeli metod cienia (VMT), tkactwo nie jest jedyna opcja. – Johan
Chcesz opracować? –