Top Banner
Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann
20

Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

Apr 05, 2015

Download

Documents

Kaiser Ramm
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

Metamodell, Reflection in objektorientierten Sprachen

ProbevorlesungFriedrich Steimann

Page 2: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich 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

Page 3: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

F Steimann „Metamodell, Reflection in objektorientierten Sprachen“

SoftwaretechnikSoftwaretechnik

Metamodell,Reflection in objektorientierten Sprachen

Page 4: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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

Page 5: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

F Steimann „Metamodell, Reflection in objektorientierten Sprachen“

SoftwaretechnikSoftwaretechnik

Modell (Beispiel)

Student

Dozent

Modul

Teil

belegt

bietet an

Universität

Page 6: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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

Page 7: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

F Steimann „Metamodell, Reflection in objektorientierten Sprachen“

SoftwaretechnikSoftwaretechnik

Modell (anderes Beispiel)

Stück Absatz

besetzt gehört zu

Akt Szene

Text

RolleDarsteller

Regieanweisung

TheaterMaxx

Page 8: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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

Page 9: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

F Steimann „Metamodell, Reflection in objektorientierten Sprachen“

SoftwaretechnikSoftwaretechnik

Modell der objektorientierten Modellierung (Metamodell)

Klasse

Beziehung

abstrakte Klasse

konkrete Klasse

Verhalten

unendlicher Regress!

Vererbung

Page 10: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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

Page 11: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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

Page 12: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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

Page 13: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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

Page 14: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

F Steimann „Metamodell, Reflection in objektorientierten Sprachen“

SoftwaretechnikSoftwaretechnik

Weitere einfache Beispiele

Page 15: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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

Page 16: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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

Page 17: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

F Steimann „Metamodell, Reflection in objektorientierten Sprachen“

SoftwaretechnikSoftwaretechnik

Weitere Beispiele

Page 18: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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

Page 19: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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!

Page 20: Metamodell, Reflection in objektorientierten Sprachen Probevorlesung Friedrich Steimann.

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)