Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
class STUDENT<br />
feature<br />
universität: STRING;<br />
fachbereich: INTEGER;<br />
matrikelnummer: INTEGER<br />
end; -- class STUDENT<br />
class HILFSKRAFT<br />
inherit<br />
ARBEITNEHMER<br />
redefine<br />
gehalt<br />
export<br />
name, vornamen, adresse, gehalt<br />
end; -- feature-Anpassung von ARBEITNEHMER<br />
STUDENT<br />
export<br />
universität, fachbereich<br />
end -- feature-Anpassung von STUDENT<br />
feature<br />
monatsstunden: INTEGER;<br />
gehalt: REAL is -- Gehalt berechnen<br />
do Result := Festgehalt nach monatsstunden end<br />
end -- class HILFSKRAFT<br />
Abbildung 3.37: Mehrfachvererbung<br />
Eine häufige Anwendung von Mehrfachvererbung ist die Implementierung eines abstrakten Datentyps durch<br />
Routinen eines an<strong>der</strong>en, also zum Beispiel die Simulation von Listen durch Fel<strong>der</strong>. Da sowohl Listen als<br />
auch Fel<strong>der</strong> bereits durch Klassen beschrieben waren, ist <strong>der</strong> sinnvollste Weg, dies zu tun, eine spezielle<br />
Implementierung FIXED LIST anzugeben, welche die Klasse aller durch Fel<strong>der</strong> realisierten Listen beschreibt.<br />
Die Objekte dieser Implementierungsklasse sind also sowohl Listen als auch spezielle Fel<strong>der</strong>. Deshalb sollte<br />
FIXED LIST Erbe sowohl von <strong>der</strong> Klasse deferred class LIST als auch von ARRAY sein. Abbildung 3.38 zeigt<br />
eine mögliche Realisierung dieser Klasse.<br />
FIXED LIST bietet denselben Funktionsumfang wie LIST und stellt hierzu effektive Versionen <strong>der</strong> aufgeschobenen<br />
Routinen bereit, die in Begriffen von ARRAY-Operationen implementiert wurden. Deshalb werden alle<br />
features von LIST wie<strong>der</strong> exportiert, aber keines von ARRAY. Die features length und empty waren bereits<br />
effektiv deklariert worden und müssen nicht erneut aufgeführt werden. new muß als Initialisierungsprozedur<br />
vereinbart werden. Auf die erneute Angabe <strong>der</strong> Vor- und Nachbedingungen kann verzichtet werden, da sie<br />
sich nicht än<strong>der</strong>n (siehe Abschnitt 3.8.10)<br />
Die Implementierung beschreibt eine Liste als Feld, welches die Listenelemente in umgekehrter Reihenfolge<br />
auflistet (das ist am einfachsten zu implementieren) und die Größe length als Zeiger auf das erste Element<br />
benutzt. new erzeugt ein Feld <strong>der</strong> Länge 0, cons erweitert die Länge um 1, vergrößert das Feld mit resize,<br />
wenn (if) dies hierfür erfor<strong>der</strong>lich ist, und trägt das genannte Listenelement an <strong>der</strong> durch length bezeichneten<br />
“ersten” Stelle ein. head greift einfach auf diese “erste” Stelle zu und tail verschiebt den Zeiger length um<br />
1 zurück, wenn dies möglich ist.<br />
Das Beispiel ist typisch für eine verbreitete Art von Mehrfachvererbung, die man als Vernunftehe bezeichnen<br />
könnte. Eine Klasse bringt den Funktionsumfang, die an<strong>der</strong>e die Implementierungswerkzeuge. Beide zusammen<br />
liefern eine effiziente Implementierung <strong>der</strong> gewünschten Routinen.<br />
[Meyer, 1988, Kapitel 10.4.2-10.4.4.] diskutiert weitere verbreitete Anwendungsformen für Mehrfachvererbung.<br />
Unter diesen ist beson<strong>der</strong>s die Möglichkeit einer einheitlichen Testmethodik für Klassen hervorzuheben. Je<strong>der</strong><br />
Test basiert auf gewissen Grundmechanismen wie Einlesen und Abspeichern von Benutzereingaben, Ausgeben