www.wikidata.de-de.nina.az
Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen beispielsweise Einzelnachweisen ausgestattet Angaben ohne ausreichenden Beleg konnten demnachst entfernt werden Bitte hilf Wikipedia indem du die Angaben recherchierst und gute Belege einfugst Generische Programmierung ist ein Verfahren zur Entwicklung wiederverwendbarer Software Bibliotheken Dabei werden Funktionen moglichst allgemein entworfen um sie fur unterschiedliche Datentypen und Datenstrukturen verwenden zu konnen Inhaltsverzeichnis 1 Grundlegendes 2 Beispiele 2 1 C 2 1 1 Verwendung objektorientierter Mittel 2 1 2 Templates 2 2 C 2 2 1 Generische Programmierung 2 2 2 Generische Methoden 3 Generische Programmierung in verschiedenen Programmiersprachen 4 Softwaretechnik 5 Siehe auch 6 Literatur 7 Weblinks 8 EinzelnachweiseGrundlegendes BearbeitenDie Implementierung erfolgt bei einigen Programmiersprachen durch das Konzept generischer Typen bzw Templates so gestalten sich dynamische Programmiersprachen bei denen sich der Typ einer Variable zur Laufzeit andern darf durch ihre verallgemeinerte Polymorphie generisch Von Sprachen die solche Mechanismen bieten sagt man auch dass sie Generik erlauben Wesentlich bei der generischen Programmierung ist dass die Algorithmen nicht fur einen bestimmten Datentyp geschrieben werden sondern nur bestimmte Anforderungen an die Typen stellen Das Prinzip wird auch parametrische Polymorphie genannt Paradebeispiel ist die C Standardbibliothek der Programmiersprache C bei der die Algorithmen so weit wie moglich von den Datenstrukturen mit denen sie arbeiten getrennt werden Beispiele BearbeitenEin Beispiel liefert die Maximum Funktion max T T T displaystyle max T times T to T nbsp die fur zwei gegebene Werte a displaystyle a nbsp b displaystyle b nbsp desselben Typs den grosseren Wert max a b displaystyle max a b nbsp zuruckgibt Voraussetzung ist dass a displaystyle a nbsp und b displaystyle b nbsp miteinander vergleichbar sind der Ausdruck a b displaystyle a leq b nbsp also definiert ist und eine Ordnung beschreibt C Bearbeiten Verwendung objektorientierter Mittel Bearbeiten Der objektorientierte Ansatz funktioniert im Kontext statischer Typisierung nicht zufriedenstellend Zwar lassen sich hier mit Interfaces oder Mehrfachableitung Klassen um andere Datentypen erweitern sodass sich mittels Polymorphie das Verhalten der generischen Programmierung zum Teil nachbauen lasst allerdings wird die vollstandige Unabhangigkeit von unterschiedlichen Typen bzw Klassen damit nicht umgesetzt weil es sich bei diesen Techniken auch nicht strenggenommen um objektorientierte Techniken handelt Definiert man in der Programmiersprache C eine Klasse Vergleichbares und leitet davon zum Beispiel fur eine physikalische Simulation die Klassen Laenge und Masse ab sagt also dass sowohl Langen als auch die Masse etwas vergleichbares sind so kann man zwar schreiben Vergleichbares amp max Vergleichbares amp a Vergleichbares amp b if a lt b return b else return a aber es gibt immer noch zwei Probleme Zunachst dass der Ergebnistyp nur Vergleichbares ist man muss dem Compiler also beim Aufruf explizit sagen dass das Maximum zweier Langen wieder eine Lange ist sofern man dessen Langeneigenschaften benutzen will was wahrscheinlich ist vor allem aber dass diese Funktion es erlaubt das Maximum einer Lange und einer Masse zu bestimmen obwohl diese Operation keinen physikalischen Sinn hat Templates Bearbeiten Generische Programmierung beispielsweise in C uber Templates realisiert verbindet nun die Flexibilitat des Makros mit der Typsicherheit und den anderen Eigenschaften der Funktion Die generische Implementierung von max in C ist template lt typename T gt T max T a T b if a lt b return b else return a Die so definierte Funktion max kann nun fur alle Typen mit Vergleichsoperator verwendet werden Ein weiterer Vorteil ist dass man nicht explizit bei der Definition sagen muss dass ein Typ vergleichbar ist zum Beispiel durch Ableiten von einer entsprechenden Klasse sondern man muss nur sicherstellen dass er die notigen Eigenschaften hat in diesem Fall einen operator lt mit korrekter Semantik Auf diese Weise konnen auch Typen mit der Funktion verwendet werden die in Unkenntnis der Funktion entworfen wurden beispielsweise die eingebauten Typen der Programmiersprache Ein Algorithmus sollte dabei stets moglichst wenig vom Typ fordern So arbeiten die Algorithmen der STL nicht direkt auf den Containern sondern mit Iteratoren Auf diese Weise werden sie weitgehend unabhangig von den genauen Eigenschaften des speziellen Containers und konnen teilweise sogar direkt auf Ein und Ausgabestromen arbeiten C Bearbeiten Generische Programmierung BearbeitenGenerische Programmierung in der Programmiersprache C ahnelt den Templates in C Beispielsweise verwenden Klassen wie HashSet List Dictionary usw generische Typen sehr gut In C werden spitze Klammern verwendet um die Parametertypen in der generischen Klassendeklaration anzugeben Im folgenden Beispiel wird ein Objekt einer generischen Klasse mit zwei Typparametern erstellt using System Deklariert eine Klasse mit zwei Typparametern T und U class Test lt T U gt T object1 Deklariert ein Objekt vom Typ T U object2 Deklariert ein Objekt vom Typ U Konstruktor der Klasse der die zwei Objekte initialisiert public Test T object1 U object2 this object1 object1 this object2 object2 Methode die die zwei Objekte auf der Konsole ausgibt public void Write Console WriteLine object1 Console WriteLine object2 Hauptklasse die die Hauptmethode enthalt class TestClass Hauptmethode die das Programm ausfuhrt public static void Main string args Test lt string DateTime gt testObject new Test lt string DateTime gt Willkommen bei Wikipedia DateTime Now Aufruf des Konstruktors testObject Write Aufruf der Methode Ausgabe auf der Konsole Console ReadLine Generische Methoden BearbeitenEine Methode die mit den Typparametern fur ihren Ruckgabetyp oder ihren Ruckgabeparameter deklariert wird wird als generische Methode bezeichnet Im folgenden Beispiel wird ein Objekt einer generischen Klasse mit einer generische Methoden erstellt using System using System Collections Generic Deklariert eine Klasse mit einem Typparameter T class Test lt T gt private List lt T gt list new List lt T gt Deklariert eine Liste mit dem Typparameter T Diese Methode fugt am angegebenen Index ein Element in die Liste ein public void Insert int index T item list Insert index item Diese generische Methode gib das Element am angegebenen Index zuruck public T Get int index if index gt 0 amp amp index lt list Count return list index return default T Wenn der Index nicht in der Liste ist wird der Standardwert vom Typ zuruckgegeben Diese Methode gibt die Liste Zeile fur Zeile zuruck public override string ToString string text for int i 0 i lt list Count i for Schleife die die Elemente durchlauft text list i r n return text Hauptklasse die die Hauptmethode enthalt class TestClass Hauptmethode die das Programm ausfuhrt public static void Main string args Test lt string gt testObject new Test lt string gt Aufruf des Standard Konstruktors mit dem Typparameter string Fugt drei Elemente in die Liste ein testObject Insert 0 Werde Mitglied bei Wikipedia testObject Insert 1 Willkommen bei Wikipedia testObject Insert 2 Wie gefallt dir Wikipedia Console WriteLine testObject ToString Aufruf der Methode Ausgabe aller drei Elemente auf der Konsole Console WriteLine testObject Get 1 Aufruf der Methode Ausgabe des zweiten Elements auf der Konsole Console ReadLine Generische Programmierung in verschiedenen Programmiersprachen BearbeitenWie bereits erwahnt wird die generische Programmierung in C durch Templates unterstutzt In Ada gab es generische Typen vor der Einfuhrung von Templates in C C Templates sind von Ada beeinflusst unterscheiden sich aber in vielen Punkten 1 In ABAP gibt es ebenfalls generische Datentypen In Java kommen generische Typen ab der Version 1 5 vor In TypeScript und den NET Sprachen C und VB NET ab NET 2 0 gibt es die generischen Typen generics In der Programmiersprache Eiffel existieren generische Klassen Die funktionale Programmiersprache ML und Abkommlinge wie OCaml sowie Haskell erlauben generische Programmierung Typ Polymorphie ist dort konzeptuelle Grundlage Es lassen sich sogar Module generieren Generische Module parametric modules werden hier als Funktor bezeichnet Man kann Funktoren Module als Parameter ubergeben und erhalt ein neues Modul als Ergebnis In Programmiersprachen wie Python welche Datentypen dynamisch verwalten und ausserdem Operatoren unterstutzen kann praktisch jede Methode im Sinne der generischen Programmierung verwendet werden Schliesslich kann man auch die Makros in C zur generischen Programmierung benutzen wenngleich sie ursprunglich nicht zu diesem Zweck eingefuhrt wurden Softwaretechnik BearbeitenEin generisches Modell ist an spezifische Gegebenheiten einer konkreten Situation anpassbar z B ein generisches Vorgehensmodell wie Wasserfall oder Spiralmodell an ein konkretes Projekt Dieser Vorgang wird im Bereich des Software Engineering auch Tailoring genannt Andert sich das generische Modell kann man dessen Auspragungen leicht anpassen wenn der Weg vom Modell zur Auspragung detailliert beschrieben ist und man nur die geanderten Elemente verfolgen muss Bei nicht generischen Modellen spricht man in diesem Zusammenhang auch von Uberanpassung Siehe auch BearbeitenGenerische Programmierung in Java ProgrammierparadigmaLiteratur BearbeitenR Backhouse P Hoogendijk Chapter 3 Generic properties of datatypes In Roland C Backhouse Hrsg Generic programming advanced lectures Lecture Notes in Computer Science 2793 Tutorial Springer Berlin 2003 ISBN 3 540 20194 7 S 97 132 Stephanie Weirich Chris Casinghino Generic programming with dependent types In Jeremy Gibbons Hrsg Generic and indexed programming international spring school SSGIP 2010 Oxford UK March 22 26 2010 revised lectures Lecture Notes in Computer Science 7470 Tutorial Springer Berlin 2012 ISBN 978 3 642 32201 3 S 217 258 Weblinks BearbeitenGeneric Programming Techniques Generics in C Generics in Java Generic classes and methods C GenericsEinzelnachweise Bearbeiten Bjarne Stroustrup 1994 The Design and Evolution of C Kapitel 15 Templates Addison Wesley Reading Massachusetts ISBN 978 0 201 54330 8 Abgerufen von https de wikipedia org w index php title Generische Programmierung amp oldid 230306475