Generische Programmierung
 
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

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.

Generic[Type] Function Max(a, b : Type) : Type
Is
   if b < a 
      then Result := a 
      else Result := b
End Max

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:

generic
   type T is private;
   with function "+" (a, b: T) return T is <>;
   with function "*" (a, b: T) return G is <>;
   zero: T;
   unity: T;
package VECTOR_HANDLING is
   ...
end VECTOR_HANDLING;

Eine Parametrisierung für eine boolsche Algebra könnte dann etwa so aussehen:

package BOOLEAN_VECTOR_HANDLING is 
  new VECTOR_HANDLING(BOOLEAN, 
                      "or", "and", 
                      false, true);

(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:

Viele Implementationen generischer Programmierung machen diese Einschränkung aber nicht ausdrücklich: Erst wenn ein generisches Programm mit einem nicht passenden Parameter parametrisiert wird, dann wird dieser Konflikt erkannt.

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.


KategorieProgrammierSprachenKonzepte KategorieProgrammierung KategorieJargon
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 25. September 2007 10:07 (diff))
Suchbegriff: gesucht wird
im Titel
im Text