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.

3.6 Generische Klassen<br />

Bei <strong>der</strong> Diskussion abstrakter Datentypen in Abschnitt 3.2.1 haben wir eine Möglichkeit angesprochen, die<br />

Flexibilität abstrakter Definitionen dadurch zu erweitern, daß Typparameter zugelassen werden. Der Bedarf<br />

hierfür wird beson<strong>der</strong>s deutlich bei Klassen, die allgemeine, häufig verwandte Datenstrukturen wie Fel<strong>der</strong>,<br />

Listen, Bäume und Matrizen beschreiben.<br />

Nehmen wir zum Beispiel an, wir wollten eine Klasse definieren, die eine Liste ganzer Zahlen repräsentiert.<br />

Diese sähe dann etwa so aus<br />

class INTLIST<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(n:INTEGER) is -- Hänge n vor die Liste<br />

do...end;<br />

head: INTEGER is -- Erstes Element<br />

do...end;<br />

tail is -- Entferne erstes Element<br />

do...end<br />

end -- class INTLIST<br />

Wenn wir nun eine Liste reeller Zahlen benötigen, dann müssten wir das Ganze noch einmal schreiben<br />

class REALLIST<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:REAL) is -- Hänge n vor die Liste<br />

do...end;<br />

head: REAL is -- Erstes Element<br />

do...end;<br />

tail is -- Entferne erstes Element<br />

do...end<br />

end -- class REALLIST<br />

Dabei wird sich herausstellen, daß – bis auf den Namen REAL – die gesamte Implementierung von REALLIST<br />

mit <strong>der</strong> von INTLIST übereinstimmt. Wir haben also separate Implementierungen für Listen, obwohl diese<br />

jeweils nur dieselben Dienstleistungen anbieten. Dies macht wenig Sinn und birgt zudem die Gefahr in sich,<br />

daß spätere Erweiterungen nur in einer <strong>der</strong> beiden Klassen durchgeführt werden. Integerlisten könnten sich<br />

also plötzlich an<strong>der</strong>s verhalten als Listen reeller Zahlen.<br />

Aus diesem Grunde bietet Eiffel das Konzept <strong>der</strong> generischen Klasse an, um die Wie<strong>der</strong>verwendbarkeit von<br />

Modulen noch weiter zu verbessern. Eiffel ist die erste praxisrelevante Sprache, die dieses Konzept in voller<br />

Allgemeinheit aufgenommen hat.<br />

3.6.1 Parametrisierung von Klassen<br />

Eine generische Klasse wird mit dem Datentyp parametrisiert, welcher die Grundelemente <strong>der</strong> generische<br />

Klasse beschreibt. Abbildung 3.19 beschreibt eine generische Klasse LIST[X] für Listen von Objekten. Die<br />

Eiffel Syntax ähnelt dabei <strong>der</strong> in Abbildung 3.4 auf Seite 65 benutzten Schreibweise für abstrakte Datentypen.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!