Übersetzung objektorientierter Programmiersprachen



Ähnliche Dokumente
Springer-Verlag Berlin Heidelberg GmbH

Prinzipien Objektorientierter Programmierung

Kapitel 12: Übersetzung objektorienter Konzepte

OO Softwareentwicklung

Objektorientiertes Programmieren

Einführung in Generatives Programmieren. Bastian Molkenthin

SQL objektorientiert

Inhaltsverzeichnis. Vorwort...XIII. Aufbau des Buches...

Inhaltsverzeichnis. Was ist Informatik? 5. Programmierung 13. Einleitung. 1 Informatik Was ist Informatik? Teilgebiete der Informatik 8

Managementprozesse und Performance

Informatik für Ingenieure

3. Konzepte der objektorientierten Programmierung

Unternehmensmodellierung

Praktikum Compilerbau

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

LINQ to SQL. Proseminar Objektorientiertes Programmieren mit.net und C# Christoph Knüttel. Institut für Informatik Software & Systems Engineering

JAVA als erste Programmiersprache Semesterkurs

Funktionale Programmierung (in Clojure)

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

C++-Entwicklung mit Linux

Objektorientierte Systementwicklung

Vorkurs Informatik WiSe 15/16

1 ALLGEMEINES ZU DYNAMICS NAV Geschichte zu Dynamics NAV Datenbank Wo bekommt man Hilfe zu Dynamics NAV?...

Gradle. Ein kompakter Einstieg in das moderne Build-Management-System ---> Mit einem Geleitwort von Hans Dockter, Erfinder von Gradle

Schulcurriculum Informationstechnische Grundkenntnisse und Informatik Stand:

Die Auflösung von Aktienfonds

Institut für Telematik Universität zu Lübeck. Programmieren. Kapitel 0: Organisatorisches. Wintersemester 2008/2009. Prof. Dr.

Software-Entwicklung mit Delphi

Objektorientierte Programmiersprachen

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

0. Einführung. C und C++ (CPP)

Curriculum des Wahlfaches Informatik für das Gymnasium Dialog

J.5 Die Java Virtual Machine

Roberto lerusalimschy. Programmieren mit Lua

Inhalt. 1. Sprachspezifische Fehlerrisiken C++ Java. Smalltalk. 2. Coverage - Modelle. Statement Coverage. Branch Coverage

Laufzeitverifikation

IT-Outsourcing-Entscheidungen

Programmierung 1 für Wirtschaftsinformatik Wintersemester 2013/14

Objektorientierte Programmierung OOP

Grammatiken. Einführung

Inhaltsverzeichnis. 4.9 Aufgaben... 63

Objektorientierte Programmierung in Java

Markenerfolg durch Brand Communities

4. Übung zu Software Engineering

Was ist ein Compiler?

10 Erweiterung und Portierung

Java Einführung Operatoren Kapitel 2 und 3

II.1.1. Erste Schritte - 1 -

C# im Vergleich zu Java

Java Virtual Machine (JVM) Bytecode

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Programmieren I. Überblick. Institut für Angewandte Informatik

Alexander Niemann. Das Einsteigerseminar Objektorientierte Programmierung in Java. bhv

Inhaltsverzeichnis VII

Objektorientierte Softwaretechnik

Klassenbeziehungen & Vererbung

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Modellbasierte Bewertung kollaborativer Belieferungskonzepte

Inhalt. 3.1 Der inkrementelle Entwurf im Überblick Flache Aufwandskurve Qualitätskriterien für den inkrementellen Entwurf...

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Programmieren Lernen mit BYOB. Gerald Futschek 5. November 2012

Knasmüller.book Seite vii Mittwoch, 28. März : vii. Inhaltsverzeichnis

Trace- und Zeit-Zusicherungen beim Programmieren mit Vertrag

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

2.1.1 Übersichtsraster Unterrichtsvorhaben. I) Einführungsphase. Einführungsphase. Unterrichtsvorhaben E-II. Unterrichtsvorhaben E-I

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN

Schulinternes Curriculum für Informatik (Q2) Stand April 2015

Innere Klassen in Java

Abbildungsverzeichnis. Tabellenverzeichnis. Algorithmenverzeichnis. Abkürzungsverzeichnis. Symbolverzeichnis

II.1.1. Erste Schritte - 1 -

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

1 NF-Röhrenverstärker in Zeiten digitaler Audiotechnik... 1

Tel Vorstellung der eigenen Person

Grundkurs Programmieren in Java

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung

J.6 Programmierung eingebetteter Systeme

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

Grundbegriffe der Informatik

1. Java ist Stammbaum der Programmiersprachen 3. Die "Softwarekrise"

II.1.1. Erste Schritte - 1 -

Client-Server Beziehungen

Berner Fachhochschule Hochschule für Technik und Informatik HTI. Kapitel 1. Einstieg in Java. Dr. Elham Firouzi

Einführung in die Systemprogrammierung

3 Objektorientierte Konzepte in Java

Model Driven SOA. < J Springer. Anwendungsorientierte Methodik und Vorgehen in der Praxis. Gerhard Rempp Mark Akermann Martin Löffler Jens Lehmann

Kapitel 10: Datenbankzugriff & Pufferung 2

Ein Erfahrungsbericht beim Einsatz von generierenden Ansätzen im Vergleich zu generischen Lösungen

Database Exchange Manager. Infinqa IT Solutions GmbH, Berlin Stralauer Allee Berlin Tel.:+49(0) Fax.:+49(0)

mit Delphi Messen, Steuern, Regeln Franzis Sören Götz/Reiner Mende Objektorientierte Programmierung realer Objekte Mit 100 Abbildungen

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Vorkurs C++ Programmierung

Analyse von Tabellen und kategorialen Daten

Programmieren I. Die Programmiersprache Java. Institut für Angewandte Informatik

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Kapitel 4. Mehrfachvererbung. Beispiel 1: typische Diamant Struktur. Person. Hiwi

Diplomarbeit Antrittsvortrag

Inhaltsverzeichnis. I LDAP verstehen 1. 1 EinführunginLDAP... 3

Transkript:

Bernhard Bauer Riitta Höllerer Übersetzung objektorientierter Programmiersprachen Konzepte, abstrakte Maschinen und Praktikum Java-Compiler" Mit 29 Abbildungen Springer

Teil 1: Theorie 1 Einleitung 3 l. l Übersetzung von Programmiersprachen 3 1.2 Objektorientiertheit und objektorientierte Programmiersprachen 8 1.3 Reine und hybride objektorientierte Programmiersprachen 10 1.4 Die Programmiersprache Java 11 1.5 Überblick über die weiteren Kapitel 11 2 Objektorientierte Konzepte 15 2.1 Klassenbasierte objektorientierte Sprachen 16 2.1.1 Objekte und Klassen 16 2.1.2 Gleichheit und Kopieren von Objekten 25 2.1.3 Abstrakte Klassen und Interface-Klassen 27 2.1.4 Multi-Methoden 28 2.2 Vererbung 29 2.2.1 Einfachvererbung 30 2.2.2 Mehrfachvererbung 42 2.2.3 Dynamische Vererbung 46 2.3 Kapselung 46 2.4 Parametrisierung und generische Datentypen 48 2.5 Parametrisierung versus Vererbung 51 2.6 Polymorphismus 53 3 Übersetzung objektorientierter Konzepte und abstrakte Maschinen 55 3.1 Lose Übersetzung 56 3.1.1 Abstrakte Maschine AM 57 3.1.1.1 Laufzeitumgebung der abstrakten Maschine AM.57 3.1.1.2 Befehle der abstrakten Maschine AM 59 3.1.1.3 Adressierungsarten 63

3.1.2 Klassen und Einfachvererbung 64 3.1.3 Methodendeklarationen 65 3.1.4 Nachrichten und Methodenaufrufe 65 3.1.5 Objekte 67 3.1.6 Semiformale Beschreibung der Semantik der abstrakten Maschine 70 3.2 Smalltalk-80-Realisierung 75 3.2.1 Klassen und Einfachvererbung 77 3.2.2 Übersetzung von Methoden 81 3.2.3 Objekte 84 3.2.4 Objektverwaltung 84 3.2.5 Methodenaufruf 87 3.2.6 Die abstrakte Maschine für Smalltalk-80 88 3.3 Java-Realisierung 89 3.3.1 Klassen und einfache Vererbung 90 3.3.1.1 Einträge im Konstantenpool 92 3.3.1.2 Einträge für Instanzvariablen 94 3.3.1.3 Einträge für Methoden 95 3.3.1.4 Bemerkungen 96 3.3.2 Methodendeklarationen 96 3.3.3 Methodenaufruf und Rücksprung 99 3.3.4 Objekte 100 3.3.5 Die virtuelle Maschine von Java 100 3.4 C++-Realisierung 103 3.4.1 Methoden, Klassen und einfache Vererbung 103 3.4.2 Objekte 106 3.4.3 Methodenaufruf 107 3.4.4 Mehrfachvererbung 108 3.5 Parametrisierung 112 3.5.1 Kopierende Sicht 113 3.5.2 Echte generische Sicht 121 Typinferenz und Typüberprüfung 127 4.1 Typisierung und Binden 127 4.1.1 Typisierung 127 4.1.2 Binden und Methodensuche 128 4.1.3 Zusammenhang von Typisierung und Binden 129 4.1.4 Typisierungsprobleme 129 4.2 Typisierung mit Datenflußanalyse 130 4.2.1 Datenflußanalyse 130 4.2.2 Typisierung mit Datenflußanalyse 135 4.3 Typisierung mit Constraints 137

XI 5 Optimierungen 145 5.1 Standardoptimierungen 147 5.1.1 Elimination redundanter Ausdrücke 147 5.1.2 Konstantenfaltung 148 5.1.3 Elimination toten Programmcodes 149 5.1.4 Kopien-Verbreitung 150 5.1.5 Schleifenoptimierungen 150 5.1.6 Reduktion des Operators und algebraische Umformungen. 152 5.1.7 Kontrollflußoptimierungen 152 5.2 Objektorientierte Optimierungen 152 5.2.1 Intraprozedurale Klassenanalyse 153 5.2.2 Analyse der Klassenhierarchie 154 5.2.3 Effiziente Implementierung der Methodensuche zur Übersetzungszeit 154 5.2.4 Inkrementelle Programmentwicklung und separate Übersetzung 155 5.2.5 Klassentest 155 5.2.5.1 Einfach-Klassentest 156 5.2.5.2 Unterklassentest 157 5.2.5.3 Verwendung von Klassentests und Splitting... 158 5.2.6 Funktionsexpansion 160 5.2.7 Wertbasierte Analyse und Instanzvariablen-Optimierung.. 161 5.2.8 Profile-Informationen 162 5.2.9 Spezialisierte Varianten: Customization 162 5.2.10 Lookup- und Inline-Caches 163 6 Speicherbereinigung 165 6.1 Nicht-inkrementelle Techniken 166 6.1.1 Mark-Scan-Speicherbereinigung 166 6.1.2 Kopierende Speicherbereinigung 167 6.1.2.1 Kopierende Speicherbereinigung mit zwei Regionen 167 6.1.2.2 Kopierende Speicherbereinigung mit Generationen 170 6.2 Inkrementelle Techniken: Referenzzählende Algorithmen 172 7 Ausblick 175 7.1 Compiler-Entwicklung 175 7.1.1 Bootstrapping und Cross-Compiler 175 7.1.2 Compiler-Generatoren 176

XII Inhaltsverzeichnis 7.2 Varianten von Compilern 177 7.2.1 Dynamische Recompilierung 177 7.2.2 Deutsch-Schiffman-Technik 177 7.2.3 Just-In-Time Compiler 178 7.2.4 Compiler und Programmkorrektheit 178 7.3 Hardware-Unterstützung 179 Teil 2: Praxis 8 Compilerbaupraktikum 183 9 Java - Die Programmiersprache 185 9.1 Java-Merkmale 185 9.2 Objekte in Java 188 9.3 Ausdrücke und Statements 188 9.4 Einschränkungen 188 9.5 Aufgaben 189 10 Das MAX-System 191 10.1 Eigenschaften 191 10.2 MAX-Spezifikationen 191 10.3 Ordnungssortierte Terme 192 10.4 Occurrence- bzw. Knotensorten 193 10.5 Muster 194 10.5.1 Sondersymbole in den Mustern 194 10.5.2 Mustersyntax 194 10.6 Attribute 195 10.7 Funktionen 196 10.8 Kontextbedingungen 197 10.9 Generierung eines Java-Übersetzers mit dem MAX-System 198 10.10 Aufgaben 198 11 Befehle der virtuellen Java-Maschine 201 11.1 Konstanten auf den Keller laden 202 11.2 Lokale Variablen auf den Keller laden 202 11.3 Speichern in eine lokale Variable 203 11.4 Manipulation des Kellers 204 11.5 Behandlung von Objekten 204 11.6 Arithmetische Befehle 205 11.7 Sprungbefehle 206 11.8 Methodenaufruf und Rücksprung 207

XIII 11.9 Überprüfung der Klassenzugehörigkeit 209 11.10 Erzeugung des JVM-Codes 209 12 Übersetzerspezifikation 211 12.1 Bindungsanalyse (Identifikation) 211 12.1.1 Ziele der Bindungsanalyse 211 12.1.2 Bindungsanalyse für Java 211 12.1.3 Aufgaben 212 12.2 Typdeklarationen und Typisierung 213 12.2.1 Typdeklarationen 213 12.2.2 Typisierung von Ausdrücken 214 12.2.3 Aufgaben 218 12.3 MAX-Spezifikation der Klassendatei 219 12.3.1 Aufgaben 221 12.4 Ausdrücke und ihre Codeerzeugung 222 12.4.1 Wert eines Ausdrucks 222 12.4.2 Codeerzeugung für Ausdrücke 223 12.5 Statements und ihre Codeerzeugung 230 12.5.1 Statements 230 12.5.2 Code für Statements 230 12.5.3 Ausdrücke als Statements 233 12.5.4 Aufgaben 233 12.6 Methodendeklaration 234 12.6.1 Abstrakte Syntax 234 12.6.2 Methodeneinträge in die Klassendatei 235 12.6.3 Attributierung für Method -Knoten 236 12.7 Kellerrahmen von Java-Methodeninkarnationen 237 12.8 Methodenaufruf 238 12.8.1 Abstrakte Syntax 238 12.8.2 Methodenreferenzeinträge im Konstantenpool 239 12.8.3 JVM-Code 240 12.8.4 Attributierung für MethodCall -Knoten 241 12.8.5 Aufgaben 242 12.9 Vererbung 243 12.9.1 Vererbung in Java 243 12.9.2 Implementierung von Vererbung 244 12.9.3 Berücksichtigung der Vererbungshierarchie 245 12.9.4 Implementierung von super 245 12.9.5 Aufgaben 246 12.10 Ausgabeschnittstelle 247 12.10.1 Java-Klassen für print-ausgaben 247 12.10.2 Code für print-ausgaben 249 12.10.3 Aufgaben 250

XIV Inhaltsverzeichnis Anhang A: Klassenfile und Bytecode 253 Anhang B: Java-Syntax 257 Literatur 273 Sachverzeichnis 277