OOP. Tagesprogramm. Aspektorientierte Programmierung. Annotationen

Ähnliche Dokumente
Aspektorientierte Programmierung

OOP. Tagesprogramm. Aspekte und Annotationen. Software-Entwurfsmuster. Factory-Method. Prototype

spectj AOP mit Java, Konzepte und Beispiele

Annotation in Java 1.5

Objektorientierung (OO)

Master of Advanced Studies in Software Engineering Java - Advanced Concepts. Musteraufgaben

Einführung in AOP. Rico Schiekel rschiekel@web.de. Agenda. Kernproblem der Objekt Orientierung

Info B VL 11: Innere Klassen/Collections

2. Methoden. n Generelles zum Aufruf von Methoden. n Parameterübergabemechanismen (call by value, call by reference)

Einstieg in die Informatik mit Java

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Parameterübergabemechanismen für den Methodenaufruf

Vererbung, Polymorphie

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Algorithmen und Datenstrukturen 07

Einführung in die Programmierung. 6.0 Objekte. Thomas R. Gross Department Informatik ETH Zürich

Advanced Software Engineering WS0910 Kapitel4. Dr. Dominik Haneberg

Meta Programming and Reflection in Java

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Programmieren in Java

Spracherweiterungen in Java 5

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Einstieg in die Informatik mit Java

Kapitel 6. Kontrollstrukturen im Kontext von Klassen und Objekten

Kapitel 6. Kontrollstrukturen im Kontext von Klassen und Objekten

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Programmierkurs. Manfred Jackel

JAVA 05: Objektorientierte Konzepte

Einstieg in die Informatik mit Java

SW-Archäologie mit AspectJ

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Java - Programmierung - Objektorientierte Programmierung 1

Programmieren in Java

3 Objektorientierte Konzepte in Java

Implementieren von Klassen

AOP by Examples. JavaLand, 25. März 2015, Oliver Böhm. Photo from

Aspekt Orientierte Programmierung

Beispiel: die Klasse Brüche

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen

Literatur. Komponenten WS 2014/15 Teil 9/Annotations

Komponenten-basierte Entwicklung. Teil 9: Annotations

Anweisungen zur Ablaufsteuerung

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Repetitorium Informatik (Java)

Programmieren 2 Java Überblick

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Java für Anfänger Teil 7: Methoden. Programmierkurs Manfred Jackel

Informatik II Übung 5

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Programmieren I. Fehlerbehandlung Exceptions. Heusch 2. Bd, 3 Ratz 10. Institut für Angewandte Informatik

AOP Day 07. eine Veranstaltung der SIG AspectJ. organisiert vom AOP-Komitee. und der guten Fee. powered by. Oliver Böhm Darko Palic Ludger Solbach

Rekonfiguration durch dynamische aspektorientierte Programmierung

Einführung in die Programmierung I. 2.4 Felder. Thomas R. Gross. Department Informatik ETH Zürich

Vorkurs Informatik WiSe 15/16

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

II.4.4 Exceptions - 1 -

1 Motivation und Einleitung

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Klassen mit Instanzmethoden

Einstieg in die Informatik mit Java

Musterübung 09: Vererbung und Dynamische Bindung

II.4.5 Generische Datentypen - 1 -

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Einstieg in die Informatik mit Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Einführung in die Programmierung für NF. Übung

Einstieg in die Informatik mit Java

CS1005 Objektorientierte Programmierung

Algorithmen und Datenstrukturen

II.4.4 Exceptions - 1 -

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Praktische Softwaretechnologie Vorlesung 3

Das Ersetzbarkeitsprinzip

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

Properties und Proxies

Verifikation und AO Florian Wagner

PROGRAMMIERUNG IN JAVA

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Themen. Web Service - Clients. Kommunikation zw. Web Services

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 17/18. Kapitel 5. Objekte und Klassen 1

Programmiermethodik. Übung 3

SW-Archäologie mit AOP (Praxisbericht)

Programmiertechnik Klassenmethoden

Algorithmen und Datenstrukturen

Aspektorientierte Programmierung mit.net

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden

Delegaten. d. h. eine Tätigkeitsanforderung wird weitergeleitet

Softwaretechnik WS 16/17. Übungsblatt 01

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

1 Einleitung Generizität Syntax... 2

Klausur: Java (Liste P)

Kapitel 6. Kontrollstrukturen und Methoden im Kontext von Klassendeklarationen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces

Transkript:

1 2014-12-03 Tagesprogramm Aspektorientierte Programmierung Annotationen

2 Aspektorientierte Programmierung Programmierparadigma AspectJ separation of concerns Modularisierung Aspekte kapseln Verhalten das mehrere Klassen betrifft

3 cross cutting concern core concerns (Kernfunktionalitäten) cross cutting concern (Querschnittsfunktionalitäten) Beispiele logging, Authentisierung, debugging Aspekte eines Programms, die nicht Kernfunktionalität sind, die aber für das Programm notwendig sind

4 Elemente von AspectJ join point Ausführungspunkt in einem Programm pointcut wählt Ausführungspunkt mit Kontext advice Programmcode der am join point ausgeführt werden soll aspect Kombination aus join point, pointcut und advice

5 join point 01 public class Test{ 02 Methodenausführung public static void main(string[] args) { 03 Konstruktoraufruf Point pt1 = new Point(0,0); 04 Methodenaufruf pt1.incrxy(3,6); 05 } 06 } 07 Klasseninit public class Point { 08 Objektinit private int x; 09 private int y; 00 public Point(int x, int y) { 11 Feldzugriff(write) this.x = x; 12 this.y = y; 13 } 14 public void incrxy(int dx, int dy){ 15 Feldzugriff(read) x = this.x + dx; 16 y =+ dy; 17 } 18 }

6 pointcut public pointcut accountoperation() : call(* Account.*(..)) Schlüselwort PCName PCTyp Signatur execution(signature) call(signature) get(signature) set(signature) handler(signature) initialization(signature) cflow(pointcut) within(signature)

7 advice before() : Pointcut {Programmcode} around() after() before() : call(* Account.*(..)) {Benutzer überprüfen} pointcut connectionoperation(connection connection) : call(* Connection.*(..) throws SQLException); before(connection connection) : connectionoperation(connection) { System.out.println("Operation auf" + connection); }

8 aspect 01 public aspect JoinPointTraceAspect { 02 private int _calldepth = -1; 03 pointcut tracepoints() :!within(joinpointtraceaspect); 04 before() : tracepoints() { 05 _calldepth++; 06 print("before", thisjoinpoint); 07 } 08 after() : tracepoints() { 09 _calldepth--; 00 print("after", thisjoinpoint); 11 } 12 private void print(string prefix, Object message) { 13 for (int i=0, spaces = _calldepth * 2; i < spaces; i++) { 14 System.out.print(" "); 15 } 16 System.out.println(prefix + ": " + message); 17 } 18 }

9 Literatur und Links AspectJ in Action von Ramnivas Laddad http://eclipse.org/aspectj/

10 2014-12-03 Annotationen Annotationen Annotation ist optionaler Parameter, der an (fast) beliebige Sprachkonzepte anheftbar ist, im Java-Code statisch gesetzt wird, von gesamter Werkzeugkette bis zur Laufzeit auslesbar ist. @Override public String tostring() {... } @BugFix(who="Kaspar", date="2014-12-03", level=3, bug="class unnecessary and maybe harmful", fix="contents of class body removed") public class Buggy { }

11 2014-12-03 Annotationen Definition von Annotationen Syntax von Interfaces adaptiert @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface BugFix { String who() default "me"; // author of bug fix String date(); // when was bug fixed int level() default 1; // importance level 1-5 String bug(); // description of bug String fix(); // description of fix }

12 2014-12-03 Annotationen Einschränkungen in @interface nur parameterlose Methoden als Ergebnistypen nur erlaubt: alle elementaren Typen (int, double,... ) Aufzählungstypen (enum) String Class andere Annotationen sowie eindimensionale Arrays dieser Typen (als Mengen ) Methodenname value Name in Annotation optional

13 2014-12-03 Annotationen Annotationen für Annotationsdefinition @Retention(RUNTIME) // @Retention(value=RUNTIME) @Target(value=ANNOTATION_TYPE) public @interface Retention { RetentionPolicy value(); } public enum RetentionPolicy { CLASS, RUNTIME, SOURCE } @Retention(value=RUNTIME) @Target(value=ANNOTATION_TYPE) public @interface Target { ElementType[] value(); } public enum ElementType { ANNOTATION_TYPE, CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE }

14 2014-12-03 Annotationen Annotationen zur Laufzeit Falls @Retention(RUNTIME) wird echtes Interface erzeugt: public interface BugFix extends java.lang.annotation.annotation { String who(); String date(); int level(); String bug(); String fix(); }

15 2014-12-03 Annotationen Zugriff zur Laufzeit (Reflexion) Annotationen über Reflection zur Laufzeit zugreifbar (falls @Retention(RUNTIME)): String s = ""; BugFix a = Buggy.class.getAnnotation(BugFix.class); if (a!= null) { // null if no such Annotation s += a.who() + " fixed a level " + a.level() + " bug"; } Annotation[] as = Buggy.class.getAnnotations(); // all Method[] ms = Buggy.class.getMethods(); // verschiedene analoge Methoden auch auf Method, Field