Studium, Ausbildung und Beruf

web uni-protokolle.de
 powered by
NachrichtenLexikonProtokolleBücherForenDonnerstag, 19. September 2019 

Generische Programmierung


Dieser Artikel von Wikipedia ist u.U. veraltet. Die neue Version gibt es hier.
Generische Programmierung (auch: Generative Programmierung) ist ein Programmierstil dem die Algorithmen so weit wie möglich den Datenstrukturen mit denen sie arbeiten getrennt Paradebeispiel ist die Standard Template Library von der weite Teile in die von C++ übernommen wurden.

Wesentlich bei der generischen Programmierung ist die Algorithmen nicht für einen bestimmten Datentyp geschrieben werden sondern nur bestimmte Anforderungen die Typen stellen. Ein gutes Beispiel liefert Maximumsfunktion

<math>\mathrm{max}: T \times T \rightarrow T</math>

die für zwei gegebene Werte a desselben Typs den größeren Wert max(a b)

Voraussetzung ist dass a und b vergleichbar sind der Ausdruck <math>a<b</math> also definiert und eine Ordnung beschreibt.

In klassischen Programmiersprachen würde man hier jeden Datentyp eine Funktion programmieren die für jeden Typ getrennt tun z.B. in C :

 int maxint(int a int b) { (a < b) return b; else return }  

 int maxfloat(float a float b) { (a < b) return b; else return }  

Hierbei fällt auf dass der Code sich immer derselbe ist nur die Typen sich. Diese Wiederholung lässt sich zwar mit Makros umgehen (so wird in C üblicherweise Maximumsfunktion über ein Makro

 #define MAX(a b) ((a)<(b)? (b) :  

definiert wobei ?: ein if/else für ist) aber damit handelt man sich andere ein (z.B. werden bei obigem Makro beide zweimal ausgewertet).

Auch der objektorientierte Ansatz funktioniert hier nicht zufriedenstellend: Definiert (z.B. in C++ ) eine Klasse Vergleichbares und leitet davon z.B. für eine Simulation die Klassen Laenge und Masse ab (sagt also dass sowohl Längen auch Massen etwas vergleichbares sind) so kann zwar schreiben:

 Vergleichbares& max(Vergleichbares& a Vergleichbares& b) { (a < b) return b; else return }  

aber es gibt immer noch 2

  • Zunächst dass der Ergebnistyp nur "Vergleichbares" man muss dem Compiler also beim Aufruf sagen dass das Maximum zweier Längen wieder Länge ist (sofern man dessen Längeneigenschaften benutzen was wahrscheinlich ist) vor allem aber
  • dass diese Funktion es erlaubt das einer Länge und einer Masse zu "bestimmen" diese Operation völliger Unsinn ist.

Generische Programmierung z.B. in C++ über Templates realisiert verbindet nun die Flexibilität des mit der Typsicherheit und den anderen Eigenschaften Funktion. Die generische Implementierung von max in ist

 template<class T> T max(T a T { if ( a < b) return else return a; }  

Die so definierte Funktion max() kann nun für alle Typen mit verwendet werden.

Ein weiterer Vorteil ist dass man explizit bei der Definition sagen muss dass Typ vergleichbar ist (z.B. durch Ableiten von entsprechenden Klasse) sondern man muss nur sicherstellen er die nötigen Eigenschaften hat (in diesem einen operator< mit korrekter Semantik ). Auf diese Weise können auch Typen der Funktion verwendet werden die in Unkenntnis Funktion entworfen wurden (z.B. die eingebauten Typen Programmiersprache).

Ein Algorithmus sollte dabei stets möglichst vom Typ fordern. So arbeiten die Algorithmen STL nicht direkt auf den Containern sondern mit Iteratoren . Auf diese Weise werden sie weitgehend von den genauen Eigenschaften des speziellen Containers können teilweise sogar direkt auf Ein- und arbeiten.




Bücher zum Thema Generische Programmierung

Dieser Artikel von Wikipedia unterliegt der GNU FDL.

ImpressumLesezeichen setzenSeite versendenSeite drucken

HTML-Code zum Verweis auf diese Seite:
<a href="http://www.uni-protokolle.de/Lexikon/Generische_Programmierung.html">Generische Programmierung </a>