Reflection API1 Motivation Reflection API Core Reflection API: java.lang.reflect Seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek Ermöglicht:

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Objektorientierte Programmierung
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung versteht Java Programmcode versteht Java Programmcode Für die Entwicklung eigener Software.
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Reflection API ETIS SS04.
Reflection API ETIS SS05.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
Remote Methode Invocation (RMI)
Packages Vortrag : Cornelia Hardt 23. November 1999.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
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.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
1 Sg 3 – JSP - Java Server Pages Softwareengineering Praktikum Java Server Pages Nicole Brandstätter Josef Sturm Karl Streicher.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java Programmierung.
EPROG Tutorium #4 Philipp Effenberger
EPROG Tutorium #6 Philipp Effenberger
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
Programmiervorkurs WS 2014/15 Instanzmethoden
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
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
Einführung in die Programmierung mit Java
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
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Java Server Pages Technologie zur Erzeugung dynamischer Webseiten basierend auf Java-Servlets Blockseminar Wintersemester 2001/2002Jochen Pfeiffer Seite.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Objektorientierte Programmierung (OOP)
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
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.
Konstruktoren.
Dynamisches Laden von Klassen
Einführung in die Programmierung mit Java
Grundkurs Informatik 11-13
1. Die rekursive Datenstruktur Liste 1
Implementieren von Klassen
 Präsentation transkript:

Reflection API1 Motivation Reflection API Core Reflection API: java.lang.reflect Seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek Ermöglicht: –Laden und Instanzieren von Klassen, ohne dass Name zur Compilezeit bekannt –Methoden aufrufen und auf Membervariablen zugreifen, wenn Name erst zur Laufzeit des Programmes bekannt

Reflection API2 Notwendigkeit Ermöglicht Zugriff auf (public) Informationen über Klassen (Metainformationen), deren: –Quellcode nicht vorhanden und/oder –Aufbau nicht bekannt ist Für Entwicklung der Beans- und Serialisierungs- APIs benötigt Für Debugger, GUI-Builder, Class-Browser

Reflection API3 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(strg);

Reflection API4 Zugriff auf Klassenbestandteile für dynamischen Zugriff auf Klassenbestandteile Klassen: Constructor, Method und Field –repräsentieren entsprechenden Klassenbestand- teil –haben Methoden zum Aufrufen (Constructor, Method) oder –Methoden zum Auslesen + Setzen (Field) Instanzen nicht direkt erzeugt, sondern mit Me- thoden der Klasse Class z.B. getField()  erst Class-Objekt, dann Bestandteile ermitteln

Reflection API5 Metainformationen Klassennamen ermitteln: Class c = o.getClass(); System.out.println(c.getName()); Ermittlung der Methoden einer Klasse: Class c = o.getClass(); Method m[] = c.getMethods(); for (int i = 0; i < m.length; i++){ System.out.println(‘‘Methode:‘‘+ m[i].getName()); }

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

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

Reflection API8 Java Beans normale Java-Klassen, die Design und Namens- muster folgen (Verarbeitungslogik) parameterloser Konstruktor definieren Properties (Objekteigenschaften) Properties über getter/setter-Methoden abfragen + ändern, d.h. folgen Muster: setXXX()-Methode zum Setzen getXXX-Methode zum Auslesen XXX steht für Namen der Property

Reflection API9 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 Anwendung erkennt Properties der Bean-Klasse an diesem Muster und sucht nach setXXX und getXXX

Reflection API10 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: –Methodenname und Übergabeparameter in Dateien ablegbar, (äquivalent) Attribute

Reflection API11 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 API12 Quellen Programmierung_mit_Java/70.htmlhttp:// Programmierung_mit_Java/70.html htmlhttp:// 35.html 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

Reflection API13 Lösung der Zusatzaufgabe Properties p = new Properties(); p.setProperty("12", "maus"); test(p); System.out.println(p.getProperty("12")); public static void test(Properties p){ Class c = p.getClass(); Class args[] = {String.class, String.class}; try{ Method m = c.getMethod("setProperty", args); Object a[] = {"12", "Maria"}; m.invoke(p, a); } catch (NoSuchMethodException exc){ exc.printStackTrace(); } catch (IllegalAccessException exc){ exc.printStackTrace(); }catch (InvocationTargetException exc){ exc.printStackTrace(); }