22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!