Generizität in Java und C# 4.0

Werbung
Generizität in Java und C# 4.0
von Georg Brandstätter
Generizität ist eine Unterart des universellen Polymorphismus, die Codewiederverwendung bei
Typen ermöglicht, die nicht in einer Untertypbeziehung zu einander stehen. Vor allem
Containerklassen wie Listen werden häufig als generische Klassen realisiert, da so einerseits Listen
von beliebigen Typen erstellt werden können, andererseits aber statisch sichergestellt werden kann,
dass sich in einer Liste nur jeweils Elemente eines definierten Typs befinden.
Sowohl Java als auch C# bieten Sprachfeatures an, die das Schreiben von generischen Klassen und
Methoden ermöglichen. Allerdings verwenden die beiden Sprachen unterschiedliche Methoden, um
diesen generischen Code in Zwischencode zu übersetzen: Java verwendet aus
Kompatibilitätsgründen die Methode der der Type Erasure, bei der generischer Code in nichtgenerischen Code übersetzt wird. Zur Laufzeit steht keine Information über die Typparameter des
generischen Codes zur Verfügung, da diese Typparameter bei der Übersetzung entfernt werden.
C# hingegen speichert im Zwischencode die jeweiligen Typparameter, sodass diese auch zur Laufzeit
verfügbar sind.
Im Rahmen dieses Projektpraktikums wurde nun untersucht, wie sich diese beiden unterschiedlichen
Übersetzungsarten einerseits auf die Performance, andererseits auf die zur Verfügung stehenden
Möglichkeiten beim Programmieren in der jeweiligen Sprache auswirken.
Im ersten Teil des Praktikums wurden zwei Containerklassen geschrieben, anhand derer vor allem die
Performance der beiden Sprachen im Bezug auf Generizität verglichen wurde. Allerdings wurden
auch hier bereits erste Aspekte der Co- und Contravarianz, sowie andere Unterschiede zwischen den
beiden Sprachen betrachtet.
Im zweiten Teil wurde ein eigenes Programm geschrieben, um die Unterschiede hinsichtlich Co- und
Contravarianz genauer zu untersuchen. Hierbei wurden sowohl Java als auch die beiden Arten, Cound Contravarianz in C# zu verwenden (use- und definitionsseitig) mit einander verglichen. Der
Schwerpunkt lag hier auf dem Vergleich der Einfachheit der Verwendung dieser Konzepte.
Im dritten Teil wurde insbesondere untersucht, welche zusätzlichen Möglichkeiten in der
Programmierung C# (durch seine Übersetzungsmethode) gegenüber Java anbietet. Hierzu wurden
wiederum eigene Programme geschrieben, die diese Möglichkeiten aufzeigen und zeigen, ob und wie
sie sich auf die Einfachheit der Programmierung in C# auswirken bzw. welche zusätzlichen
Schwierigkeiten dadurch auftreten können.
Zuletzt soll noch ein Blick darauf geworfen werden, welche Möglichkeiten generischer
Programmierung derzeit noch von keiner der beiden Sprachen angeboten werden bzw. wie es sich
auf die Programmierung in diesen Sprachen auswirken würde, wenn es diese Möglichkeiten gäbe.
Herunterladen