Metamodell, Reflection in objektorientierten Sprachen

Slides:



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

der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Konzepte objektorientierter Systeme
Einführung in die Programmierung Zusammenfassung
Java 2 Enterprise Edition (J2EE)
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 4 Vererbung Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 5 Sitzung 5: Polymorphismus.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Reflection API ETIS SS04.
Christian Kästner Modellgetriebene Softwareentwicklung Eclipse Modelling Framework.
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
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Software Design Patterns Creational Patterns Structural Patterns Behavioral Patterns –Behavioral Class Patterns Interpreter Template Method Pattern –Behavioral.
DVG Klassen und Objekte
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Einführung in die Programmierung Datensammlung
Informatikunterricht mit Java
UML Begleitdokumentation des Projekts
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Einführung Modellgetriebene Softwareentwicklung, Metamodellierung Stephan Hildebrandt.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Objektorientiertes Konstruieren
Parameterübergabemechanismen für den Methodenaufruf
Objektorientierte Programmierung
EPROG Tutorium #4 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
EPROG Tutorium #3 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.
Objektorientierung.
Objektorientierte Modellierung mit UML
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Robuste Programme durch Ausnahmebehandlung
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Vererbung Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
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.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
Reflection API1 Motivation Reflection API Core Reflection API: java.lang.reflect Seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek Ermöglicht:
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Objektorientierte (OO) Programmierung
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Dynamisches Laden von Klassen
Grundkurs Informatik 11-13
Methodische Grundlagen des Software-Engineering
Implementieren von Klassen
 Präsentation transkript:

Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann

Voraussetzungen Grundbegriffe der Objektorientierung Klasse, Beziehung, Subklasse, Verhalten etc. grundlegende Notationselemente der UML Klassendiagramm Grundlegende Programmierkenntnisse in Java

Metamodell, Reflection in objektorientierten Sprachen

Kontext: letzte Vorlesung Durchgängigkeit der Objektorientierung annähernd gleiche Konzepte in Analyse, Design (Modell) und Implementierung Modell Klasse Attribut Beziehung Verhalten Programm Klasse Instanzvariable (Feld) Instanzvariable (Feld) Array, Collection Methode

Modell (Beispiel) Universität Student Modul Teil Dozent belegt bietet an Dozent

Wechsel des Gegenstandsbereichs Notation der Modelle bleibt gleich andere Notation denkbar, ändert nichts an der Bedeutung wie sich auch Notation von Modellierung und Implementierung unterscheiden Sprachkonstrukte der Modellierungssprache vom Gegenstandsbereich unabhängig

Modell (anderes Beispiel) TheaterMaxx Stück Akt Szene Absatz Regieanweisung Text Darsteller besetzt Rolle gehört zu

Wechsel der Ebene Modelle können selbst Gegenstand der Modellierung sein! Programme können selbst Gegenstand der Programmierung sein! Modellierung der Modellierung unter Verwendung derselben Sprachkonstrukte Programmierung der Programmierung unter Verwendung derselben Sprachkonstrukte

Modell der objektorientierten Modellierung (Metamodell) Vererbung Beziehung Klasse Verhalten abstrakte Klasse unendlicher Regress! konkrete Klasse

Modell des Modells der objektorientierten Modellierung Vererbung Metaklasse Beziehung abstrakt/konkret ist ein Attribut der Metaklasse Meta-Metamodell

Modell des Modells des Modells der objektorientierten Modellierung Klasse Beziehung Meta-Meta-Metamodell Entity-Relationship-Modell!

Metaprogramme Programme, die Programme als Ein- und/oder Ausgabe haben Compiler/Interpreter Refactoring-Werkzeuge Programme, die sich selbst als Ein- und/oder Ausgabe haben (Reflektion) „selbstbewußter“ Code selbstmodifizierender Code Voraussetzung: Programme müssen sich selbst als Daten lesen können! Metaprogrammierung

Stufen der Metaprogrammierung Typ-Introspektion C++ mit RTTI allgemeine Introspektion Java (häufig Reflektion genannt) Interzession oder Interzeption Lisp MOP, AspectJ (volle) Reflektion Maschinencode (!), Lisp, Prolog, Smalltalk Schon Alan Turing hatte einen Streit mit John von Neumann, ob man für die bedingte Verzweigung eine eigene Anweisung bräuchte – Turing wollte das Sprungziel berechnen! Im Maschinencode liegen Programme und Daten trivialerweise immer in derselben Form vor. Trennung war eigentlich zunächst ein Gewinn!

Javas Reflection-API Klasse Beschreibung Object Methode getClass() Class Instanzen repräsentieren Klassen und Interfaces Constructor Aufruf von Konstruktoren variablen Typs Field Information über und Zugriff auf Felder variabler Typen Method Information über und Aufruf von Methoden variabler Typen Modifier Information über Access Modifier von Typen und deren Membern Array Erzeugung von und Zugriff auf Arrays variablen Typs

Beispiel reflektive Programmierung Absatz absatz = …; if (absatz instanceof Regieanweisung) … … (Regieanweisung) absatz … public class Object { public final Class getClass() … } public final class Class extends Object … Constructor[] getConstructors() … Fields[] getFields() … Method[] getMethods() … Typ-Introspektion allg. Introspektion

Weitere einfache Beispiele …

Beispiel Serialisierung class C { int a = 1; String b = "abc"; D d = new D(); void serializeOn(PrintStream aStream) { aStream.println("a"); aStream.println(a); aStream.println("b"); aStream.println(b); aStream.println("d"); d.serializeOn(aStream); }

Reflektive Serialisierung void serializeOn(PrintStream aStream) { Class myClass = getClass(); Field[] myFields = myClass.getFields(); for (Field field : myFields) { aStream.println(field.getName()); try { Object value = field.get(this); if (field.getType().isPrimitive() || value == null) aStream.println(value); else value.printFieldsOn(aStream); } catch (Exception e) {…} }

Weitere Beispiele …

Einsatzmöglichkeiten der Metaprogrammierung Tracing, Logging, Security etc. Spracherweiterungen/-anpassungen Optimierung von Code dynamisch konfigurierte Systeme („very late binding“), z. B. Web Services genetische Programmierung Künstliche Intelligenz

Bewertung der Metaprogrammierung Vorteile: Ergänzung von Funktionalität zur Laufzeit kompaktere Programme Nachteile: schwer lesbar keine Übersetzungszeit, keine Fehlerprüfung Fazit: nur sehr kontrolliert einsetzen!

Geschichtliches Russellsches Paradox Antwort: Russelsche Typtheorie „Dieser Satz ist falsch.“ Antwort: Russelsche Typtheorie Trennung von Aussagen in Ebenen Aussagen nur über Aussagen niedrigerer Ebene Vorläufer heutiger Typsysteme Tarskis Untersuchungen über Wahrheit Trennung von Objekt- und Metasprache

Literatur Abelson & Sussman Structure and Interpretation of Computer Programs Chapter 4: „Metalinguistic Abstraction“ (http://mitpress.mit.edu/sicp/) Krüger, Stark Handbuch der Java-Programmierung Kapitel 43 und 44 (www.javabuch.de) historische Grundlagen Whitehead und Russel Principia Mathematica Vorwort und Einleitungen (1910) Tarski „The semantic conception of truth“ Philosophy and Phenomenological Research 4 (1944)