• Shuffle
    Toggle On
    Toggle Off
  • Alphabetize
    Toggle On
    Toggle Off
  • Front First
    Toggle On
    Toggle Off
  • Both Sides
    Toggle On
    Toggle Off
  • Read
    Toggle On
    Toggle Off
Reading...
Front

Card Range To Study

through

image

Play button

image

Play button

image

Progress

1/50

Click to flip

Use LEFT and RIGHT arrow keys to navigate between flashcards;

Use UP and DOWN arrow keys to flip the card;

H to show hint;

A reads text to speech;

50 Cards in this Set

  • Front
  • Back
Crosscutting: Seperation of Concerns
Problem in Belange zerlegen, die in sich abgeschlossen und lösbar sind
Die Gesamtlösung ist die Komposition der Teillösungen (Divide and Conquer)
Wichtig: Dekompositions-Kriterium
Crosscutting: Modularität
Modul auf Implementierungsebene:
- Klare Schnittstelle
- Interne Informationen ersetzbar
Jedes Modul soll einen Concern repräsentieren
Problem: Aktuelle Abstraktionen ermöglichen keine solche Trennung -> Crosscutting Concerns
Crosscutting: Concern
Eine Bestimmte Idee, die der Entwickler im Kopf hat während er:
Er Problem zerlegt, ein Modell konzeptuell spezifiziert, Module implementiert,
Keywords: Atomar/composed, abstract requirement, source code representation
Crosscutting: Mögliche Arten von Concerns
Technical
Busisness
Naming
Persistenz
Base-Language
Crosscutting: Arten von Crosscutting
Redundanzen/ Code-Klones
Gleiche Codefragmente in verschiedenen Modulen
- gleiche lexikalische Repräsentation bei anderen Typen
Gleche Codefragemente in gleichen Modulen
Ähnliche Codefragmentge in verschiedenen Modulen
Ähnliche Codefragmente in gleichen Modulen
Verschiedene Codefragmenete in Verschiedenen Modulen
Statisches Crosscutting
Ob Code hinzugefügt werden muss, kann direkt aus dem Source-Code abgeleitet werden
Dynamisches Crosscutting
Ob Code ausgeführt werden muss, kann nur mit Laufzeit Informationen bestimmt werden
Regeln die definieren, wie Module durchschnitten werden variieren stark
Join Points: Was ist ein Join Point
Ein Punkt oder Element im Programm, der ausgewählt und adaptiert werden kann. (Ort, Zeitpunkt, Event)
Join Points: Welche Join Point Typen gibt es?
Static Join Points
Dynamic Join Points
Structural Join Points
Behavioral Join Points
Join Points: Static Join Points
Element des Abstrakten Syntaxbaumes einer Anwendung
Anzahl ist Endlich
Repräsentiert ein Element im Code des Basisprogramms
Join Points: Dynamic Join Points
Events im Runtime System oder Evaluation eines bestimmten Elements zur Laufzeit
Anzahl ist unendlich und Unbekannt
Methodenaufrufe und Field-Assignments
Brauchen dynamische Elemente als unterscheidbare Charakteristiken
- Haben statische Repräsentation im Code auch Join Point Shadow
Join Points: Structural Join Ponts
Repräsnetiert eine strukturelle Abstraktion innerhalb der Anwendung.
Basiert auf einer Abstraktion, der zugrundeliegenden Programmiersprache (Klassen/Methoden Definition/ Konstruktor)
Join Points: Behavioral Join Point
Repräsentiert einen Teil des Anwendungsverhalten, der gekapselt ist durch "Structural building points"

Dies können: Field assingments, Field access, Method calls sein.
Join Points: Konkretes Join Point Model
Konkrete Element-Klassen vom AO-System als Join Point
Join Points: Vollständige Join Point Model
Wenn für jedes Konstrukt der Basissprache eine entsprechende Join Point Klasse gibt.
Joint Points: Join Point Shadow
Ein Joinpoint shadow ist das statische Vorkommen eines potentiellen Joinpoints. Ob dieser shadow (etwa ein im Quellcode stehender Methodenaufruf) tatsächlich zu einem Joinpoint wird, entscheidet sich erst zur Laufzeit in Abhängigkeit vom korrespondierenden Pointcut (resp. Pointcut-Designator).
Join Point Selections: Definition
Sprachkonstrukte, um bestimmte arten von Join Points auszuwählen
- Zur Verfügungstellen von unterscheidbaren Charakteristiken und Kombinationskonstrukte
- Sollten von konkreten Sourcecode Elementen abstrahieren ( &&, ||m *,+)
Join Point Selections: Überblick
Join Point Properties
Join Point Adressing
fragile Pointcuts
Join Point Selections: Pointcut Language
beschreibt Join-Point Properties und Adressierungsmechanismen (Quasi Querylanguage wie SQL)
sinnvolle/wiederverwendbare Abstraktionen
sollte stabile,allgemeine,komponiernbare Selectionskriterien nutzen
Join Point Selections: fragile pointcuts
lexikalisches Crosscutting
syntaktisches Crosscutting
Join Point Selection ist mit Syntax verbunden
Join Point Selections: Enumeration-based Crosscutting
Multiple Selection mit multipler Code-Repräsentation
Benötigt eine Aufzählung der Elemente
Join Point Selections: Unterschied zwischen Join Point Adressing und Properties
Property = unterscheidbare Charakteristik
Adressing: Mittel um Property zu adressieren
Join Point Properties: Dimensions
Dynamicity
Directness
Locality
Application Progress
Join Point Properties: Dynamicity Dimension
Parameter Type kann erst bestimmt werden wenn der join point auftritt.
-> sinnvolle Unterscheidungschrakteristik

- beschreibt ob das Property statisch am Join Point Shadow extrahiert werden kann.
Wenn es statisch beschrieben werden kann es zur Laufzeit Zeit sparen und ist
static - direkt aus dem code ableitbar
dynamisch - runtime Infomation benötigt
Join Point Properties: Dynamicity und Join Point Model
Bei dynamischem Join Point Model wird mindestens eine dynamische Eigenschaft benötigt
Die Existenz statischer eigenschaften impliziert kein statisches Model.
Join Point Properties: Directness of Property Correspondence
Direkt: Parameter typ ist direkt aus der Applikation verfügbarm keine Berechnung oder Abstraktion notwendig
Indirekt/Abstrakt: Zusätzliche Berechnungen und Abstraktionen notwendig
Join Point Properties: Locality
Lokal: Ableitbar wenn lokale Informationen am Join Point Verfügbar sind
Nicht-lokal: Die informationen, die benötigt werden sind in einem lokalen Kontext nicht verfügbar.
Locality ist sprachenabhängig, in einigen Situationen nicht präzise genug
Join Point Properties: Applications progress
- Current
- Referenzen zu partizipierenden Objekten
- Past
- Parameter History
- Future
- Abhängigkeiten zu anderen Dimensionen
- Dynamicity past/futre -> nonlocal
- Underlying data model for join points
->
Join Point Adressing: Definition
Mittel (sprachkonstrukte) um Join Point Properties zu adressieren und sie auszuwählen
Join Point Adressing: Dimensionen
Level-Of Value Sharing
Directness of value Adressen
Openess
Join Point Adressing: Directness of Value Adressing
Lexikalisch: *-Operator
erlaubt Abstraktionen über konkrete Werte referenziert aber auf den lexikalischen wert
Indirekt: +-Operator
Unterklassen müssen keine Lexikalische Beziehung haben.
Join Point Adressing: Openess of Value Adressing
Closed: Genaues Werteset
Open: Unpräzises Werteset Bspw. +,* ....
Join Point Adressing: Level of Value Sharing
Stand alone: (call(Void A.m(A))
Shared-Property (Call(void(var.m(var) && var= "A)
Join Point Adaption: Definition
Mittel um ausgewählte Join Points zu adaptieren
- Introductions, before,after, around
Join Point Adaptations: Dimensionen
Level of Adaptation
Contructiveness
Variability
ContextAddition / Abstraktion
Join Point Adaption: Level of Adaptation
Idee: Unterschedung zwischen strukturellen und verhaltens Adaptionen
Structural: ändern die Struktur des Codes (introduction)
hinzufügen von Feldern
Behavioral: ändert das Verhalten (advice) ohne dabei das strukturelle auftreten zu ändern
Ändern von Methodeb
Join Point Adaption: Constructiveness
- Destruktiv (ersetzt Code, around ohne Proceed)
- Konstruktiv (keine Codeersetzung)
- konditioniert konstruktiv (around) -> Kein direkter Impact aber Overridung, Evolution,Reflection
Join Point Adaption: Variability
Non-Variable Adaptation: keine Variabilität
Parametrisch: Variabilities innerhalb des codes, der die Adaption repräsentiert.
Join Point Adaption: Level of Abstraktion / Context Addition
Fix: Kontext ist nicht veränderbar für alle join point klassen
Variable: Kontext der Join Points ist vom Entwickler spezifizierbar.
Join Point Adaption: Weaving
Implementierung / Realisierung der Adaptations
Fragestellung: Wie Adaption durchführen?
Wie ausgewählte Join Points berechnen
- Code Transformation oder Veränderungen im Laufzeitsystem
Weaving: Dimensionen
Dynamicity
Level of Adaptation
Weaving Stimulus
Weaving: Dynamicity
Dynamisch (veränderungen zur Laufzeit -> AspectS
Statusch (final decision / byte code änderung) Aspect J
Weaving: Level of Adaptation
Code Instrumentation: Code Base Transformation
kein neues Laufzeitsystem nötig, binaries können auf mehreren Maschinen laufen.
Runtime-overhead durch join point checks
Sprachsemantiken oft unklar, Rekursive Probleme

Code Interpretation: neue Code Interpretation
in Sprachen mit wenigen Eigenschaften ist eine einfache Implementierung möglich
Performance profitiert bei Join Point Checks
Wenn die Basissprache auf mehreren Maschinen verfügbar ist eine große Anzahl von Laufzeitsystemen nötig
Binaries evtl inkompatibel
Weaving: Stimulus
User Driven: Abhängig von Inputs oder User Auswahl
System Driven: Nicht abhängig vom User Input
Weaving: Aspect J Prinzip
Statisches Weaving basierend auf Code-Instrumentations
Weaving: Rekursionsproblem (Code instrumentation)
Jedes übersetze Objekt, könnte einen Join Point repräsentieren
- Rekursion durch Advice ausgelöst
- Reduktion von selektierten Join Points durch den ausschluss von ziel klassen
Pointcut ausgelöste rekursion
- Reduktion von ausgewählten Join Points durch den Ausschluss des Kontrollfluss beginnend beim Aspect
Weaving: AspectJ Funktion
Aspekte werden zur Compile Zeit hinzugefügt
ByteCode Transformation
- Nachteil: Performance Overhead
Aspect -> Class/singleton + staitscher Methoden block
Before / After Advice: Methoden (parameter foreach exposed by pointcut) advice parameter
Around Advice: Aspectclosure -> Store parameter
- Proceed originaler Methodenaufruf
Weaving: AspectJ pointcut
statisch oder dynamisch
- Statisch: direkte Code represenataiton
- Dynamisch: Join Point Checks
- if statements
if (x instanceof B){advice}
else { aroundbody; originalmethod()}
Nicht alle Join Point Shadows implementiert
statische Typeinformationen keine Kontrollflüsse

Cflow -> konstrukt Datenstruktur (thread local variable) -> counter
cflow stack (context exposure)
static dynamic join point information provision
Weaving: AspectS
Forschungprototyp
Aspekte, Pointcuts, Advices sind Objekte
Explizite Instanziierung des Entwicklers notwendig
Nur Methods valls / execution als JoinPoints
MYAspect subclass of AsAspect
- new install, uninstall
ASbeforeAfteradvice,Asroundadvice (hat kein proceed)
Fixe join point abstraction
Weaving in AspectS
Methoddictionary (von behaviour aus)
Methodwrappiung (method wird ersetzt durch method mit aspect)
Aspect
- initialized -> create wrappers
- installed -> each wrapper replaces original method in class dictionary
- No static analysis für reducing the numer of join points