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 |