Aspektorientierte Programmierung
Aspektorientierte Programmierung (AOP) ist ein Begriff der Informatik. Es handelt sich hier um orthogonale Programmierung. Semantisch und physisch unabhängige Programmstrecken werden zur Kompilierungszeit zu einem Ganzen verwoben.Orthogonal bedeutet hier, dass Eigenschaften von Methoden quasi "senkrecht" zur normalen Programmierrichtung definiert werden. Es kann also z.B. an einer zentralen Stelle festgelegt werden, dass alle Methoden, die bestimmten Bedingungen genügen (z.B. alle öffentlichen Methoden einer Menge von Klassen) bei ihren Aufruf in eine Log-Datei protokollieren. Ohne aspektorientierte Programmierung müsste in jede der Methoden gesondert eine Schreiboperation eingefügt werden.
In der aspektorientierten Programmierung unterscheidet man zwischen Komponenten und Aspekten. Komponenten lassen sich mit einer Programmiersprache verschalen, Aspektee hingegen nicht. Als anschauliches Beispiel sei hier ein numerischer Algorithmus und die darin enthaltene Genauigkeit zu erwähnen. Der numerische Algorithmus kann als Komponente verschalt werden. Die Genauigkeit ist als Aspekt zu formulieren. Dieser Aspekt greift womöglich quer durch mehrere Komponenten. Ein Weaver bringt Komponenten und Aspekte zur Kompilierungszeit zusammen. In unserem Beispiel würden der numerische Algorithmus (Komponente) mit der definierten Genauigkeit (Aspekt) zu einem Ganzen, zu einem ausführbaren Programm kompiliert werden.
AspectJ ist eine Erweiterung der Programmiersprache Java. Es lassen sich hiermit Aspekte formulieren. Aspekte und Komponenten können in verschiedenen Programmiersprachen definiert sein.
Vorteil der Aspektorientierung ist die logische und physische Trennung der Semantik (der Komponente) von dem technischen Detail (Aspekt). Als Nachteil der aspektorientierten Programmierung sei hier insbesondere der Overhead, der nach dem Weaving im generierten Programm entsteht, erwähnt. Dies führt im Allgemeinen zu Performance-Einbußen.
Siehe auch: Funktionale Programmierung, Prozedurale Programmierung, Objektorientierte Programmierung, Reflexion (Programmierung)