Was ist generische Programmierung? |
Es gibt mehrere Definitionen von generischer Programmierung. Als Arbeitsdefinition könnte
A programming technique which aims to make programs more adaptable by making them more general. Generic programs often embody non-traditional kinds of polymorphism; ordinary programs are obtained from them by suitably instantiating their parameters. In contrast with normal programs, the parameters of a generic programs are often quite rich in structure. For example they may be other programs, types or type constructors or even programming paradigms.
aus dem Free Online Dictionary of Computing ( http://foldoc.doc.ic.ac.uk/) dienen. Weil generische Programmierung einen natürlichen Bezug zu Polymorphismus hat, wird sie mit objektorientierter Programmierung [ObjektOrientierteProgrammierung] in Verbindung gebracht.
Das Merkmal generischer Programme ist, dass sie auf eine in anderen Ansätzen unbekannte Art durch Parameter definierbar bleiben. Der einfachste Fall generischer Programmierung sind generische Funktionen, die durch einen Typ-Parameter gekennzeichnet sind.
|
Diese Funktion definiert die Funktion Max nicht für einen Typ, sondern für alle Typen für die die Operatoren < und := definiert sind.
Eine etwas weiter gehende Parametrisierung bieten generische Module in ADA:
|
Eine Parametrisierung für eine boolsche Algebra könnte dann etwa so aussehen:
|
(Beispiel aus Bertrand Meyer, Object Oriented Software Construction)
Wie werden generische Programme verwendet? |
Generische Programmierung hat eine nicht nur oberflächliche Verwandtschaft zu mathematischer Modellbildung. Beide liefern eine Lösung für ein abstrakt formuliertes Problem. Die Forderung an den Anwender eines generischen Programms, oder eines mathematischen Modells, besteht dann darin, sein konkretes Problem so darzustellen, dass es die Voraussetzungen des Modells bzw. Programms erfüllt.
Um die generische Funktion Max zu verwenden muss ein Anwender sicherstellen, dass der verwendete Typ alle Anforderungen erfüllt, die die Funktion Max an den Typ "Type" stellt.
Ein generisches Programm, eine generische Klasse oder eine generische Funktion definiert eine Schnittstelle, die die Parameter einhalten müssen. Dies geschieht jedoch nicht ausdrücklich, sondern dadurch, dass bestimmte Eigenschaften des Parameters verwendet werden.
Welche Programmiersprachen unterstützen generische Programmierung? |
Welche Eigenschaften von Programmiersprachen sind dafür wichtig? |
Was ist "eingeschränkt generisch" |
Eigentlich sind alle Möglichkeiten der Parametrisierung eingeschränkt:
Wenn eine Implementation Einschränkungen erlaubt, dann wird bei der Angabe des generischen Parameters ausdrücklich angegeben, welchen Einschränkungen die Wahl eines aktuellen Parameters unterworfen ist. Der Vorteil dieser Form von generischen Parametern ist, dass schon im Quelltext dokumentiert [DokumentationImQuelltext] ist, welche Einschränkungen gelten, und dass dies nicht erst zum Zeitpunkt der Übersetzung erkannt wird.
Einige objektorientierte Programmiersprachen unterstützen das Konzept durch MehrfachVererbung.
Diskussion |
Die ganze Seite dreht sich doch nur um parametrische Polymorphie! Das gibt es seit 30 Jahren in ML und es braucht keinen neuen Namen. Nein, parametrische Polymorphie braucht weder Casts noch Introspektion noch Objekte und überladen werden sowieso nicht Schnittstellen, sondern Namen. Polymorph isses, wenn irgendwas mehrere verwandte Type gleichzeitig hat, generisch isses, wenn Algorithmen spezialisiert werden. Die STL wäre nur polymorph, wenn sie nur Container enthielte. Sie ist aber generisch, weil beispielsweise std::advance verschiedene Komplexität hat, je nach dem, welcher Kategorie die verwendeten Iteratoren angehören.