---

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

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

Serie 2    [PostScript]

---


Eine Klassendefinition legt einen Namen, eine Liste evtl. mehrer Superklassen, eine Liste von (direkten) Instanzvariablen und eine Liste von (direkten) Methodendefinitionen fest. Zusammen mit der Vererbungsbeziehung (s.u.) sind so die Merkmale von Instanzen der Klasse bestimmt. Instanzvariablen und Methoden zusammen heißen (direkte) Komponenten der Klasse. Eine Klassendefinition notieren wir allgemeinen abstrakt (zunächst) durch

   class A (S1, ... ,Sl) {
     T1 x1; ... Tk xk;
     R1 m1 (A1,1 y1,1, ... , A1,m1 y1,m1) body1;
     ...
     Rn mn (An,1 yn,1, ... , An,mn yn,mn) bodyn;
   }

und definiert eine Klasse mit Namen A,  Superklassen S1,...,Sl, k Instanzvariablen xjvom Typ Tjund n Methoden mi mit Argumenten yi,jvom Typ Ai,j, Resultattyp Ri und Rumpf bodyi. (Bemerkung: Dies ist nicht konkrete Java-Syntax.)

Ein Programm besteht aus (evtl.) mehreren solchen Klassendefinitionen.

Die Klassen bilden den Vererbungsgraphen des Programms wie folgt: Knoten dieses Graphen sind die Klassen (mit ihren direkten Komponenten). Wir ziehen eine Kante von einer Klasse A zu einer Klasse B, falls B in der Liste der Superklassen der Klasse A vorkommt.

Der Verererbungsgraph ist i.a. nicht zusammenhängend, in den meisten Sprachen wird jedoch eine Default-Superklasse (in Java die Klasse Object) für den Fall einer leeren Superklassenliste eingesetzt, die so die Wurzel des Vererbungsgraphen bildet.
 
 

---


Aufgabe 3 ( Hausaufgabe 6 Pkt.)

Eine Klasse A besitzt eine Komponente M (M ist Komponente von A), falls M entweder direkte Komponente von A ist oder eine der Superklassen von A die Komponente M besitzt. Betrachten Sie die folgenden Klassendefinitionen: Beachten Sie: Die Syntax verstehen wir als abstrakte Syntax. Sie ist nur an die von Java angelehnt; Java unterstützt z.B. mehrfache Vererbung von Klassen (wie in Ellipse) im allg. nicht.  Außerdem muss der (einen) Superklasse das Schlüsselwort extends vorangehen. Das Programm ist aus verschiedenen Gründen nicht sinnvoll.

Abgabetermin: Mittwoch, 29.11.2000
 
 

---


Aufgabe 4 ( Hausaufgabe 6 Pkt. )

Geben Sie einen Algorithmus an, der zu einer Klasse eines Programms (bzw. zum zugehörigen Vererbungsgraphen) alle Komponenten bestimmt, die die Klasse besitzt. Beachten Sie dabei die von Ihnen zur Lösung von Konflikten formulierte Regel.

Welche Eigenschaft muss der Vererbungsgraph des Programms haben, damit Ihr Algorithmus terminiert?

Hinweis: Man spricht vom Finalisieren einer Klasse. Eine Klasse ist finalisiert (enthält alle ihre Komponenten), oder sie enthält ihre direkten Komponenten und muss um die Komponenten ihrer (finalisierten) Superklassen unter Einhaltung der Konfliktlösung ergänzt werden. Bei unauflösbaren Konflikten kann dies auch zu einer Fehlermeldung führen.

Abgabetermin: Mittwoch, 29.11.2000
 
 

---


Aufgabe 5 ( Hausaufgabe 4 Pkt. )

Betrachten Sie die Klassendefinitionen aus Aufgabe 3. Nachdem alle Komponenten aller Klassen bekannt sind (Aufgabe 3 mit der von Ihnen benutzten Konfliktlösungsregel), können Sie jede der Klassen mit all ihren Komponenten neu definieren und auf Vererbung verzichten (d.h. keine der neu definierten Klassen hat eine Superklasse, alle Komponenten der vier Klassen sind als direkte Komponenten lokal deklariert). Abgabetermin: Mittwoch, 29.11.2000
 
 

---