AOP hängt von zwei Dingen:
- Die Fähigkeit
- Ein Mechanismus zusätzlichen Code in eine bestehende Codeeinheit einzuspritzen Bedingungen zu setzen, wenn der Code eingespritzt werden soll.
Dies wird gemeinhin als Code Weben bezeichnet. Es ist eine Spezialisierung innerhalb der größeren Studie der Programmtransformation.
JIT-kompilierte Sprachen haben mehr Optionen zum Implementieren des Codewebens als statisch kompilierte Programme, weil mehr Informationen im Bytecode/IL erhalten bleiben. Sie unterstützen auch die Reflektion, die die Möglichkeit bietet, Code zur Laufzeit zu manipulieren.
Delphi.NET und Prism haben denselben Zugriff auf diese Funktionen wie jede andere .NET-Sprache.
Es gibt zwei AOP-Frameworks für Delphi Win32, die mir bekannt sind. Die erste ist MeAOP, die bereits erwähnt wurde. Die zweite ist Infra. Beide Projekte verfolgen einen ähnlichen Ansatz wie AOP. Sie verwenden eine Kombination aus RTTI und cleverer Zeigermanipulation, um Methodenaufrufe abzufangen, sodass Sie vor oder nach dem Methodenaufruf zusätzlichen Code ausführen können. Sie definieren Ihr übergreifendes Feature als eine Unterklasse der AOP-Klasse des Frameworks. Sie registrieren die Methoden, die abgefangen werden sollen, indem Sie den Methodennamen als Zeichenfolgenargument an das AOP-Framework übergeben.
Beide Frameworks sind noch aktiv entwickelt und sind tatsächlich größer als nur AOP. Leider ist die Dokumentation etwas spärlich (und in Infra's Fall meistens in Portugiesisch)
Ein anderes Projekt versuchte AOP durch den Quellcode, der 2004 mit etwas Erfolg zurückwebte. Im Grunde bauten sie einen Aspekt-Weber auf einem universellen Programm-Transformationstool namens DMS auf und benutzten es, um Code vor der Kompilierung in Delphi-Quelldateien einzufügen. Ihre Aspekt orientierte Sprache wurde in erster Linie von AspectJ beeinflusst.
http://www.gray-area.org/Research/GenAWeave/ enthält Links zur Originalarbeit und Präsentation sowie einige Videos zum Transformationsprozess.
Es kann auch möglich sein, Laufzeitcode-Instrumentierung zu verwenden, um dies auch zu erreichen. Es ist eine Technik, die von einigen Profilern verwendet wird, um Counter zu injizieren und Traces in den laufenden Code zu stapeln, ohne die ursprüngliche Quelle zu modifizieren. Eine ähnliche Technik könnte verwendet werden, um überschneidende Probleme in eine statisch kompilierte ausführbare Datei einzufügen. Das PinTool Projekt ist ein gutes Beispiel dafür.
Für das Delphi-Prisma gibt es jetzt eine Out-of-the-Box-AOP-Unterstützung: http://prismwiki.codegear.com/en/Cirrus – Miel
AOP kann auch mit einer virtuellen Schattenmethodentabelle (VMT) durchgeführt werden, Weben ist nicht möglich die einzige Option. – Johan
Pflege um zu erarbeiten? –