'Verluste':
Anderungen bei den Typen:
Robustheit:
Klassen:
Sonstiges:
Bei der Portierung von C++-Programmen auf andere Umgebungen ist meist eine erhebliche Anpassungsarbeit notwendig. Je nachdem, wie stark die Programmstruktur auf eine bestimmte Architektur der Benutzeroberfläche zugeschnitten ist, ist es einfacher, ein komplett neues Programm zu schreiben.
Objektorientierte Programmierung mildert diesen Effekt (z.B. gegenüber C) jedoch erheblich. Wenn man die Schnittstellen der eigenen Klassen vernünftig entwirft, kann man oft auch durch Austausch weniger Klassen den Sprung von einem zu einem anderen Rechner schaffen.
Diesen Komfort erkauft man sich allerdings mit geringen Effizienzeinbußen, da doch einiger Verwaltungsaufwand zur Laufzeit notwendig ist.
Durch das Fehlen der Operator-Überladung werden JAVA-Programme schnell vergleichsweise unübersichtlich. Zwischen Klassenobjekten ist beispielsweise nicht eine einfache Zuweisung mit möglich -- dazu muß die Klassenmethode clone() aufgerufen werden. Für Ausgaben gibt es nicht den Operator <<, hierzu muß der Umweg über eine Funktion wie toString() gegangen werden.
Objekte kommen nie direkt in der Sprache vor, nur Referenzen auf sie. Man muß jedes Objekt explizit mit new konstruieren, z.B. Integer i=new Integer(3); Solche technischen Schreibweisen können manchmal den Überblick verschleiern.
In Zukunft werden allerdings wahrscheinlich auch 'echte' JAVA-Compiler eingesetzt werden, die systemabhängigen Code produzieren, der für jeden Rechner neu übersetzt werden muß. Die Systemunabhängigkeit der Sprache selbst würde dabei nicht verloren gehen.
JAVA-Applets, die ja meist über das Netz in den Rechner gelangen, können so natürlich nicht beschleunigt werden. Dafür wird es in den Browsern sogenannte 'just in time compiler' geben, die einzelne Byte-Code-Stücke nach dem Laden in echten Maschinencode übersetzen und dadurch die Applets erheblich beschleunigen können.
Sehr gewöhnungsbedürftig ist es auch, daß der JAVA-Compiler selbst in JAVA geschrieben ist. Er muß also jedesmal vom JAVA-Interpreter interpretiert werden. Der Compilationsvorgang kann sich teilweise extrem in die Länge ziehen. Beispielsweise kann allein die Zeit zwischen dem Start des Compilers und der ersten Fehlermeldung (selbst 'Quelltext nicht gefunden') sehr groß sein!
Einige 'alte' Methoden und Schnittstellen aus 1.0 werden in 1.1 zwar noch geduldet, aber 'mißbilligt' (deprecated). Der Compiler warnt jedesmal davor, sie weiterhin zu benutzen. Einige Dinge im Bezug auf Fensterverwaltung sind völlig verändert worden. Im Moment wird die Systemunabhängigkeit durch die Versionsabhängigkeit etwas relativiert.
Durch die weltweite Verknüpfung von Rechnern über das Internet müssen Programmentwickler damit rechnen, daß verschiede Benutzer aufverschiedenen Plattformen arbeiten.
Für Applikationen ist es deshalb wichtig, daß sie möglichst einfach auf verschiedene Benutzeroberflächen wie Windows 95, UNIX oderOS/2 angepaßt werden können, und das, ohne Programmänderungen vorzunehmen oder besser, ohne neu übersetzt zu werden.
JAVA löst dieses Problem auf folgende Weise:
Der Quellcode wird zu etwa 80% in ein binär codiertes Format kompiliert,das unabhängig von der Rechnerarchitektur und dem Betriebssystem ist.Dieses Format bezeichnet man als Bytecode, da es nahezu strukturlos als eine Folge von Bytes abgespeichert und übertragen wird. Auf der jeweiligen Zielplattform existiert ein Laufzeitsystem (z.B. ein JAVA-fähiger Internet-Browser), das die restlichen 20% des JAVA-codes interpretiert und Bibliotheken für Grafik, Fenstertechnik, Multimedia und einiges mehr bereitstellt. Sowohl die Sicherheit als auch die Fähigkeit auf verschiedenen Plattformen zu laufen,rühren von der Tatsache, daß diese 20% der Kompilierung lokal abgearbeitet werden. Ist jetzt das Laufzeitsystem verfügbar, so sind alle JAVA-Programme lauffähig, ganz gleich auf welcher Plattform sie ausgeführt werden sollen.
Unter C++ erzeugt ebenfalls der Compiler aus dem Quellcode Objektmodule, die bereits vom Prozessor ausführbare Anweisungen enthalten. Diese Module können jedoch alleine nicht zur Ausführung gebracht werden, sondern benötigen ein weiteres Programm, den Linker, der die verschiedenen Objektmodule zusammenfügt und aufeinander abstimmt. Jedoch beginnen schon bei den Objektmodulen die Probleme. Sie sind für einen bestimmten Prozessor generiert und deshalb nicht auf einen anderen übertragbar.Verwendet man jetzt noch rechnerspezifische Ressourcen wie Grafiken und Betriebssystem-Funktionen, wird es noch schwieriger, den Quellcode auf einanderes System zu übertragen. JAVA kennt diese Probleme nicht.
Die Entwickler von JAVA haben sich beim Aufbau der Sprache stark an C++ orientiert und wichtige Sprachelemente wie Operatoren und Steueranweisungen nahezu identisch übernommen, was es dem C++ Programmierer erleichtert, seine Programme auch in JAVA zu schreiben. Aber auch ein Anfänger kommt mit JAVA schnell zurecht, nicht zuletzt auch weil auf die Zeigerarithmetik von C++ in JAVA verzichtet wurde. Weggelassen wurden auch Headerdateien, Strukturen, Varianten,multidimensionale Arrays und Präprozessoren. Damit fallen auch #defines, Makros und typedefs weg. Um Quelltext zu verstehen, müssen so nicht mehr alle typedefs, #defines usw. in den Headerdateien nachgesehen werden. Weiterhin braucht man sich in JAVA nicht um die Freigabe, nicht mehr benötigten Speichers zu kümmern. Dieses erledigt hier die 'Garbage Collection'(automatische Speicherbereinigung).
Die gibt es in JAVA nicht! JAVA unterstützt nur eine einfache Vererbung.Das bedeutet, daß jede Klasse zu einem gegebenen Zeitpunkt nur von einer Klasse erben kann. Damit wird das Problem vermieden, daß an Klassen weitervererbt wird, deren Verhalten sich mit dem Verhalten anderer Klassen ausschließt oder deren Verhalten entgegenläuft. JAVA implementiert eine andere Art der Mehrfachvererbung durch den Einsatz von Interfaces. Ein Interface definiert keine Klasse, sondern nur die Funktionen, die eine Klasse als Schnittstelle zur Verfügung stellt. Eine Klassendefinition kann dabei durchaus mehrere Schnittstellen implementieren.
Arrays sind spezielle Datenobjekte in JAVA, die Zeigerarithmetik
überflüssig machen. Alle Daten- und Objekttypen können in Form von Arrays
dargestellt werden. Arrays sind damit Datenobjekte, die ein oder mehrere
Elemente eines spezifizierten Datentyps enthalten können. Wie andere Objekte
auch werden sie über den Operator new erzeugt. Die Deklaration eines Arrays
erkennt man an den eckigen Klammern:
char CharArray[] = new char[10]; //Array, das aus 10 Elementen des Typs char
besteht
char IntArray[] = new char[20]; //Array, das aus 20 Elementen des Typs int
besteht
Über einen Index kann man auf das gewünschte Element eines Arrays zugreifen.
Das 1. Element besitzt den Index 0, das letzte den Index n-1 (n ist die Zahl
der Elemente).
JAVA unterstützt keine
mehrdimensionalen Arrays. Arrays können jadoch geschachtelt werden, was auf das
gleiche hinausläuft.
int IntMatrix[][] = new int[3][5]; //Array, das aus 3 Elementen des Typs int[]
besteht
Die Länge eines Arrays kann über die Instanzvariable length ermittelt weredn:
int IntMatrix[][] = new int [8][9];
Systen.out.println(IntMatrix.length); //ergibt 8
Systen.out.println(IntMatrix[0].length); //ergibt 9
C++class GROB |
JAVApublic class GROB } |
Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen