Nächste Seite: Klassenstrukturen zur Simulation Aufwärts: Programmiertechnische Hinweise Vorherige Seite: Objektorientierte Programmierung und Klassen   Inhalt

Generische Programmierung und Templates

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:




Nächste Seite: Klassenstrukturen zur Simulation Aufwärts: Programmiertechnische Hinweise Vorherige Seite: Objektorientierte Programmierung und Klassen   Inhalt
FAQ Homepage