Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
class LIST[X]<br />
creation new<br />
feature<br />
empty: BOOLEAN is -- Ist die Liste leer ?<br />
do...end;<br />
new is -- Erzeuge leere Liste<br />
do...end;<br />
cons(r:X) is -- Hänge r vor die Liste<br />
do...end;<br />
head: X is -- Erstes Element<br />
do...end;<br />
tail is -- Entferne erstes Element<br />
do...end<br />
end -- class LIST[X]<br />
Abbildung 3.19: Generische Klassendefinition<br />
Der in eckigen Klammern angegebene Name – hier X – heißt formaler generischer Parameter. Es ist durchaus<br />
möglich, mehrere formale generische Parameter anzugeben. Diese werden dann durch Kommata von einan<strong>der</strong><br />
getrennt wie z.B. in GENERISCH[X,Y].<br />
Innerhalb <strong>der</strong> Klasse kann ein formaler generischer Parameter in allen Deklarationen wie ein normaler Datentyp<br />
eingesetzt werden, sei es als Typ von Attributen, Funktionen (wie bei head), Parametern in Routinen<br />
(wie bei cons) o<strong>der</strong> von lokalen Variablen. Nach außen hin ist <strong>der</strong> formale generische Parameter unbekannt.<br />
Will man eine generische Klasse benutzen, um eine Größe zu deklarieren, so muß man aktuelle generische<br />
Parameter angeben, welche den Platz <strong>der</strong> formalen einnehmen, wie zum Beispiel bei<br />
il: LIST[INTEGER]<br />
Selbstverständlich muß die Anzahl <strong>der</strong> aktuellen und formalen generischen Parameter übereinstimmen. Als<br />
aktuelle generische Parameter ist praktisch alles zugelassen, was innerhalb <strong>der</strong> Kundenklasse bekannt ist,<br />
also einfache Typen, Klassentypen und ggf. sogar formale generische Parameter <strong>der</strong> Kundenklasse, falls diese<br />
ebenfalls eine generische Klasse ist. 13 Durchaus erlaubt sind also Deklarationen <strong>der</strong> Form<br />
personenlisten: LIST[LIST[PERSON]]<br />
Parametrisierte Klassen sind keine Typen, son<strong>der</strong>n Typschemata. Erst mit den Argumenten werden sie zu<br />
Typen. Ohne aktuelle Argumente kann man ihre Merkmale nicht ausführen und auch nicht austesten.<br />
3.6.2 Typprüfung<br />
Generizität hat nur in einer getypten Sprache eine Bedeutung, in <strong>der</strong> jede Größe einen bestimmten Typ<br />
haben muß. Nur dann ist es möglich zu prüfen, ob eine Operation überhaupt sinnvoll sein kann. An<strong>der</strong>nfalls<br />
gibt es keine Möglichkeit, die Typen <strong>der</strong> in eine Datenstruktur eingehenden Elemente einzuschränken, was<br />
normalerweise zu Laufzeitfehlern (im günstigen Falle) o<strong>der</strong> zu völlig unsinnigen Ergebnissen (z.B. Auslesen<br />
<strong>der</strong> internen Darstellung einer Zeichenkette als ganze Zahl) führt.<br />
Beispiel 3.6.1<br />
Nehmen wir einmal an, die Deklaration einer Klasse enthalte die Deklarationen<br />
il: LIST[INTEGER]<br />
pliste: LIST[PERSON]<br />
p: PERSON<br />
13 Im Zusammenhang mit Vererbung werden wir eine weitere Form – Typen <strong>der</strong> Form like Klassenausdruck – kennenlernen,<br />
die als aktueller generischer Parameter möglich ist.