Begriffe der Aspektorientierten Programmierung

Die Begriffe der Aspektorientierte Programmierung

Das AOP-Konzept wurde in einem vorherigen Artikel vorgestellt. Darin wurden Aspekte an Hand von Querschnittsfunktionen eingeführt, die auf Schnittstellen-Ebene vorhandene Implementierungen erweitern. AOP verfeinert dieses Vorgehen jedoch noch deutlich. Die zum detaillierten Verständnis notwendigen Begriffe der Aspektorientierten Programmierung werden im Folgenden definiert.

Joinpoints

Ein Joinpoint ist eine identifizierbare Stelle innerhalb eines compilierten Programms. Prinzipiell ist damit jegliche native Bytecode-Anweisung ein Joinpoint. AOP schränkt diese Möglichkeiten jedoch drastisch ein und definiert als mögliche Joinpoints Funktionsaufrufe (call), Funktionsausführungen (execution), aber auch eine Zugriffe auf Attribute einer Datenstruktur (get, set), Exception Handler (handler) oder Konstruktoraufrufe. Schleifen oder Abfragen sind zwar auch “identifizierbare Stellen”, werden aber von AOP nicht unterstützt. Es fällt auch schwer, für Kontrollstrukturen allgemeine Aspekte zu finden.

Zwei Hinweise seien hier noch gegeben:

  • Joinpoints werden in der Literatur auch als “primitive Pointcuts” bezeichnet.
  • Ein “Jointpoint” wie der Münchner Monopteros ist natürlich etwas vollkommen anderes. Allerdings liefert eine Recherche nach den Begriffen “AOP + Jointpoint” erfreulich viele Treffer…

Pointcuts

Ein Pointcut ist eine logische Oder-Verknüpfung einzelner Joinpoints. Um die Formulierung von Pointcuts zu erleichtern verwendet AOP eine Selektionssprache mit Jokerzeichen. So könnte beispielsweise ein Pointcut definieren, dass alle Funktionen find* selektiert werden sollen.

Advices

Ein Advice ist die eigentliche Aspekt-Logik von Anweisungen, die an einem Pointcut ausgeführt werden soll. Advices können vor (before), nach (after) sowie den Pointcut klammernd (around) ausgeführt werden.

Aspect

Ein Aspect schließlich dient als Klammerung für einen Pointcut und einen Advice.

Arbeitsweise eines AOP-Frameworks

Mit diesen Begriffen kann die Arbeitsweise eines AOP-Frameworks folgendermaßen beschrieben werden:

  1.  Ausgangspunkt ist der Bytecode der Anwendung. Dieser enthält keine Aspekt-Logik.
  2. Der im Aspekt definierte Pointcut selektiert im Bytecode die Stellen der Anwendung, an denen das Framework die Aspekt-Logik hinzufügen soll.
  3. An Hand der gegebenen Aspekt-Logik wird Bytecode generiert und nach den Regeln des Advices an die selektierten Pointcuts “eingewebt”. Damit wird effektiv die Aspekt-Logik an verschiedene Stellen dupliziert eingetragen. Dies ist jedoch keine unzulässige Code-Replikation, der Quellcode der Anwendung bleibt “sauber”.

Dieser Ablauf muss selbstverständlich bei jeder Änderung und Compilierung der Sourcen wiederholt werden. Diese erreicht man durch eine Integration des Frameworks in eine Entwicklungumgebung oder einen automatisierten Buildprozess.

Realisierung von Aspekten

Mit den eben definierten Begriffen ist es möglich, Aspekte abstrakt zu definieren. Für die konkrete Umsetzung muss die verwendete Plattform Werkzeuge und Verfahren zur Verfügung stellen. Dies ist in dynamischen Skript-Sprachen wie JavaScript oder Ruby trivial. Komplizierter wird es in statisch typisierten Sprachen wie Java. Dies wird im dritten Teil dieser Serie behandelt.

Seminare zum Thema

Dr. Rainer Sawitzki / Dr. Rainer Sawitzki

Nach seinem Studium der Physik und anschließender Promotion Wechsel in die IT-Branche. Seit mehr als 20 Jahren als Entwickler, Berater und Projektleiter vorwiegend im Bereich Java und JavaScript unterwegs. Parallel dazu in der Entwicklung und Durchführung von hochwertigen Seminaren für die Integrata im Einsatz.

Schreibe einen Kommentar