Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Metamodell, Reflection in objektorientierten Sprachen

Ähnliche Präsentationen


Präsentation zum Thema: "Metamodell, Reflection in objektorientierten Sprachen"—  Präsentation transkript:

1 Metamodell, Reflection in objektorientierten Sprachen
Probevorlesung Friedrich Steimann

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

3 Metamodell, Reflection in objektorientierten Sprachen

4 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

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

6 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

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

8 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

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

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

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

12 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

13 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!

14 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

15 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

16 Weitere einfache Beispiele

17 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); }

18 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) {…} }

19 Weitere Beispiele

20 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

21 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!

22 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

23 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)


Herunterladen ppt "Metamodell, Reflection in objektorientierten Sprachen"

Ähnliche Präsentationen


Google-Anzeigen