Aspekt

Aspekte werden im Software-Engineering im Zusammenhang mit der aspektorientierten Programmierung (AOP) verwendet, und die nachfolgenden Definitionen ordnen sich in diesen Kontext ein. Aspekte bieten eine Lösung für Crosscutting Concerns - das sind Funktionalitäten die über Modulgrenzen hinweg in unterschiedlichen Komponenten wiederholt benötigt werden. Daher resultieren Aspekte im Allgemeinen nicht aus einer Zerlegung - auch Dekomposition - der Kernfunktionalitäten (Core Concerns) in Klassen, Daten, Prozesse oder Funktionen. Wesentliche Eigenschaften von Aspekten sind, dass diese frei von Seiteneffekten und wiederverwendbar sind.


Zur besseren Unterscheidung und in Anlehnung an die aspektorientierte Programmiersprache AspectJ wird differenziert in statische und dynamische Aspekte. Dabei werden statische Aspekte durch den Compiler verarbeitet währenddessen dynamische Aspekte durch die Laufzeitumgebung gesteuert werden. Aspekte können in Abhängigkeit von ihrer Verwendung in Kategorien eingeordnet werden, zum Beispiel Geschäftsaspekte oder Sicherheitsaspekte. Im Zusammenhang mit der Integration von Aspekten in eine Software spricht man auch davon, dass Aspekte "eingewoben" werden.

Crosscutting Concerns werden die Funktionalitäten eines Software-Systems genannt, die dessen Kernfunktionalitäten Modul übergreifend "quer schneiden" (engl. crosscut). Das können zum Beispiel Funktionen zur Sicherheit, Performance oder auch Fehlerbehandlung sein. Typische Anwendungen sind auch Prozeduren zur Autorisierung und Logging. Diese modular implementierbaren Crosscutting Concerns werden als Aspekte bezeichnet. Zudem resultieren dann Komponenten aus implementierten Core Concerns. Das Prinzip der Trennung der Concerns geht zurück auf Edgar Dijkstra, der es mit Separation of Concerns bezeichnete. Dieses Prinzip der Separation muss also angewendet werden, um die Systemeigenschaften herauszuarbeiten, die dann als ein separates Modul in Form von Aspekten durch das übrige System gewoben werden können.

In der Forschung bezüglich Aspekten, deren Hintergründen, Aufbau und Verwendung, sind durchaus unterschiedliche Definitionen von Aspekten entstanden. Da werden Aspekte

  • einschränkend als funktionale Einheiten bezeichnet, die dann durch das Systemverhalten gewoben werden,
  • Software-Produkte zur Behandlung von Concerns genannt, und die im Idealfall automatisiert mit Basis-Modulen zu einer dann vollständigen Applikation verknüpft werden und
  • als Eigenschaften bezeichnet, die dazu "neigen" funktionale Komponenten quer zu schneiden.
Diese Definitionen sind mehr oder weniger präzise, so dass hier weiterhin von Aspekten im Sinne von Modulen und implementierten Crosscutting Concerns gesprochen wird. Daher sollen auch an dieser Stelle einige allgemeine Eigenschaften von Aspekten nachfolgend zusammengestellt werden:

  • Aspekte haben eine modulare Struktur.
  • Aspekte schneiden andere Aspekte und Komponenten quer (crosscutting).
  • Aspekte müssen frei von Seiteneffekten ein und sollen somit den Zustand eines Systems keinesfalls verändern.
  • Aspekte sollen so konzipiert sein, dass sie wiederverwendbar sind.
  • Aspekte führen immer die gleichen Aktionen aus d.h. sie müssen homogen sein.
  • Aspekte dürfen keinerlei Abhängigkeit von an-deren Aspekten haben.
  • Aspekten sollen transparent aus Sicht der Komponenten sein, die sie quer schneiden.
  • Aspekte und Komponenten sollen flexibel miteinander zu kombinieren sein, man spricht hier auch von Symmetrie.
Für eine bessere Modularisierung der zugrunde liegenden Kriterien können Aspekte wie nachfolgend beispielhaft aufgezeigt kategorisiert werden.

Fehlerbehandlungsaspekte. Können beispielsweise zur Vermeidung von Fehlern bei der Übersetzung dienen.

Geschäftsaspekte. Zur Einhaltung Unternehmens-spezifischer Regeln.

Logging Aspekte. Speichern den Verlauf von Aktivitäten und haben unterschiedliche Möglichkeiten der Anwendung: Fehler-Logging, Profiling, Tracing, oder Auditing.

Nebenläufigkeitsaspekte. Unterstützen die Steuerung von nebenläufigen Prozessen wie beispielsweise bei der Synchronisierung von Prozessen.

Optimierungsaspekte. Darunter können Caching- und Pooling-Aspekte eingeordnet werden, die dann die mehrfache Verwendung von Ressourcen (z.B. Threads, Connections, Speicher) ermöglichen. Dabei werden die Ressourcen in einem zentralen Pool ( Cache) verwaltet, woher sie dann von Prozessen angefordert werden können.

Programmierrichtlinienaspekte. Dies bezieht auf die Umsetzung von Aspekten mit AspectJ. Dort können mit Aspekte auch bestimmte Grundsätze in der Implementierung durchgesetzt werden.

Sicherheitsaspekte. Hier lassen sich Feststellung der Identität eines Anwenders ( Authentifizierung) und die Sicherstellung der Zugriffsberechtigung (Autorisierung) einordnen. Es wurden vielerlei Überlegungen darüber angestrengt, wann eine Anforderung an eine Software als Aspekt und wann als Komponente entworfen werden soll. Wesentlich ist im Hinblick darauf, dass die Implementierung eines Aspekts zunächst unabhängig davon ist, ob diese Anforderung funktional oder nichtfunktional ist. Entscheidend ist vielmehr, dass eine solche Anforderung sich auf eine Kernfunktionalität zurückführen lässt und ob sie zudem "crosscutting" ist.

Somit sind Aspekte in Module implementierte Crosscutting Concerns.

Informationen zum Artikel
Deutsch: Aspekt
Englisch: aspect
Veröffentlicht: 13.04.2010
Wörter: 696
Tags: #Entwicklung, Codierung
Links: Aktivität, AspectJ, Aspektorientierte Programmierung, Audit, Authentifizierung