OOP: soll man jetzt alles in ne Klasse packen oder watt?
-
byto schrieb:
Die Tabelle ist hinsichtlich Java nicht mehr aktuell (siehe Generische Prog. und Metaklassen).
1. Java ist momentan kein bischen generischer als es auch schon vor Java 5 war. Die momentane Generizität basiert darauf, dass alle Objekte von Object abgeleitet sind. Die Generics bringen diesbezüglich nur statische Typsicherheit ins Spiel, aber kein Gewinn an Generizität. Insofern ist der Name dieses Sprachmittels irgendwie irreführend.
2. Was sollen Metaklassen sein? Bei Java 5 gibt es jetzt Metadaten in Form von Annotations. Aber ist das damit gemeint?
-
In der Programmiersprache Java gibt es eine Klasse Class, die zwar wichtige Eigenschaften einer Metaklasse hat, sie kann beispielsweise Objekte anderer Klassen erzeugen, jedoch können hiervon keine spezielleren Metaklassen abgeleitet werden.
Hört sich wie Reflexion an.
-
Gregor schrieb:
1. Java ist momentan kein bischen generischer als es auch schon vor Java 5 war. Die momentane Generizität basiert darauf, dass alle Objekte von Object abgeleitet sind. Die Generics bringen diesbezüglich nur statische Typsicherheit ins Spiel, aber kein Gewinn an Generizität. Insofern ist der Name dieses Sprachmittels irgendwie irreführend.
Was genau ist Dein Kritikpunkt an den Java Generics? Ich verstehe nicht so genau, worauf Du hinaus willst. Spielst Du darauf an, dass die Information über die Generizität zur Laufzeit nicht mehr vorhanden ist und daher keine echte Typsicherheit gewährleistet?
2. Was sollen Metaklassen sein? Bei Java 5 gibt es jetzt Metadaten in Form von Annotations. Aber ist das damit gemeint?
Ich habe dabei tatsächlich an Metadaten gedacht, also Annotations in Java 5. Aber dank Wiki weiss ich nun, was mit Metaklassen gemeint ist, sehe nur nicht so wirklich, warum dass ein Kriterium für tolle Objektorientiertheit sein soll. Was habe ich davon, wenn ich eigene Metaklassen ableiten kann? Der Code wird (für Außenstehende) unverständlich und schwer zu warten. Naja, vielleicht bin ich da einfach subjektiv voreingenommen.
-
byto schrieb:
Gregor schrieb:
1. Java ist momentan kein bischen generischer als es auch schon vor Java 5 war. Die momentane Generizität basiert darauf, dass alle Objekte von Object abgeleitet sind. Die Generics bringen diesbezüglich nur statische Typsicherheit ins Spiel, aber kein Gewinn an Generizität. Insofern ist der Name dieses Sprachmittels irgendwie irreführend.
Was genau ist Dein Kritikpunkt an den Java Generics? Ich verstehe nicht so genau, worauf Du hinaus willst. Spielst Du darauf an, dass die Information über die Generizität zur Laufzeit nicht mehr vorhanden ist und daher keine echte Typsicherheit gewährleistet?
Das es nichts mit den Templates von C++, also generischer programmierung, zu tun hat?
-
asdfghjklm schrieb:
byto schrieb:
Gregor schrieb:
1. Java ist momentan kein bischen generischer als es auch schon vor Java 5 war. Die momentane Generizität basiert darauf, dass alle Objekte von Object abgeleitet sind. Die Generics bringen diesbezüglich nur statische Typsicherheit ins Spiel, aber kein Gewinn an Generizität. Insofern ist der Name dieses Sprachmittels irgendwie irreführend.
Was genau ist Dein Kritikpunkt an den Java Generics? Ich verstehe nicht so genau, worauf Du hinaus willst. Spielst Du darauf an, dass die Information über die Generizität zur Laufzeit nicht mehr vorhanden ist und daher keine echte Typsicherheit gewährleistet?
Das es nichts mit den Templates von C++, also generischer programmierung, zu tun hat?
Und wo steht geschrieben, dass Generics == (C++) Templates? Wiki sagt über Generics folgendes:
Bei Programmiersprachen gibt es prinzipiell zwei Ansätze, generische Typen zu unterstützen. Der eine ist es, dass GenerischerTyp<T> für alle Ts den selben 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 Compilierzeit direkt mit dem konkreten Typ ersetzt.
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 Native 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.
-
byto schrieb:
asdfghjklm schrieb:
byto schrieb:
Gregor schrieb:
1. Java ist momentan kein bischen generischer als es auch schon vor Java 5 war. Die momentane Generizität basiert darauf, dass alle Objekte von Object abgeleitet sind. Die Generics bringen diesbezüglich nur statische Typsicherheit ins Spiel, aber kein Gewinn an Generizität. Insofern ist der Name dieses Sprachmittels irgendwie irreführend.
Was genau ist Dein Kritikpunkt an den Java Generics? Ich verstehe nicht so genau, worauf Du hinaus willst. Spielst Du darauf an, dass die Information über die Generizität zur Laufzeit nicht mehr vorhanden ist und daher keine echte Typsicherheit gewährleistet?
Das es nichts mit den Templates von C++, also generischer programmierung, zu tun hat?
Und wo steht geschrieben, dass Generics == (C++) Templates? Wiki sagt über Generics folgendes:
Bei Programmiersprachen gibt es prinzipiell zwei Ansätze, generische Typen zu unterstützen. Der eine ist es, dass GenerischerTyp<T> für alle Ts den selben 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 Compilierzeit direkt mit dem konkreten Typ ersetzt.
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 Native 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.
Hi.
Was da in der Wikipedia steht, ist einfach falsch. Generics bringen einem in Java keine Generizität. Was jetzt mit den Generics an Generizität möglich ist, war auch vorher schon möglich. Oder erklär mir mal, wie Du jetzt mit den Generics, im Vergleich zur Pre-Generics-Zeit, einen generischeren Algorithmus (oder eine generischere Datenstruktur) schreiben willst.
-
Statische Typsicherheit durch Generics bietet dir aber auch den Vorteil, dass du wesentlich mehr Code wiederverwenden kannst. Wenn man ansonsten eine statisch typsichere Collection wollte, musste man sich die von Grund auf selbst schreiben, bzw. durfte bestehende Collections höchstens adaptieren. Mittlerweile kann man sich die Basisklasse durch den richtigen Typparemeter noch ein wenig "zurechtbiegen" und auf Vererbung zurückgreifen.
-
Man muss leider zu viel "zurechtbiegen" bei den Generics in Java. Aber man ist besser drann als ohne.
-
DEvent schrieb:
Man muss leider zu viel "zurechtbiegen" bei den Generics in Java. Aber man ist besser drann als ohne.
Begründe deine Aussagen wenigstens.
-
@DEvent: Na?