Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann
Metamodell, Reflection in objektorientierten Sprachen
ProbevorlesungFriedrich Steimann
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
Voraussetzungen
Grundbegriffe der Objektorientierung Klasse, Beziehung, Subklasse, Verhalten
etc. grundlegende Notationselemente der UML
Klassendiagramm Grundlegende Programmierkenntnisse in
Java
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
Metamodell,Reflection in objektorientierten Sprachen
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
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
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
Modell (Beispiel)
Student
Dozent
Modul
Teil
belegt
bietet an
Universität
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
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
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
Modell (anderes Beispiel)
Stück Absatz
besetzt gehört zu
Akt Szene
Text
RolleDarsteller
Regieanweisung
TheaterMaxx
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
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
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
Modell der objektorientierten Modellierung (Metamodell)
Klasse
Beziehung
abstrakte Klasse
konkrete Klasse
Verhalten
unendlicher Regress!
Vererbung
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
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
Metaprogrammierung
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
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
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
Javas Reflection-API
Klasse BeschreibungObject Methode getClass()Class Instanzen repräsentieren Klassen und
InterfacesConstructor Aufruf von Konstruktoren variablen TypsField Information über und Zugriff auf Felder
variabler TypenMethod Information über und Aufruf von
Methoden variabler TypenModifier Information über Access Modifier von
Typen und deren MembernArray Erzeugung von und Zugriff auf Arrays
variablen Typs
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
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
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
Weitere einfache Beispiele
…
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
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); }}
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
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) {…} }}
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
Weitere Beispiele
…
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
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
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
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!
F Steimann „Metamodell, Reflection in objektorientierten Sprachen“
SoftwaretechnikSoftwaretechnik
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)