Während ich Haskell lerne, habe ich seine Typklasse bemerkt , die eine großartige Erfindung sein soll, die von Haskell stammt.
Auf der Wikipedia-Seite zur Typklasse :
Der Programmierer definiert eine Typklasse, indem er eine Reihe von Funktions- oder Konstantennamen zusammen mit ihren jeweiligen Typen angibt, die für jeden Typ vorhanden sein müssen, der zur Klasse gehört.
Das scheint mir ziemlich nah an Javas Schnittstelle zu sein (zitiert die Java-Seite von Wikipedia ):
Eine Schnittstelle in der Programmiersprache Java ist ein abstrakter Typ, mit dem eine Schnittstelle (im allgemeinen Sinne des Begriffs) angegeben wird, die Klassen implementieren müssen.
Diese beiden sehen sich ziemlich ähnlich: Typklassen beschränken das Verhalten eines Typs, während Schnittstellen das Verhalten einer Klasse einschränken.
Ich frage mich, was die Unterschiede und Ähnlichkeiten zwischen der Typklasse in Haskell und der Schnittstelle in Java sind oder ob sie sich grundlegend unterscheiden.
EDIT: Mir ist aufgefallen, dass sogar haskell.org zugibt, dass sie ähnlich sind . Wenn sie sich so ähnlich sind (oder?), Warum wird dann die Typklasse mit einem solchen Hype behandelt?
MEHR BEARBEITEN: Wow, so viele tolle Antworten! Ich denke, ich muss die Community entscheiden lassen, welches das beste ist. Beim Lesen der Antworten scheinen alle nur zu sagen, dass "es viele Dinge gibt, die Typklassen tun können, während die Benutzeroberfläche nicht mit Generika umgehen kann oder muss" . Ich kann nicht anders, als mich zu fragen, ob Schnittstellen etwas tun können, während Typklassen dies nicht können. Außerdem habe ich festgestellt, dass Wikipedia behauptet, dass die Typklasse ursprünglich in der Veröffentlichung von 1989 * "Wie man Ad-hoc-Polymorphismus weniger ad hoc macht" erfunden wurde, während Haskell noch in der Wiege steckt, während das Java-Projekt 1991 gestartet und 1995 erstmals veröffentlicht wurde Also. vielleicht statt typeclass ähnlich wie Schnittstellen zu sein, seine umgekehrt, dass Schnittstellen von typeclass beeinflusst wurde?Gibt es Dokumente / Papiere, die dies unterstützen oder widerlegen? Vielen Dank für alle Antworten, sie sind alle sehr aufschlussreich!
Danke für alle Eingaben!