Generischer Typ

In der Informatik sind generische Typen Datentypen mit der Möglichkeit zur Angabe von Typparametern. Man spricht auch von parametrischer Polymorphie.

Ein generischer Typ erlaubt es, Datentypen zu erzeugen, die von den zugrunde liegenden Typen abstrahieren. So kann man eine Liste von Zahlen, eine Liste von Zeichen und eine Liste von Datumsangaben auf die gleiche Weise programmieren, d. h. die Algorithmen zum Einfügen, Suchen und Löschen würden stets gleich ablaufen. Es ist daher wünschenswert, die Implementierung der Liste unabhängig von diesen Typen vorzunehmen.

In Java beispielsweise würde eine generische Liste wie folgt definiert:

 List<T>

Dabei bedeutet List<T> generischer Typ, und T heißt Typparameter. Generische Typen finden sich in allen Programmiersprachen, die das Paradigma der Generischen Programmierung unterstützen.

Bei Programmiersprachen gibt es prinzipiell zwei Ansätze, generische Typen zu unterstützen. Der eine ist es, dass GenerischerTyp<T> für alle Ts denselben Code verwendet und über dynamische Bindung von Methoden spezifische Eigenschaften von T nutzt. Ein anderer Weg, den u. a. C++ geht, ist die Anwendung von Templates. Dabei wird der Typparameter zur Kompilierzeit direkt durch den konkreten Typ ersetzt. Gibt es mehrere unterschiedliche Typparameter für einen generischen Typ, so werden bei C++ auch mehrere Klassen erzeugt.

Bei .NET geht Microsoft einen Mittelweg, um die Vorteile beider Methoden zu kombinieren: Für alle Referenztypen als Typparameter benutzt die generische Klasse den gleichen nativen Code, da die interne Repräsentation (eine simple Referenz) von allen Referenztypen gleich ist. Bei der Benutzung von Werttypen als Typparameter wird für jeden Werttyp zur Laufzeit bei der erstmaligen Benutzung ein eigener Native-Code-Pfad erstellt.

Generische Typen in verschiedenen Programmiersprachen

  • C++ implementiert generische Typen mittels Templates, z. B. Klassenvorlagen.
  • Generische Programmierung in Java
  • C# und andere .NET-Sprachen bieten Generics seit .NET 2.0
  • In der Programmiersprache Ada werden generische Typen zur Parametrisierung von Paketen eingesetzt.
  • Delphi bietet seit Delphi 2009 Unterstützung für generische Typen, Free Pascal unterstützt generische Klassen ab Version 2.2.
  • Die Programmiersprache Haxe bietet generische Typen für Flash, JavaScript und Server-seitige Ausführung (alle sind drei Bereiche, in denen sonst keine Generik möglich ist)
  • Haskell bietet ein sehr mächtiges Typsystem
  • Weitere Sprachen mit generischen Typen sind Ada, Eiffel, F#, Nim, Python, Go, Rust, Swift und TypeScript

Literatur

  • R. 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.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.