22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!