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.
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.