Java
Hier kann und soll keine Sprachbeschreibung der Sprache Java
gegeben werden, es sollen lediglich die grundlegenden Entwicklungsziele
und Spracheigenschaften genannt werden.
Von Flanagan (Flanagan, 1998)
wird die Entwicklerin von Java, die Fa. SUN mit folgender Beschreibung der
Sprache Java zitiert:
Java: Eine einfache, objektorientierte, verteilte,
interpretierte, robuste, sichere, architekturneutrale, portable,
hochleistungsfähige, multithreadfähige und dynamische Sprache.
Tanenbaum (Tanenbaum, 1998)
charakterisiert Java wie folgt:
Java borgt sich zwar viele Konzepte und einen Teil der
Syntax von C/C++, ist aber eine objektorientierte Sprache, die mit beiden
nicht kompatibel ist. Manche behaupten, dass Java im grossen wie
Smalltalk, im kleinen aber wie C oder
C++ ist.
Java wurde Ende 1995 von der Firma SUN Microsystems eingeführt.
1997 erschien Java 1.1 mit zahlreichen Verbesserungen und Erweiterungen
insbesonders im Bereich entfernter Datenzugriff, Druckmöglichkeiten,
Internationalisierung, Kryptographie und digitale Signaturen.
Java ist eine objektorientierte Sprache mit Klassen bestehend
aus einer Reihe von Daten und Methoden. Zusammengenommen
beschreiben Daten und Methoden den Zustand und das Verhalten eines Objekts.
Klassen werden dabei in einer Hierarchie angeordnet, so dass Unterklassen
das Verhalten von übergeordneten Klassen (Superklassen) erben können.
Eine Klassenhierarchie besitzt immer eine Stammklasse; diese hat ein sehr
allgemeines Verhalten.
Java ist eng an die Syntax der Sprache C++ angelehnt, besitzt aber nicht
deren Kompliziertheit (Flanagan, 1998).
Die wichtigsten realisierten Eigenschaften sind:
- interpretiert
Java ist eine interpretierte Sprache. Dadurch, das der Java-Compiler
Code für die sogenannte Java Virtual Machine (JVM) produziert, kann
Java-Code auf jeder Maschine unverändert ausgeführt werden, für
die es eine Portierung des Interpreters und der JVM gibt.
- Architekturneutral und portabel
('write once, run anywhere')
Weil Java-Programme in ein architekturneutrales Byte-Codeformat übersetzt
werden, kann einen Java-Anwendung auf jedem System ausgeführt
werden , solange die JVM auf diesem System implementiert ist. Das ist für
Anwendungen die über das Internet verteilt werden, von ganz
besonderer Wichtigkeit, da diese ja die Zielumgebungen in denen sie
ablaufen werden gar nicht kennen. Dies wird nicht nur durch die JVM und
die interpretierte Ausführung von Java-Programmen erreicht, sondern
auch dadurch, dass es keine implementierungsabhängigen Aspekte der
Sprachimplementation gibt. So kann zum Beispiel die
Speicherplatzbelegung des Datentyps int in der Sprache C je nach
Umgebung zwischen 16, 32 und 64 Bit liegen. Diese Verhalten ist Java
fremd, es legt die Grössen der primitiven Datentypen explizit fest.
- Dynamisch und verteilt
Java ist ein dynamische Sprache, die es zulässt, zu jeder Zeit
eine Klasse in einen laufenden Java-Interpreter zu laden. Diese
dynamisch geladenen Klassen können dann dynamisch instantiiert
werden. Informationen über eine Klasse können ebenfalls
dynamisch zur Laufzeit ermittelt werden. Java wird auch als verteilte
Sprache bezeichnet. Das bedeutet , dass sie Netzwerke auf einer sehr
hohen Ebene (Layer 7) unterstützt. So ist mit Hilfe bestimmter
Klassen das Lesen einer Datei auf einem Rechner irgenwo im Internet
genauso einfach wie das Lesen einer lokalen Datei. Ebenso einfach ist
es, die Methoden eines entfernten Objekts lokal zu benutzen.
Zusammengenommen erlauben diese Fähigkeiten einem Java-Interpreter,
Programmcode über das Internet zu laden und auszuführen.
- Einfach
Die Java-Entwickler haben versucht eine Sprache zu kreiieren, die ein
Programmierer leicht erlernen kann. Deshalb wurde die Anzahl der
Sprachkonstrukte kleingehalten und die Syntax stark an C/C++ angelehnt.
Gleichzeitig wurde auf einige C/C++ Merkmale verzichtet. Die meisten
dieser Merkmale wurden entweder wenig benutzt oder führten zu einem
unsauberen Programmierstil. So verzichtet Java auf 'goto', 'struct' und
'union' und auf die Verwendung von Zeigern und Zeigerarithmetik. Daraus
ergibt sich auch der Verzicht auf eine vom Programmierer zu
implementierende Speicherverwaltung.
- Robust
Man kann natürlich auch in Java fehlerhafte Programme schreiben,
jedoch schliesst Java aufgrund der starken Typisierung und wegen des
Fehlens von Zeigern und Zeigerarithmetik bestimmte Arten von
Programmierfehlern von vornherein aus . Durch einen eingebauten
Exceptionhandler wird das kontrollierte Abfangen von Programmfehlern
ausserdem erheblich erleichtert.
- Sicher
Wegen der verteilten Natur von Java ist dieser Aspekt besonders
wichtig. Die Sprache stellt verschiedene Sicherheitsstufen bereit, die
vor bösartigem Code schützen und es Benutzern ermöglicht
, unbekannte Programme wie z.B. Applets sicher auszuführen. Auf der
untersten Programmebene gehen Robustheit und Sicherheit Hand in Hand, da
der direkte Zugriff auf den Speicher wegen des Fehlens von Zeigern
vollständig unterbunden ist. Die zweite Schutzmassnahme ist die
Verifikation des angelieferten Bytecodes durch die JVM vor der Ausführung.
damit wird sichergestellt, dass der Code richtig geformt ist, keine
Stack-Probleme verursacht und keine illegalen Byte-Codes enthält.
Eine weitere Sicherungsmassnahme wird als "Sandkastenmodell"
beschrieben. Unbekannter Code wird im Sandkasten zur Ausführung
gebracht in dem er sicher "spielen" kann. Es gelten dabei eine
Reihe von Einschränkungen, wobei die offensichtlichste die ist,
dass das Programm keinen Zugriff auf das lokale Dateisystem bekommt.
Schliesslich kann der Java-Code noch mit einer digitalen Signatur
versehen werden, um ihn kryptografisch zu sichern und seine Herkunft
zweifelsfrei sicherzustellen.
- Hochleistungsfähig
Java ist eine interpretierte Sprache und kann deshalb nicht an die
Geschwindigkeit einer direkt zu Maschinencode kompilierenden Sprache wie
z.B. C heranreichen. Flanagan gibt hier z.B. einen Faktor von zehn für
Java 1.1 im Vergleich zu C an. Für GUI
oder netzwerkbasierte interaktive Anwendungen ist dieser Nachteil
vernachlässigbar. Zur weiteren Laufzeitbeschleunigung kritischerer
Vorgänge wie z.B. Stringoperationen wurden diese Teile der JVM
direkt in Maschinencode implementiert. Neuere Java-Interpreter bedienen
sich der Just-In-Time-Compilation Technik die Java Bytecodes zur
Laufzeit in den Maschinencode der ausführenden CPU übersetzen.
- Multithreadfähig
Java unterstützt mehrere Threads - auch leichgewichtige Prozesse
genannt - innerhalb eines Prozesses (Programms). Threads unterscheiden
sich von einem unabhängigen Prozess dadurch, dass sie auf
gemeinsamen Daten und Speicher arbeiten. Threads können auf diese
Art und Weise parallel kleinere Aufgaben in einem Programm übernehmen.
Ein wichtiges Problem in Multitaskingumgebnungen ist die Synchronisation
der Prozesse bzw. der Threads. Java vereinfacht dies durch den Verzicht
auf nichtsperrende, asynchrone Prozesse. Das heißt jede Ressource
die einen Thread benutzt, wird von ihm bis zum Ende der Benutzung
exklusiv gesperrt und das Ergebnis einer I/O Operation wird abgewartet -
erst dann wird die Ausführung fortgesetzt.
Ergänzungen zu Javascript:
Javascript ist eine Programmiersprache die entweder direkt in
HTML-Dateien oder in eine separate Textdatei geschrieben wird. Im
Gegensatz zu Java wird Javascript nicht sofort kompiliert, sondern die
Scripts werden erst nach dem Einlesen durch den Browser in Java in
JVM-Code übersetzt und ausgeführt. Die Fa. Netscape hat
Javascript als HTML Erweiterung entwickelt und unterstützt diese seit
Version 2, der InternetExplorer von Microsoft ist ab Version 3
Javascript-fähig (Kühn, 1999).
JavaScript selbst ist keine "abgespeckte" Version von Java,
sondern eine eigenständige, kompakte und objektorientierte
Scriptsprache, die zur Erstellung von Client- und Serveranwendungen im
Internet eingeführt wurde. Diese Scriptsprache verwendet zwar etliche
Syntaxbefehle wie Java, verfolgt jedoch andere Ziele. Bei JavaScript muß
der Autor nur geringe Programmierkenntnisse aufweisen, da diese Sprache möglichst
einfach gehalten wurde. Java ist eine objektorientierte
Programmiersprache. Sie kann für Anwendungen und für kleine
Applikationen - Applets - verwendet werden. JavaScript dagegen ist eine
Scriptsprache, die keine standalone Anwendungen, bzw. Applets ermöglicht.
In der gebräuchlichen Form wird JacaScript direkt ins HTML-Dokument
eingebunden (gesamter Source-Code). Dadurch lassen sich in einfacher Form
dynamische Dokumente verwirklichen.