---
Institut für Informatik und Praktische Mathematik
Christian-Albrechts-Universität zu Kiel

Übungen zu Implementierung objektorientierter Sprachen
Priv.-Doz. Dr. Wolfgang Goerigk

Serie 6    [PostScript]

---

 
In dieser Serie dreht es sich um Java-Klassendateien. Wir wollen sie lesen und auch generieren. Um die Programmierarbeit in Grenzen zu halten, stehen in ClassFile.java und in ByteCode.java Hilfsroutinen bereit, die das Einlesen vorbereiten und die Erzeugung von Bytecode-Sequenzen erleichtern.

---

 
Aufgabe 17 ( Einlesen von Klassendateien, Praktische Hausaufgabe 8 Pkt.)

Schreiben Sie ein Java-Programm, das eine Java-class-Datei einliest und die enthaltenen Informationen in abstrakter Form repräsentiert und in lesbarer Form auf den Bildschirm ausgeben kann. Orientieren Sie sich dabei an der in Vorlesung und Übung angegebenen Struktur und ziehen Sie die JVM-Spezifikation zu Rate. Testen Sie Ihr Programm mit test.class (Download).

Hinweis:  Lesen Sie die Datei vollständig und repräsentieren Sie alle in ihr vorhandene Information. Ein wesentlicher Teil der Arbeit für das Einlesen der Datei ist bereits in ClassFile.java programmiert. Ergänzen Sie dieses Programm insbesondere um die Interpretation der Attribute, die gemäß JVM-Spezifikation korrekt gelesen werden müssen. Dies ist insbesondere für das Lesen der Bytecodes der Methoden (Wert des Attributs "Code") wesentlich.
 

Abgabetermin: Mittwoch, 14.2.2001
 
 

---


Aufgabe 18 ( Methoden und ihr Code, Praktische Hausaufgabe 8 Pkt. )


Ergänzen Sie Ihr Programm aus Aufgabe 17 derart, daß Sie pro Methode deren Bytecode in lesbarer Form ausgeben können. Die Datei test.class enthält eine Klasse mit drei Methoden ("main", den Konstruktor "<init>", und eine weitere). Geben Sie den Code dieser (unbekannten) Methode  aus und beschreiben Sie seine Funktionsweise.

Hinweis:  Um Bytecode-Sequenzen lesbar auszugeben, schreiben Sie in Ergänzung zu dem in ByteCode.java vorhandenen Code Methoden "String toString()". Diese werden vom Java-System implizit aufgerufen, wenn Objekte in Zeichenreihen umgewandelt werden, also auch beim Ausdrucken.

Abgabetermin: Mittwoch, 14.2.2001
 
 

---


Aufgabe 19 (Erzeugen von Klassendateien 1, Praktische Hausaufgabe 10 Pkt. )

Kompilieren Sie das Fakultätsbeispiel aus Aufgabe 2 (Serie 1). Sie erhalten eine Klassendatei fac.class. Lesen Sie diese ein und modifizieren Sie den Code der Methode "fact" derart, daß "fact(6)" anstelle von "fact(10)" berechnet wird. Generieren Sie die modifizierte Klassendatei. Führen Sie diese mit dem Java-System aus.
 

Hinweis:  Sinn der Aufgabe ist es, den Teil eines Übersetzers in JVM-Code bereitzustellen, der aus abstrakter Information über Klassen, Instanzvariablen und übersetzten Methoden vollständigen, korrekten und ausführbaren JVM-Code generiert.

Abgabetermin: Mittwoch, 14.2.2001
 

 

 

---