Java ist eine von Sun Microsystems entwickelte, neue Programmiersprache, von der behauptet wird, daß sie das World Wide Web revolutionert. Sicher ist jedoch, daß Java stark im Vormarsch ist. Täglich gibt es neue Java-gesteuerte Web-Seiten und ständig kommen neue Entwicklungsumgebungen für Java hinzu, wie z. B. das Symantec Cafe oder Suns Java Workshop. Die Internet-Welt hat Java auf jeden Fall verändert.
Durch Einbringung von mehr Interaktivität in die Web-Seiten, bringt Java mehr Leben ins Netz. So können Sie Spiele (in Gruppen oder Einzel) über das Internet betreiben, brandaktuelle Börsenberichte lesen, Kalkulationen durchführen, usw. Java ermöglich es Ihnen, eine Software zu nutzen, ohne das große Programm-Paket kaufen zu müssen. Diese und weitere Gründe machen Java zu einer idealen Programmiersprache für Applikationen im Internet.
Java's Geschichte begann damit, daß man 1990 bei Sun Microsystems Software für Steuerungselektronik entwickeln wollte, die man ohne großen Hardware-Aufwand in verschiedenen Geräte implementieren kann, ob Toaster, Videorecorder oder Kaffeemaschine. Bestehende Programmiersprachen wie Fortran oder C konnte man dafür nicht einsetzen weil diese den Nachteil haben , daß sie für bestimmte Computerchips kompiliert werden müssen ( nicht architekturneutral ). Da sich Chips ständig neu entwickeln, hat das zur Folge, daß ebenso die Software neu kompiliert werden muß. Eine weitere Anforderung an Steuerelektronik-Software ist die Zuverlässigkeit, die viel höher als Computer-Software sein muß.
So wurde bei Sun das Green-Projektteam unter Führung von James Gosling (auch der "Vater" des Unix-Editors und des NeWS-Window- Systems) gegründet, um eine Programmiersprache zu entwickeln, die sowohl auf traditionelle Sprachen wie C und C++ aufbaut als auch für die Steuerelektronik geeignet ist. Das Ergebnis ist die relativ schnelle, zuverlässige und architekturneutrale Programmiersprache Java.
Zu Beginn hatte James Gosling die Programmiersprache Java "Oak" getauft, was so viel wie Eiche bedeutet. Zu dieser Idee verleitete ihn nichts anderes als eine große Eiche vor seinem Büro. Im August 1992 präsentierte das Green-Team die erste Oak-Anwendung dem damaligen Chef von Sun Scott McNeally, der so begeistert war, daß er aus dem Projektteam Green ein eigenständiges Tochterunternehmen namens First Person machte. Doch die Gesprächsverhandlungen mit wichtigen Herstellern von Haushalts- und Konsumergeräten, unter anderen auch mit Time Warner, scheiterten.
Erst durch Bill Joy, den Mitbegründer von Sun, der das Potential einer sicheren und plattformunabhängigen Programmiersprache erkannte, wurde das Oak-Projekt noch gerettet. Ziel war nun eine Standardprogrammmiersprache für neue Internet-Anwendungen zu entwickeln. Zunächst mußte mußte man Oak umbennen, da das Entwicklungsteam feststellte, daß Oak bereits für eine andere Programmiersprache vergeben war. Nach langer Überlegung einigte man sich eines Tages im Stammcafe des Teams auf den Namen Java, der in der USA Synonym für das Grundnahrungsmittel der Programmierer steht, nämlich Kaffee.
Ein entscheidender Schritt bei der Entwicklung von Java war der vollständig in Java geschriebene und als erster Applets-unterstützende Web-Browser Hotjava, den man zunächst den Namen WebRunner gab, aber aus urheberrechtlichen Gründen umtaufen mußte. Zusammen mit dem seit Ende '95 erhältlichen Netscape Navigator 2.0, der ebenfalls Java unterstützt, fand die neue Programmiersprache großes Interesse in der Öffentlichkeit. Um die Begeisterung nicht zu schmälern, arbeitet das Entwicklungsteam daran, Java und Hotjava zu verbessern.
Der Definition aus dem White Paper von Sun zu Folge ist Java eine unkomplizierte, objekt-orientierte, verteilte (distributed), bereits kompilierte, robuste, architekturneutrale, leistungsfähige, erweiterungfähige, multithreaded und dynamische Programmiersprache. Wir wollen nun diese Schlagwörter genauer durchgehen, um zu sehen, was sich dahinter verbirgt.
Die Einfachheit von Java zeichnet sich damit aus, daß sie so kreiert
wurde, daß das Erlernen der Sprachen wesentlich leichter ist als
andere vergleichbare Programmiersprachen wie C oder C++. So wurden alle
verzichtbaren Merkmale der höheren Programmiersprache entfernt, wie
zum Beipiel das Überladen von Operatoren, Header-Dateien, Strukturen,
Verbunde (Union),Templates (Schablonen), Preprocessor und Zeiger-Arithmetik.
Die Entwickler haben die Sprache somit möglichst klein gehalten. Eine
weitere Eigenschaft, die zur Einfachheit von Java zählt, ist, daß
sie weitverbreitete Sprachen wie C und C++ sehr ähnlich ist. C- und
C++-Programmieren treffen hier auf viele bekannte Sprachmerkmale.
Java behandelt das Referenzieren und Dereferenzieren von Objekten automatisch
und besitzt außerdem noch den sogenannten Garbage Collector (Müllabfuhr),
so daß man sich nicht mehr um das Freigeben von nicht mehr benötigten
Objekten im Speicher kümmern muß. Das Erlernen von Java ist
vor allem für Leute mit C++-Kenntnissen problemlos.
Wegen ihrer Einfachheit wird der Programmiersprache Java auch nachgesagt,
daß sie eine sehr elegante Sprache ist.
Mit Ausnahme von den einfachen Typen wie zum Beispiel Ganzzahlen, und logischen Ausdrücken, sind Objekte Hauptbestandteil von Java. In einem objektorientierten System definieren Klassen eine Menge von Daten und Methoden, die auf die Daten zugreifen und diese manipulieren können, also somit das Verhalten eines Objektes dieser Klasse definieren. Klassen sind in einer Hierarchie eingeteilt, wobei eine abgeleitete Klasse (Subklasse) die Eigenschaften der Basisklasse (Superklasse) erben kann. In Java bildet die Klasse Objekt die Wurzel der Klassenhierarchie.
In einer objektorientierten Sprache geht es darum, die Umwelt genau
wie möglich abzubilden. So könnte man eine Klasse Baum definieren,
die von Objekt erbt, von Baum könnte man wiederum die Klassen
Laubbaum und Nadelbaum ableiten, die beide die Eigenschaften von Baum besitzen
aber noch zusätzliche Merkmale beinhalten.
Aus Gründen der Einfachheit unterstützt Java keine Mehrfachvererbung.
So können Sie zum Beipiel keine Klasse definieren die sowohl von der
Klasse Baum als auch von der Klasse Auto erbt. Hauptgrund für den
Verzicht auf Mehrfachvererbung ist, daß sie die Sprache unnötigt
verkomplizieren. Um jedoch viele Vorteile der Mehrfachverebung nicht zu
verlieren, unterstützt Java auch Schnittstellen, die abstrakte Klassen
bilden. Das gibt den Programmierer die Möglichkeit, Methoden für
Schnittstellen zu definieren, ohne wissen zu müssen, wie die Implementierungen
dieser Methoden später aussehen. Java erlaubt es, daß eine Klasse
mehrere Schnittstellen implementieren. Dadurch behält Java seine Einfachheit
und kann trotzdem die Vorteile der Mehrfachvererbung ausnutzen.
Java enthält Klassen zur Netzwerkprogrammierung, die Methoden zur
Kommunikation über TCP/IP bieten. Der Programmierer findet hier Unterstützung
von FTP und HTTP bis hin zum direkten Zugriff auf Sockets.
So können Sie zum Beispiel mit Hilfe der Klasse URL Dateien über
das Internet herunterladen oder mit Hilfe der Klasse Socket Client-Server-Anwendungen
selbst schreiben.
Um den Programmieren die Möglichkeit zu geben, Fehler die durch das falsche Benutzen von Typen entstehen, schneller zu entdecken, muß in Java der Typ der benutzten Objekte definiert werden. Gleichzeitig haben alle Objekte in Java einen dynamischen Typ, so daß es möglicht ist, Programme zu schreiben, die bei Objekten verschiedenen Typs anders ablaufen.
Im Gegensatz zu anderen Compilern generiert der Java-Compiler nicht bestimmte Maschinenbefehle für eine bestimmte Maschine, sondern Byte-Codes. Die Leistungfähigkeit von Byte-Codes zeichnet sich dadurch aus, daß sie Maschinencodes ähneln aber nicht auf eine bestimmte Maschine zugeschnitten sind. Java-Programme können auf unterschiedlichen Rechnern ablaufen, ohne erneut kompiliert werden zu müssen. Um ein Java-Programm zum Laufen zu bringen, benötigt man einen Java-Interpreter, der den bereits kompilierten Byte-Codes ausführt. Der Java-Interpreter und das System, auf dem der Interpreter läuft, stellen somit eine virtuelle Maschine dar und werden daher auch Java Virtual Machine genannt.
Ein bereits in Byte-Codes kompiliertes Java-Programm kann auf jeder Plattform laufen. Voraussetzung ist, daß man einen Java-Interpreter für die bestimmte Plattform hat. Bei anderen Programmiersprachen ist das nicht möglicht; hier müssen Sie den Quellcode erneut kompilieren; falls ihr Programm nicht portabel geschrieben ist, sind Sie dazu gezwungen den Quellcode zu ändern. Für den Zugang zu dem zugrundeliegenden Betriebssystem, liefert Java eine umfangreiche Bibliothek (in Java Package genannt), die benutzt werden kann , um Java-Anwendungen zu schreiben, die auf jeder Java-unterstützenden Plattform ablauffähig sind.
Das folgende Applet verdeutlich Ihnen nochmals den üblichen Vorgang von Quellcode zu Maschinencode und den Vorgang bei Java.
normalerweise:
bei Java:
Wie bereits erwähnt wurde Java ursprünglich für die Programmierung von Gerätesteuerungen entwickelt. Dabei legte man großen Wert auf Zuverlässigkeit. Natürlich kann man auch in Java unzuverlässigen Code schreiben. Java eliminiert eine große Anzahl von Programmierfehlern, d.h. Java unterstützt den Programmierer, zuverlässige und robuste Anwendungen zu schreiben. Es liegt jedoch beim Programmierer, ob er diese Unterstützung wahrnimmt, so daß die Entscheidung letztendlich beim Entwickler liegt.
Das Java-System überprüft legale als auch problematische Zugriff auf den Speicher, so daß Java-Programme keinen Computerabsturz verursachen können. Mit Java-Programmen können Sie nur auf genau definierte Speicherbereiche zugreifen. Ein C++-Programm hat dagegen zum gesamten Speicher Zugang und kann beabsichtigt oder unabsichtlich jeden Speicherwert ändern.
Ein weiteres Merkmal, das Java robuster macht, ist die Behandlung von Ausnahmen (Exception). So stürzt ein Java-Programm bei einem unerwartetes Ereignis nicht ab, sondern es arbeitet eine Ausnahmeroutine ab.
In Programmiersprachen wie zum Beispiel C++ ist der Programmierer selbst verantwortlich für den Speicherbereich. Er muß selber darauf achten, nicht mehr benötigten Speicher freizugeben. Das ist nicht nur sehr mühsam und zeitraubend, sondern verursacht bei größeren Software-Projekten zusätzlichen Aufwand. Aus diesen Gründen besitzt das Java-System einen Garbage-Collector, der den nicht mehr benutzten Bereich selbständig freigibt. Der Programmierer braucht sich daher nicht mehr, um die Verwaltung des Speichers zu kümmern.
Betriebssysteme wie Windows-NT oder Unix sind Mutitasking-fähig, d.h. es können mehrere Prozesse gleichzeitig ablaufen. Ein Web-Browser muß ebenfalls mehrere Dinge gleichzeitig ausführen, so können Sie den Scroll-Bar bewegen, während ein File im Hintergrund heruntergeladen wird. In Java ist es möglich im Programm mehrere Threads zu definieren, die parallel ablaufen. Sie können zum Beispiel in einen Thread programmieren, das eine Animation ständig durchführt und gleichzeitigt mit einem anderen Thread läuft, der die aktuelle Uhrzeit anzeigt.
Das Programmieren von parallel laufenden Threads ist im allgemeinen sehr problematisch. Da Threads gleichzeitigt ablaufen bzw. die Reihenfolge beim Ablauf nicht vorhersehbar ist, können sie Daten, auf die mehrere Threads zugreifen, in einen inkonsistenten Zustand bringen. Solche Probleme können in Java unter Verwendung des Schlüsselwortes synchronized gelöst werden. Threads von Java-Programmen werden auf echte Betriebssystem-Threads abgebildet. Voraussetzung ist, daß das zugrundeliegende System dies unterstützt.
Der wohl wichtigste Aspekt für Programme in einem Netz ist die
Sicherheit. Beim Lesen einer Java-gesteuerten Seite (Web-Seite mit eingebetteten
Java-Applets) werden die Java-Applets auf Ihren Rechner heruntergeladen
und automatisch ausgeführt. Da Java- Programme jedoch keine Zeiger-Arithmetik
haben und der kompilierte Byte-Code stark an Typen gebunden ist, werden
Java-Programme vor ihrer Ausführung durch den Web-Browser verifiziert,
d.h. es wird sichergestellt, daß das Java-Programm keine Viren enthält.
Die Möglichkeit, daß ihr Rechner trotzdem durch einem Virus
infiziert wird, ist damit äußerst gering.
Nun, was versteht man unter der Verifizierung: In Java erfolgt der Zugriff
auf Methoden und Variablen über den Namen, so daß überprüft
werden kann, auf welche Methoden und Variablen zugegriffen werden.
Dagegen erfolgt ein Funktionsaufruf bei den meisten PC-Programmen über
Adressen, die nichts anderes als Zahlen sind und von Programm selbst verändert
werden. Das ist eine große Sicherheitslücke. Hier stellt die
Verifizierung sicher, daß der Byte-Code nicht unbefugt manipulierbar
ist. Nachdem die Byte-Codes verifiziert sind, erfolgt die Ausführung
des Applets in einer beschränkten Umgebung, aus der sie nicht ausbrechen
können. Erst durch den Java-Interpreter werden die Funktionsnamen
in Adressen umgewandelt.
Mit der neuen Technologie setzt Java neue Maßstäbe im Internet. Es hat damit begonnen, daß es in Web-Seiten mehr Interaktivitäten brachte. Java eröffnet völlig neue Perspektiven im Internet und Intranet, so daß Softwareentwickler bestrebt sind, die Flexibilität von Java auszunutzen, um völlig neue Produkte auf dem Markt bringen.
Die Inhalte des Internets könnten durch Java deutlich erweitert werden. So ist es möglich, daß man größere Anwendungen, wie zum Beispiel ein leistungsfähiges Zeichenprogramm nur für die Zeit, in der man es benötigt über das Internet herunterlädt, um es in dieser Zeit zu nutzen. Man würde immer die neueste Version haben und müßte, abgesehen von den Telefongebühren sowie eventuelle Gebühren des Anbieters, nichts bezahlen.
Trotzdem darf man die Risiken, die durch die neue Java-Technologie entstehen, nicht außer Acht lassen. Anforderungen ,wie neue Mechanismen zur besseren Überwachung von Netz- und Dateizugriffen, müssen erfüllt werden, denn auch für Hacker gibt es hier neue Perspektiven.
Es bleibt zu hoffen, daß Java sich so weiterentwickeln wird wie bisher und das Internet dadurch mehr an Aktrativität gewinnt.
|
Kapitel IAllgemeines über Java |
|
Kapitel IIJava-Applets und ihre Funktionsweise |
|
|
|
|
|||
|
Kapitel IIIInteressante Links |
|
Kapitel IVEinfürung in Java anhand konkreter Bespiele |
|
Copyright © Quoc-Thanh Lam & Marco Lauer