Serie 7 - AG Programmiersprachen und Übersetzerkonstruktion

Werbung
Lehrstuhl für Programmiersprachen
und Übersetzerkonstruktion
Institut für Informatik
Christian-Albrechts-Universität zu Kiel
Prof. Dr. M. Hanus, S. Fischer
7. Übung zur Vorlesung Prinzipien von Programmiersprachen“
”
Wintersemester
2006/2007
Abgabe: Dienstag, 12.12.2006 in der Vorlesung
Aufgabe 24
In dieser Aufgabe vergleichen wir Unterklassenbildung, wie sie in der Vorlesung definiert
wurde (mit Ko- und Kontravarianz) mit Vererbung in Java. Seien die Klassen A, B, C und D
wie folgt definiert:
public class
public C
public C
public D
public D
A {
cc(
cd(
dc(
dd(
C
D
C
D
x
x
x
x
)
)
)
)
{
{
{
{
System.out.print(
System.out.print(
System.out.print(
System.out.print(
"A"
"A"
"A"
"A"
);
);
);
);
return
return
return
return
null;
null;
null;
null;
}
}
}
}
);
);
);
);
return
return
return
return
null;
null;
null;
null;
}
}
}
}
public static void main( String[] args ) {
B b = new B();
b.cc(
b.cd(
b.dc(
b.dd(
new
new
new
new
C()
C()
C()
C()
);
);
);
);
b.cc(
b.cd(
b.dc(
b.dd(
new
new
new
new
D()
D()
D()
D()
);
);
);
);
}
}
class B extends A {
public C cc( C x
public D cd( C x
public C dc( D x
public D dd( C x
}
)
)
)
)
{
{
{
{
System.out.print(
System.out.print(
System.out.print(
System.out.print(
"B"
"B"
"B"
"B"
class C {}
class D extends C {}
(a) Was ist die Ausgabe von A.main()?
(b) Welche Methoden von B sind von A (im Sinne der Vorlesung und in Java) geerbt?
(c) Wieviele Methoden hat die Klasse B? Welche sind überladen?
Aufgabe 25
Definieren Sie eine abstrakte Klasse SearchTree. Ein Objekt dieser Klasse soll einen geordneten binären Baum repräsentieren. Die Klasse soll die beiden abstrakten Methoden
boolean contains( java.lang.Comparable x )
SearchTree insert( java.lang.Comparable x )
besitzen. Konkretisieren Sie den Suchbaum mittels zweier Klassen Branch und Leaf. Ein Objekt der Klasse Branch besitzt drei Attribute: Ein Objekt, welches java.lang.Comparable
implementiert und die Attribute left und right vom Typ SearchTree. Ein Objekt der
Klasse Leaf besitzt kein Attribut.
Aufgabe 26
In dieser Aufgabe sollen Sie sich mit dem Hugs-System vertraut machen.
(a) Verwenden Sie hierzu zunächst das in der Vorlesung vorgestellte Programm zur Fakultätsberechnung.
Untersuchen Sie wieviele Schritte zur Berechnung von fac 10 notwendig sind. Die
Ausgabe der Schrittzahl kann in Hugs mit :set +s eingeschaltet werden.
(b) Implementieren Sie die Fibonacci-Funktion in Haskell.
f ib(0) = 0
f ib(1) = 1
f ib(n) = f ib(n − 1) + f ib(n − 2) ∀n > 1
Bestimmen Sie anhand der benötigten Reduktionsschritte die Zeitkomplexität Ihrer
Implementierung (liegt in O(??)). Die einfachste Methode ist eine graphische Auswertung.
Können Sie Ihre Funktion entscheidend optimieren?
Wichtige Interpreter-Kommandos des Hugs-Systems:
• : l filename
Löschen aller vorhandenen Funktionsdefinitionen (außer Prelude) und Laden des Programms filename.
• :r
Wiederholt die letzte Ladeoperation, somit werden alle Funktionsdefinitionen aktualisiert.
• :q
Verlassen des Hugs-Systems.
• :?
Kommandoliste wird angezeigt.
• Ausdruck (z.B. fac 3)
Start einer Funktionsberechnung.
Herunterladen