Warum eine Programmiersprache in aller Munde ist

Java - und sonst nichts? Vorteile und Schwächen

15.11.1996

Derzeit findet ein Paradigmenwechsel im Hinblick auf den Einsatz des Arbeitsplatz-Computers statt. Der Desktop wird abgelöst durch ein Netz aus Computern. Zukünftig bestimmt das Netz und nicht mehr der einzelne Rechner das Anwendungsspektrum. Als der amerikanische Hard- und Softwarehersteller Sun Microsystems Inc. Mitte der 90er Jahre die objektorientierte Programmiersprache Java dem Fachpublikum präsentierte, konnte kaum jemand mit dem bis heute anhaltenden Hype rechnen, der dadurch ausgelöst werden sollte. Indes scheint Java eine adäquate Antwort auf das Problem darzustellen, in einem potentiell heterogenen verteilten Umfeld Softwaredistribution, -entwicklung und -anwendung optimal durchzuführen.

Java entstand aus Erfahrungen, basierend auf anderen objektorientierten Sprachen wie C++, Smalltalk oder Objective-C. Zu den wichtigsten Unterschieden etwa zu C++ gehört, daß weder Mehrfachvererbung, Pointer oder das Überladen von Operatoren erlaubt sind, noch Java Präprozessorbefehle besitzt. Hingegen liefert sie von vornherein Typinformationen zur Laufzeit, unterstützt Multi-Threading ebenso wie Garbage Collection. Letzteres führt dazu, daß nicht immer klar ist, wann und ob überhaupt Destruktoren von Objekten aufgerufen werden, so daß beim Programmieren immer der ungünstigste Fall angenommen werden sollte. Diese Eigenart müssen Programmierer beachten, sonst treten böse Fehler auf.

Darüber hinaus erlaubt die Sprache bereits zur Compile-Zeit eine strikte Typprüfung, während zur Laufzeit auf korrekte Array- oder Referenzzugriffe geachtet wird. Anders als in C++ werden primitive Datentypen auf eine bestimmte Größe festgelegt, nicht etwa implementationsabhängig spezifiziert.

Die Sprache soll vor allem einfach sein und zugleich eine maximale Portabilität gewährleisten. Dazu gehört, Programmierfehler beim Kompilieren entdecken zu können und damit die Datensicherheit zu erhöhen, so daß ein schnelles und fehlerarmes Prototyping möglich wird. Ob dadurch die Entwicklung von Java-Programmen, wie Sun behauptet, tatsächlich fünfmal schneller vonstatten geht als mit einer konventionellen Programmiersprache, muß sich noch erweisen. Allerdings scheinen praktische Erfahrungen zu bestätigen, daß sich diese Entwicklung beschleunigt.

Einer der wesentlichen Vorteile von Java ist seine Portierbarkeit. Dazu wird Java-Sourcecode in ein architekturneutrales Objekt-File-Format (Bytecode) übersetzt. Das impliziert ein altbekanntes Konzept, nämlich das der Virtual Maschine (VM), die zum Beispiel auch in Smalltalk zu finden ist. VM stellt eine zusätzliche Schicht zwischen einem Host-Betriebssystem und den kompilierten Java-Programmen dar. Sie ist in der Lage, den erzeugten Bytecode zu interpretieren. Damit reduziert sich das Portierungsproblem auf die Portierung der VM. In der Praxis zeigt sich jedoch, daß die Implementationen einzelner VMs immer noch Unterschiede aufweisen, sowohl was die Ausführungen verschiedener Hersteller als auch was die unterschiedlichen Releases eines Herstellers betrifft.

Zu Java gehören inhärente Sicherheitsmechanismen. An dieser Stelle muß zwischen Applets und Applikationen unterschieden werden. Applets lassen sich in HTML-Seiten des World Wide Web integrieren. Sie werden automatisch durch einen Java-fähigen Web-Browser geladen und sofort im Speicher gestartet, sobald der Bytecode auf Manipulationen hin überprüft und der Ursprung verifiziert ist. Die Ausführung erfolgt in einem eigenen Speicherbereich. Dabei verhindert die VM sowohl Zugriffe auf andere Speicherbereiche als auch auf Devices wie lokale Speichermedien. Wird diese Funktionalität gewünscht, muß der Server, der das Applet bereitstellt, dafür sorgen. Auf diese Weise sind Sicherheitsverletzungen sprach- und architekturinhärent ausgeschlossen - zumindest theoretisch denn die Fehler können bereits bei VM-Portierung gemacht werden, wie die Sicherheitslücken beweisen, die bei den ersten Versionen des Netscape- oder Microsoft-Browsers gegeben waren.

Java-Applikationen werden nicht wie Applets automatisch über ein Netzwerk kopiert und ausgeführt. Sie besitzen alle Rechte, die auch jedes Programm einer anderen Programmiersprache besitzt - mit den üblichen Sicherheitsproblemen.

Aufgrund der beschriebenen Eigenschaften ist Java die ideale Sprache, um Server-Funktionalität auf einer Client-Seite abzubilden. Bisher sahen konventionelle Methoden dafür eine Kombination aus Datenbank- und Formularfeldern in HTML vor. Alle Interaktionen mußten durch ständiges Neuladen von Web-Seiten nachgebildet werden. Direkte Interaktionen, beispielsweise Reaktionen auf Maus- oder Tasten-Events, waren ausgeschlossen.

Mit Java kann eine komplexe Oberfläche auf der Client-Seite erzeugt werden, die die Eigenschaften eines Servers in der für den Benutzer bekannten Art und Weise abbildet, jedoch ohne Installations-, Administrations- oder Portierungsaufwand. Beispiele dieser Art findet der Interessent etwa bei Jars http://www.jars.com , bei Gamelan http://www.gamelan.com oder im Java-Repository der Universität Frankfurt/Main http://java.wiwi.uni-frankfurt.de . Darunter sind verteilte Spielanwendungen wie Schach (ChessLive: http://oasi.shiny.it/chess) - (siehe Abbildungen), interaktive Chartanalysen ("Java Trader", http://www.hornblower.de) und "Java Workshop" von Javasoft http://www.javasoft.com .

Der Java-Einsatz weitet sich aus. Galt sie zunächst als Sprache für einfache Multimedia-Anwendungen, entwickelt sie sich zwischenzeitlich zur universellen Sprache für die Unternehmens-DV. Zwar führt das Interpreter- Konzept dazu, daß die Programme einen geringeren Umfang haben, aber zugleich Performance-Probleme zu erwarten sind. Wie Messungen ergaben, sind Java-Programme im Vergleich zu compilierten Anwendungen durchschnittlich um den Faktor 20 langsamer. Das bedeutet für die Entwickler: Die abgebildete Funktionalität darf nur von einfacher Natur sein. Komplexe, rechenzeitaufwendige Operationen sollten - zumindet vorest nicht - in Java geschrieben werden. Hoffnung auf Besserung ist nur dann gegeben, wenn schnelle Just-in-time-Compiler (JIT) eingesetzt werden, die den Bytecode zur Laufzeit in schnellen Maschinencode übersetzen, oder zusätzliche Hardware-Unterstützung bereitgestellt wird.

Ein anderes Problem ist ebenfalls konzeptinhärent. Jeder Betriebssystem-Hersteller arbeitet an einer eigenen unverwechselbaren und Feature-reichen grafischen Oberfläche. Wegen der Plattformunabhängigkeit kommt Java mit einer eigenen GUI-Klasse, die immer nur eine Schnittmenge der Möglichkeiten des Host-Systems umfaßt.

Zukünftige Implementationen der Java-Laufzeitumgebung werden Features besitzen, die auch komplexe und hochgradig verteilte Anwendungen im Inter- und Intranet ermöglichen. So liefert Sun mit dem nächsten Release des "Java Development Kit" (Version 1.1) eine umfangreiche Anzahl von Schnittstellen zu Standardbibliotheken aus verschiedenen Anwendungsbereichen mit. Zukünftige Implementationen der Java-Laufzeitumgebung werden zudem etwa Zugriffe auf Datenbanksysteme über ein SQL-Interface ermöglichen (JDBC = Java Database Connectivity).

Produktstrategien rund um Java

Entfernte Methodenaufrufe und Objektserialisierung erlauben das Schreiben von komplexen Anwendungen in verteilten Systemen. Kryptographie- und Authentifizierungsbibliotheken sollen Anwendungen sicher machen. Außerdem sollen die Java Commerce APIs Finanzmanagement mit Kreditkarten oder E-Cash im Internet ermöglichen. Für und mit "Java Beans" wird eine eigene komponentenorientierte Architektur in Java integriert und eine Schnittstelle zu anderen Objektmodellen wie OLE/COM/ActiveX von Microsoft, IBMs "Opendoc" oder Netscapes "Live Connect" zur Verfügung gestellt. Weitere Bestandteile, wie Bibliotheken für die Entwicklung von Java-basierten Inter- und Intranet-Servern oder eine Schnittstelle für die Darstellung und Bearbeitung dreidimensionaler Grafiken sollen mit der Zeit in den Lieferumfang einer Java-Implementation aufgenommen werden.

Mit Java als Programmiersprache und Plattform für verteilte Anwendungen in Inter- und Intranet könnte eine neue Softwaregeneration ins Haus stehen. Allerdings muß Java seine Position in der Zukunft gegen die Konkurrenz von Python, Telescript oder etwa Tcl/TK behaupten - Sprachen denen ähnliche Konzepte zugrunde liegen. Bleibt abzuwarten, welche Rolle Microsoft einnimmt. Obwohl Microsoft die Java-Technologie lizenziert und eine Integration in die Windows-Betriebssystemfamilie angekündigt hat, bleibt fraglich, ob eine Koexistenz von Java und der Microsoft-eigenen Active-X-Technologie in die Internet-Strategie der Gates-Company paßt.

Laufzeitumgebungen

Alle gängigen bisher verfügbaren Java-Laufzeitumgebungen setzen auf ein bereits vorhandenes Host-Betriebssystem auf wie Microsoft Windows oder Sun Solaris. Die Implementation der virtuellen Maschine kann dabei Teil einer Applikation (beispielsweise eines Web-Browsers) oder im Betriebssystem integriert sein. Das "Java Development Kit" (JDK) stellt eine eigenständige Java-Entwicklungs- und Laufzeitumgebung und steht für diverse Plattformen zur Verfügung.

Zukünftige Network-PCs, aber auch Standard-Architekturen wie Sun SPARC oder Intel x86 können mit dem "Java OS" ausgerüstet werden. Java OS ist ein effizientes, schlankes Betriebssystem, welches die Grundlage für die Ausführung von Java-Programmen ohne unterstützendes Host-Betriebssystem bietet. Es verfügt über grundlegende Fähigkeiten, um Funktionen der allgemeinen Java-API auf der Hardware eines Network-PCs auszuführen. Java OS besitzt weder ein Dateisystem noch ein Virtual Memory oder separate Adreßräume es unterstützt keine andere Programmiersprache und keine eigenen System Calls.

In beiden Versionen der Java-Laufzeitumgebung bildet die Java-API eine Schnittstelle für sämtliche Java-Applets und Applikationen. Oberhalb dieser Schnittstelle sind alle Java-Programme plattformunabhängig.

* Stefan Markwitz ist Diplominformatiker und Assistent am Institut für Wirtschaftsinformatik der Universität Frankfurt/Main sowie Vorsitzender der Java User Group Frankfurt (JUGF) e.V. Thomas Golob studiert Diplominformatik und ist Leiter des Java Competence Net der JUGF sowie einer der Entwickler des "Java Repositories" (JR) an der Universität Frankfurt.