Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Kaiser Ramm Geändert vor über 10 Jahren
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“ ( Krüger, Stark Handbuch der Java-Programmierung Kapitel 43 und 44 ( historische Grundlagen Whitehead und Russel Principia Mathematica Vorwort und Einleitungen (1910) Tarski „The semantic conception of truth“ Philosophy and Phenomenological Research 4 (1944)
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.