Post by Andreas KarrerPost by Vinzent 'Gadget' HoeflerPost by Vinzent 'Gadget' HoeflerEs ist sogar unzureichend. Java ist keine Sprache, anhand derer man
auch nur die grundlegenden Konzepte der Softwaretechnik praktisch
demonstrieren koennte.
Java ist eine Programmiersprache, in der man modular, objektorientiert
und prozedural programmieren kann.
Ersterem steht das mangelhafte Packagekonzept entgegen, Modularisierung
existiert praktisch ausschliesslich auf der Ebene einzelner Klassen,
die theoretisch vorhandene Modulhierarchie wird hinsichtlich
Sichtbarkeitsregeln in keiner Weise ausgenutzt.
Letzterem wiederum steht das Klassenkonzept entgegen (laut Werbung des
Herstellers ist Java ausserdem eine moderne, rein objektorientierte
Sprache. Dabei vergass man allerdings, dass das Klassenkonzept in
Simula-67 entstanden sein duerfte und "richtige Objektorientierung"(tm)
von Smalltalk schon 1980 definiert wurde).
Elementare Datentypen sind je nach Gusto mal genau das und das andere
Mal ploetzlich Objekte. Vergleiche char/String und Feldtypen. Das
neuerdings verfuegbare Autoboxing verwischt diesen Unterschied zwar
etwas, bringt dafuer aber andere, interessante Probleme (vgl "(Integer)
null").
Post by Andreas KarrerWie C++, Perl, Python, C#,
vermutlich auch VB und Delphi. Natürlich gibt es bestimmte Aufgaben,
die man mit Vorteil nicht in Java implementiert, demonstrieren kann
man sie aber allemal.
Ich redete von _grundlegenden_ Konzepten. Das hat mit der Implementation
einer spezifischen Problemloesung erst einmal noch gar nichts zu tun.
Typisierung ist in Java ausserhalb der Klassenhierarchie vollkommen
unmoeglich, da nicht vorgesehen (was z.B. dazu fuehrt, dass eine
Funktion die Signatur (int, int, int, int, int[]) bekommt).
Dazu kommt fehlendes Operatoroverloading, was es ebenfalls unmoeglich
macht, weitere elementare Datentypen wie z.B. Festkommazahlen in
schmerzarmer Weise zu implementieren.
Auch die seit Java1.5 eingefuehrten sogenannten Generics sind nur sehr
begrenzt brauchbar und haben mit generischer Programmierung eigentlich
ueberhaupt nichts zu tun.
Post by Andreas KarrerPost by Vinzent 'Gadget' HoeflerIch missioniere nicht. Ich stelle fest.
Aja. Welches sind *die* (nicht etwa *ein paar wenige exotische*)
grundlegenden Konzepte der Softwaretechnik, die man nicht in Java
demonstrieren kann?
- ADTs auf prozeduraler Ebene.
- Anwendungsangepasste Datentypen, sprich: _Abstraktion_.
Java spezifiziert faktisch nur direkt auf der VM vorhandene Typen,
die mit einem/r konkreten Problem(loesung) eher selten etwas zu tun
haben.
- Trennung von Spezifikation und Implementierung ausserhalb
zusaetzlicher Werkzeuge a la javadoc.
Aber das Verstaendnis, dass beispielsweise ein Stringtyp "Dateinname"
und ein Stringtyp "User_Message" nichts miteinander zu tun haben, ist
selbst bei sogenannten professionellen Entwicklern nur selten
vorhanden.
Fup gesetzt.
Vinzent.
--
worst case: The wrong assumption there actually is one.