jeanluc hat geschrieben:Xin hat geschrieben:
Nein, genau das sollte er eben nicht, denn Abstraktion bedeutet, dass man sich um Details keine Gedanken machen muss. Die Kritik muss eher härter
ausfallen: Korrektheit ist immer wichtiger als Effizienz.
An welcher Stelle ist der Code denn nicht korrekt ? Jetzt kann man drüber streiten wie intuitiv eine Sprache sein muss
hehehe, natürlich ist der Code korrekt, er arbeitet ja so, wie in der Dokumentation beschrieben.
Die Frage ist, ob er das widerspiegelt, was der Programmierer wollte. Und die Sprache sollte dem Entwickler - imho - möglichst keine Stolperfallen geben.
jeanluc hat geschrieben:, da bin ich bei dir, Java ist da kein Musterknabe. Nur Java ist da auch keine Ausnahme.
Das ist korrekt. Allerdings gibt es Sprachen, die innovativ sind und neue Ideen vorantreiben - sich bei der Anwendung aber zeigt, dass die Anwender Features sie anders verwenden, als das die Entwickler sich das gedacht haben. Und es gibt Sprachen, die auf der Erfahrung mit anderen Sprachen aufbauen. Es ist immer ein großer Schritt nach vorne, der Innovation auslöst und dann ein Schritt zurück, der sich auf Standardtechniken konzentriert. Und Java hat sich auf teilweise sehr unsinnige Techniken konzentriert.
Mein persönliches Highlight war, als ich erkannte, dass sich das Fehlerverwaltung der Zukunft propagierte Exception-Management direkt mit dem COME FROM-Statement von Intercal herleiten lässt. Intercal ist eine Programmiersprache, die ausschließlich das kann, was man nicht verwenden sollte. COMEFROM ist ein umgekehrtes Goto. Man sagt nicht, wo man hinspricht, sondern man gibt an, wo man herkommt - wo man den Programmablauf unterbricht. Dieses Label definiert man in Java mit "throw".
jeanluc hat geschrieben:Auf der anderen Seite, reden wir über die Sprache oder über die Bibliothek ? Es hindert ja niemanden daran, seine eigene Integer Klasse zu entwerfen und diese zu verwenden. Wer das nicht will, sollte die Klassendokumentation vor Benutzung lesen, und da springt einem das Verhalten von Integer.valueOf() sofort ins Auge.
Wer immer sich auf die Disziplin von Programmierern verlassen muss, wird fehlerhafte Programme erhalten.
Du weißt ja sicher: Debuggen ist das Entfernen von Fehlern und Programmieren ist das Hinzufügen von Fehlern. Nimm dem Programmierer die Möglichkeiten Fehler einzufügen und Du erhältst bessere Programme.
jeanluc hat geschrieben:Das was mich an Java eher nervt ist die Diktatur in dieser Sprache, man werkelt unter der Knute der OOP - und das für jeden kleinsten Kram.
Da werden dann für simpelste Aufgaben Entwurfsmuster herausgekramt und eine aufgeblähte Klassenhierarchie aufgebaut.
"I had a problem and they said 'Use Java'. Now I have a problem factory"...
jeanluc hat geschrieben:Ich kenne aber auch andere Standpunkte, besonders in größeren Projekten, da wird diese Diktatur sehr begrüßt.
Mit Software wie Jython (Python in Java) lässt sich diese Diktatur auch abmildern, wenn es denn gewollt ist.
Auch hier wäre wieder die Frage, was OOP ist. Ich bin ein großer Befürworter von klassenbasierten Programmieren, datentyporientiertes Programmieren (was man als OOP versteht) sollte vermieden werden, sofern nicht erforderlich - was in Java mit "final" ausgedrückt wird. Ich persönlich bevorzuge es, erst etwas zu bestellen, bevor ich die Rechnung bekomme: "virtual" in C++. In Kombination mit override aus C# wird da eine gesunde Mischung draus, was in der aktuellen C++11 Version ja auch übernommen wurde.
Versteh mich nicht falsch - Java ist keine schlechte Sprache. Es gibt schlimmeres oder wie Du sagtest, Java ist keine Ausnahme. Wenn ich aber 1995 eine Sprache vorstelle, dann sollte es eine Sprache übertreffen, die 1982 vorgestellt wurde und durchdachter sein. Während sich C++ verhältnismäßig neutral verhält - also in der Regel der Programmierer entscheidet, ob er jetzt Mist baut oder lieber nicht, führt Java den Entwickler regelrecht in die Fehler, die es vermeiden sollte bzw. angeblich vermeiden wollte. Ich höre sie noch tönen, dass es in Java keine Pointer gibt, es gibt jetzt Referenzen! Dass Referenzen aber Null-Pointer-Exceptions auslösen, dass Java keine Daten einbetten kann, dass es keine C++-Referenzen gibt, das eigentlich alles aus C++ fehlt, womit man in C++ auf Pointer verzichten kann und dafür "Referenzen" verwendet werden, die genau das Problem erhalten, den man laut Marketing nicht mehr hat... das ist doch keine Weiterentwicklung?!
Ebenso die Umsetzung der Exceptions. Gut gemeint, aber leider nur dazu geeignet noch mehr Fehler zu machen.
Darum ist Java besser als vieles andere, aber trotzdem eine komplette Fehlkonstruktion.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.