Reflection API ETIS SS04.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Metamodell, Reflection in objektorientierten Sprachen
Strategie (Strategy / Policy) Ein objektbasiertes Verhaltensmuster Stephan Munkelt, Stefan Salzmann - 03IN.
Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS
Objektorientierte Programmierung
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
DOM (Document Object Model)
Ein Beispiel in Java.
Konstruktoren.
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
Objektorientierte Programmierung JDK-Klassenbibliothek
Das Build-Tool ANT ETIS SS05. ETIS SS05 - Nadine FröhlichANT 2 Gliederung Motivation Build - Datei –Allgemeiner Aufbau –Project –Target –Task –Properties.
XDoclet ETIS SS05.
Reflection API ETIS SS05.
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 6. Story Driven Modeling Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Remote Methode Invocation (RMI)
Packages Vortrag : Cornelia Hardt 23. November 1999.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
VFP Class Browser. © 1999 TMN-Systemberatung GmbH Einsatz des Class Browser n Managen von Klassen inklusive, ändern, umbenennen, löschen und umdefinieren.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Eine Entwicklungsumgebung im Web IFC-Seminar WS98/ Holger Otte.
Herzlich Willkommen zu „Einführung in die Programmierung mit Java“
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Teil II Objekte ergeben ein Ganzes
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
Java und Eclipse.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 2 Folie 2 XAML (1) s.a.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
7.1.5 Java RMI – Remote Method Invocation
Office in Java 2. Info-Point Urs Frei.
EPROG Tutorium #4 Philipp Effenberger
Torque in Turbine Team 4 Josef Bohninger Thomas Lindenhofer
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Neuerungen in Java 5/6/7. Stefan Bühler für InfoPoint Überblick Java 5 neue Sprachfeatures Erweiterungen Klassenbibliothek Java 6 Erweiterungen.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Web und Mobile Apps Programmieren Marco Jakob Kurzvortrag OSS an Schulen
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Benutzerdefinierte Tags
Reflection API1 Motivation Reflection API Core Reflection API: java.lang.reflect Seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek Ermöglicht:
Java Programme nur ein bisschen objektorientiert.
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Einführung in AspectJ ● Inhalt: 1)Überblick 2)Elemente des crosscuttings in AspectJ 3)„Hello World“ in AspectJ 4)Wie Aspekte in Java verwoben werden 5)Join.
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Dynamisches Laden von Klassen
Einführung in die Programmierung mit Java
Grundkurs Informatik 11-13
 Präsentation transkript:

Reflection API ETIS SS04

Gliederung Motivation Klasse Class Zugriff auf Klassenbestandteile Einsatzgebiete Metaprogrammierung Klasse Class Zugriff auf Klassenbestandteile Erzeugen von Objekten Manipulieren von Objekten Felder setzen Methodenaufruf Zusammenfassung Reflection API

Motivation (I) Core Reflection API: java.lang.reflect seit JDK 1.1 integraler Bestandteil der Java-Klassenbibliothek außerdem: Object + Class in java.lang Spiegelt Klassen, Schnittstellen, Objekte in aktueller JVM wider Ermöglicht Zugriff auf Informationen über Klassen (Metainformationen), deren: Quellcode nicht vorhanden und/oder Aufbau nicht bekannt ist Reflection API

Motivation (II) Ermöglicht, z.B.: Informationen über Methoden, Variablen, Superklassen, ... Laden und Instanzieren von Klassen, ohne dass Name zur Compilezeit bekannt Methoden aufrufen und Membervariablen setzen, wenn Namen erst zur Laufzeit des Programmes bekannt Arrays kreieren (Größe + Komponententyp zur Laufzeit nicht bekannt + Veränderung der Komponenten) Reflection API

Einsatzgebiete Für Entwicklung der Beans- und Serialisierungs-APIs benötigt Für Debugger, GUI-Builder, Class-Browser ORM, JUnit, JDBC Reflection API

Metaprogrammierung normal: Metaprogrammierung: Programm kennt Daten, aber nicht sich selbst Metaprogrammierung: Programme als Daten Programm hat Zugriff auf sich selbst Programm liegt in selber Präsentation wie Daten vor Objekt Klasse Metaklasse Reflection API

Ausgangspunkt: Klasse Class im Paket java.lang Instanzen dieser Klasse repräsentieren Klassen + Interfaces laufender Java Anwendung Instanzen automatisch durch JVM konstruiert Instanz abfragbar, wenn: Objekt der Klasse verfügbar, mit: Class c = o.getClass(); Name der Klasse zur Compilezeit bekannt, mit: Class c = java.awt.Button.class; Klassenname zur Lauf- aber nicht zur Compilezeit, mit: Class c = Class.forName(“java.awt.Button“); Reflection API

Zugriff auf Klassenbestandteile für dynamischen Zugriff auf Klassenbestandteile Klassen: Constructor, Method und Field Instanzen dieser Klassen mit Methoden der Klasse Class erzeugt Field fields [] = c.getFields(); Field fields [] = c.getDeclaredFields(); Field field = c.getField(“name“); Hinweis: mit erhaltenen Field-Objekten kann man mehrere Instanzen bearbeiten Reflection API

Zugriff auf Klassenbestandteile Ermittlung der Methoden einer Klasse: Method m[] = c.getMethods(); Method m[] = c.DeclaredMethods(); Class param[] = new Class[] {Object.class} Method m = c.getMethod(“add“, param) Weiterhin ermittelbar: Interfaces, Superklassen Packagename, Name der Klasse Modifier (z.B. public, final) ob eine Datentyp primitiv ist Reflection API

Erzeugen von Objekten Normal: Mit Reflection: Person p = new PersonBean(); Mit Reflection: Class c = Class.forName(“demo.PersonBean“); Person p = (Person) c.newInstance(); Vorgehen ermöglicht Zugriff auf Klasse, die während Erstellung der Anwendung unbekannt ist jede beliebige Klasse, die Interface Person implementiert evtl. aus Property-Datei Reflection API

Felder setzen Normal: Mit Reflection: p.pname = “Lisa“; Class c = p.getClass(); Field name = c.getDeclaredField(“pname“); name.set(p, “Lisa“); Reflection API

Methodenaufruf Normal: Mit Reflection: p.setFirstName(“Maria“); Class c = p.getClass(); Class argDef[] = {String.class}; Method m = c.getMethod(“setFirstName“, argDef); Object arg[] = {“Maria“}; m.invoke(p, arg); Reflection API

Zusammenfassung(I) Reflection einzusetzen, wenn: Klassen zur Laufzeit einzubinden, die zur Compile-Zeit noch nicht bekannt Schnittstellen der Klassen nicht durch Interfaces oder abstrakte Klassen definiert, sondern Schnitt-stellenkonventionen und -mustern folgen (Java Beans) Fast vollständige Kontrolle über Objekte: Möglich Methodenname, Übergabeparameter, Attribute, Klassennamen in Dateien abzulegen Reflection API

Zusammenfassung(II) Hohe Flexibilität Aber: Mehrfaches an Quelltext Performanceeinbußen Keine Prüfung des Compilers auf Korrektheit der Datentypen Daher: Reflection API nur einsetzen, wo wirklich erforderlich!!! Reflection API

Quellen http://www.dpunkt.de/java/Die_Sprache_Java/Objektorientierte_Programmierung_mit_Java/70.html http://www.rz.fhtw-berlin.de/hjp3/k100268.html#kapitelreflection http://www.ifs.tuwien.ac.at/~mbach/misc/JavaVsSmallTalk/node35.html http://www.jeckle.de/vorlesung/java/kap3.html#reflectionAPI http://java.sun.com/docs/books/tutorial/reflect/ Wille, S., Go To Java Server Pages, Addison-Wesley, München, 2001 Holubek, A.: Willkommen im Dungeon, Java Magazin,3/2000, S.20: java-praxis Reflection API http://www.voelter.de/data/presentations/meta.ppt Wutka, M., J2EE Developer‘ s Guide, Markt+Technik, München, 2002 Reflection API

Java-Beans + Reflection Reflection (eigentlich Introspection) angewandt, um Properties der BeanKlasse zur Laufzeit zu ermitteln, auszulesen bzw. neu zu setzen Properties spezifisch für jede Bean-Klasse, folgen aber Muster(setXXX und getXXX) Introspection basiert auf Reflection, aber höhere Sicht – wichtige Methoden: java.beans.Introspector java.beans.PropertyDescriptor Reflection API