Nächste Seite: Klassenstrukturen zur Simulation
Aufwärts: Programmiertechnische Hinweise
Vorherige Seite: Objektorientierte Programmierung und Klassen
  Inhalt
Es gibt bestimmte Algorithmen und Strukturen, die nicht nur für einen Datentyp
sinnvoll sind. Betrachten wir als Beispiel einen Sortieralgorithmus: Einmal
programmiert, wäre es sinnvoll, wenn das Programm sowohl zum Sortieren von
Zahlen als auch zum Sortieren von anderen Dingen wie z. B. Namen in
alphabetischer Reihenfolge verwendet werden könnte. Wenn ein Algorithmus so
programmiert wird, dass er für möglichst viele Zwecke und Datentypen eingesetzt
werden kann, spricht man auch von generischer Programmierung. Diese ist
mit den Mitteln älterer Programmiersprachen oft gar nicht oder nur mit sehr
großem Aufwand und unter Verwendung unintuitiver Konstrukte umsetzbar. Dies
sieht man z. B. an der Implementation der qsort()-Funktion in der
C-Standardbibliothek [12, S. 253]. Der Benutzer dieses
Sortieralgorithmus muss bei jedem Funktionsaufruf sowohl die Größe einzelner
Objekte des verwendeten Datentyps angeben als auch eine Funktion, die zwei
Objekte vergleicht. Es ist klar, dass dieses Verfahren nicht sehr intuitiv ist
und außerdem durch die Informationen, die jedes Mal angegeben werden müssen, zu
einer zusätzlichen Fehlerquelle wird.
Es wäre besser, wenn ein Algorithmus ohne Komplikationen für dessen Benutzer
für verschiedene Datentypen verwendet werden könnte. Eine derartige Lösung
bietet die Programmiersprache C++ durch die so genannten Templates. Damit
müssen nicht alle verwendeten Datentypen exakt spezifiziert werden. Es reicht,
wenn man einen generischen Datentyp mit Hilfe des template-Keywords
einführt. Der Compiler übernimmt dann das Einsetzen des konkreten Typs. Die
Tatsache dass diese Spezialisierung schon beim Übersetzen durchgeführt
wird, hat einige Konsequenzen:
- Die Verwendung von Templates hat keine negativen Auswirkungen auf die
Geschwindigkeit des Programms.
- Eventuelle Fehler im Programm oder Unzulänglichkeiten der verwendeten
Datentypen wie fehlende Operatorüberladungen können bereits bei der Übersetzung
des Programms erkannt werden.
- Dem Compiler muss die gesamte Definition des Templates im Quellcode
vorliegen. Es ist also nicht möglich, vorkompilierte Template-Bibliotheken zu
erstellen. Die vollständigen Definitionen müssen in jede Datei, in der sie
verwendet werden, mittels #include-Befehl eingefügt werden.
Nächste Seite: Klassenstrukturen zur Simulation
Aufwärts: Programmiertechnische Hinweise
Vorherige Seite: Objektorientierte Programmierung und Klassen
  Inhalt
FAQ Homepage