Aufbau und Anwendungspotentiale von Java

Inhalt

5 Aufbau und Anwendungspotentiale von Java
5.1 Aufbau und Konzepte
5.1.1 Kurzeinf√ľhrung in JAVA
5.1.2 Gegen√ľberstellung Java - herk√∂mmliche Programmiersprachen 5.1.3 Was f√§llt weg? (im Vergleich zu C/C++)

5.1.4 Speicherverwaltung 5.1.5 Threads

5.1.6 Benennungskonventionen
5.1.7 Datentypen und Strukturen
5.1.8 Die Syntax, eine √úbersicht
5.1.9 Compiler
5.1.10 Virtuelle Maschine
5.1.11 Linker? 5.2 Java - Entwicklung und Java - Tools

5.2.1 Was ist Java?
5.2.2 Wie entstand Java?
5.2.3 Die ersten Java - Projekte 5.2.4 Das Java - Development - Kit (JDK) und dessen Nutzung
5.2.5 Die Java - Packages

5.2.6 Entwicklungsumgebungen f√ľr Java 5.3 Applets: Animation und Interaktion im WWW
5.3.1 Java und das WWW

5.3.2 Java - Applets in WWW - Seiten
5.3.3 Operationen beim Abruf einer WWW - Seite mit Applets
5.3.4 Gartner - Group Modell 5.3.5 Animation und Interaktion mit Java - Applets
5.3.6 Sicherheitsaspekte
Literaturverzeichnis

5 Aufbau und Anwendungspotentiale von Java
5.1 Aufbau und Konzepte
In diesem Kapitel soll ein √úberblick √ľber die Konzepte von Java gegeben werden. In der Knappheit, die diesem Dokument auferlegt wurde, k√∂nnen nat√ľrlich nicht alle Aspekte mit der n√∂tigen Tiefe er√∂rtert werden. Es wurde jedoch versucht alle Besonderheiten der Sprachkonzepte Javas zu w√ľrdigen.
5.1.1 Kurzeinf√ľhrung in JAVA
Was ist JAVA?
JAVA ist eine Programmiersprache.
Beim Design von Java wurde versucht die Goodies der bekannten Programmiersprachen zu √ľbernehmen und deren Nachteile die sich im Laufe deren Existenz gezeigt haben auszub√ľgeln. Java ist rein objektorientiert und hat keine strukturellen √úberbleibsel, wie das z.B. in C++ der Fall ist. Java sollte alles enthalten, was das Programmieren angenehm macht und dabei mit einer klar √ľberschaubaren und redundanzfreien Syntax auskommen.
Nach SUN (http://java.sun.com/java.sun.com/allabout.html):
Java is a simple, robust, object - oriented, platform - independent multi - threaded, dynamic general - purpose programming environment. It's best for creating applets and applications for the Internet, intranets and any other complex, distributed network.
Java entstand aus der deprimierenden Erfahrung Suns, dass die vorhandenen "neuen" Programmiersprachen mit neuen Programmierparadigmen keinesfalls eine revolution√§re Erleichterung in der Softwareentwicklung mit sich brachten. Java soll nun endlich die Vorz√ľge neuer Entwicklungsmethoden auf die Ebene der Programmiersprache bringen und dem Programmierer das "Leben" erleichtern.
Was kann JAVA?
Java kann nicht mehr und nicht weniger als andere Programmiersprachen auch. Durch die Konzeption eignet sich Java jedoch f√ľr eine F√ľlle von Anwendungen die Plattformunabh√§ngigkeit macht Java z.B. zur idealen Programmiersprache f√ľr verteilte Anwendungen, insbesondere im WWW. Dabei bleibt der Anspruch auf Portabilit√§t nicht im leeren Raum (man erinnert sich noch vage an die Aussage das C eine portable Programmiersprache ist), der praktische Einsatz verschiedener Java Applikationen und insbesondere der Applets zeigt, dass Java durch seine Konzepte wirklich auf den unterschiedlichsten Plattformen lauff√§hig ist.
Verschiedene große Betriebsystem Hersteller wollen Java als Bestandteil in ihre Betriebsysteme integrieren. Dazu gehören z.B. Micro$oft, IBM und Apple.
Was kann JAVA nicht?
Kaffee kochen.
5.1.2 Gegen√ľberstellung Java - herk√∂mmliche Programmiersprachen
Um JAVA gegen√ľber den bekannten Programmiersprachen abgrenzen zu k√∂nnen werden wir zun√§chst Unterschiede und Gemeinsamkeiten heraus arbeiten und dann auf die Unterschiede genauer eingehen.

Cobol
C
C++
Smalltalk
Java
Objektorientiert





Datentypen





Zeiger





Unions/Strukturen





Einfach





Standard Library





Portable





Garbage Collection





Threading





Fehlerbehandlung





Precompiler





Interpretiert





Linker





Dynamisch





Verifizierung





Robust





Sicher





Tabelle : Java und andere Programmiersprachen (left to the reader)
5.1.3 Was fällt weg? (im Vergleich zu C/C++)
Keine Strukturen, Aufzählungstypen, Unions
Die Aufz√§hlungstypen (z.B. enum), Strukturen und Unions k√∂nnen in Java, wie in jeder objektorientierten Programmiersprache, durch geeignete Klassen dargestellt werden. Deshalb sind explizite Typendefinitionen unn√∂tig. Dieser Schritt, typedefs, enums etc. aus C++ zu entfernen war wegen der gew√ľnschten "Kompatibilit√§t" zu C nicht m√∂glich. In Java wird durch diese Ma√ünahme die Syntax wesentlich schlanker und auch die Probleme der Namensraumvergabe wird durch die dann n√∂tigen zugeh√∂rigen Klassen vermieden. (In C haben z.B. alle enum Typen einen eigenen, gemeinsamen Namensraum)
Keine Funktionen
Alleinstehende Funktionen, die nicht Methoden einer Klasse sind, werden nicht unterst√ľtzt. Das vermeidet Mehrdeutigkeiten und Widerspr√ľche in der Klassenhierarchie. Java unterst√ľtzt Klassenmethoden und Klassenvariablen, wodurch alleinstehende Funktionen unn√∂tig werden.
Keine Header Files
In Java werden die Klassen komplett in einem File Codiert. Header Files wie in C gibt es nicht. Zu jeder Klasse wird ein eigenes Klassenname.class File erzeugt. Dadurch kann es z.B. nicht mehr vorkommen, dass durch √Ąnderungen in einer Zentralen Klasse in einem Header File das gesamte Projekt neu √úbersetzt werden muss. Der Einsatz von Java macht Hilfsmittel wie make und trickreiche Compilerfeatures, die versuchen dieses Problem zu minimieren unn√∂tig.
Kein √úberladen von Operatoren
Java unterst√ľtzt kein Operator Overloading. Diese M√∂glichkeit war bzw. ist schon immer umstritten. Sun hat der Regel der Einfachheit und Klarheit Vorrang gegeben. Die M√∂glichkeiten des Operator Overloadings kann durch Klassenmethoden einfach ersetzt werden.
Kein Precompiler (z.B. #DEFINE)
Precompiler, wie man sie von C oder C++ her kennt, werden von Java nicht eingesetzt. Der durchg√§ngig objektorientierte Ansatz soll einen Precompiler unn√∂tig machen. Globale Definitionen von Konstanten k√∂nnen als Klassenvariablen (static) realisiert werden. Dadurch bekommen die Konstanten auch einen eigenen Namensraum, was widerspr√ľchliche Bezeichnernamen ausschlie√üt. Diverse Tricks und auch Fehlerquellen werden so ausgeschlossen.
Keine vage definierte Datentypen
In Java sind die primitiven Datentypen, anders als in C vollst√§ndig definiert. So ist ein int immer 32 Bit breit und mit Vorzeichen behaftet. Es gibt anders als in C feste Definitionen f√ľr die Basis Datentypen. Die √ľbrigens die einzigen Typen sind die keine Klasse darstellen. Durch Vererbung k√∂nnen ihnen jedoch weitere Methoden zugeordnet werden.
Die direkte Implementierung von Basis Datentypen in die Programmiersprache verbessern das Laufzeitverhalten, gegen√ľber Typenlosen Programmiersprachen wie zum Beispiel Smalltalk, enorm.
Keine (expliziten) Pointer und keine Pointerarithmetik
Java hat zum Ziel, eine m√∂glichst sichere Laufzeitumgebung zur Verf√ľgung zu stellen. Aufgrund der M√∂glichkeit, komplexe Strukturen mit Hilfe von Klassenhierarchien darzustellen, ist Java nicht auf Pointerarithmetik angewiesen. In Java gibt es generell keine expliziten Pointer, womit ein weiterer Gro√üteil der Fehlerm√∂glichkeiten herk√∂mmlicher C und C++ Programme ausgeschlossen werden.
Keine vargs (freie Argumentenanzahl)
Java unterst√ľtzt keine Funktionen mit variabler Argumentenanzahl wie es z.B. in C bei der Funktion printf verwendet wird. Auch hier stellt der objektorientierte Ansatz geeignetere und weniger fehlertr√§chtige M√∂glichkeiten zur Verf√ľgung (wie es schon in C++ mit cout realisiert wird).
Keine Mehrfachvererbung
Die gewaltigen Probleme die durch den Einsatz von Mehrfachvererbungen auftreten können sind dadurch umgangen werden, dass es diese Möglichkeit nicht gibt. Durch den Einsatz von Interfaces die einen Satz von Schnittstellenmethoden definieren, die in der Klasse implementiert werden, wird eine weitgehend vergleichbare Funktionalität ohne die bekannten Probleme erreicht. Diese Interfaces wurden den protocols in Objective C nachempfunden.
Kein Semikolon oder doch Semikolon
Beim Design von Java wurde darauf geachtet, dass der Programmierer nicht mit irgendwelchen "; erwartet" Fehlermeldungen zu k√§mpfen hat. Wo es die Grammatik erlaubt ist der ";" optional oder kann beliebig oft gesetzt werden. Bei der Entwicklung der Sprache wurde auch darauf geachtet, das der Compiler die M√∂glichkeit hat Fehler genau zu lokalisieren. Die in C √ľbliche Fehlermeldung mit Verweis auf eine Zeile die auf die eigentlich fehlerhafte Zeile mit fehlendem Semikolon folgt sollte in Java nicht vorkommen.
5.1.4 Speicherverwaltung
Als erste Besonderheit, insbesondere f√ľr nicht Smalltalk Programmierer ist das Konzept der Speicherverwaltung in Java zu nennen. In Java gibt es keinen Heap auf dem dynamische Daten allociert werden, also auch kein malloc oder mfree. Vielmehr sorgt die Java Laufzeitumgebung selbst daf√ľr, das nicht mehr ben√∂tigte Objekte automatisch freigegeben werden. Dazu tr√§gt jedes Objekt einen Z√§hler mit sich, wie viele Verweise auf das Objekt noch existieren.
Die Arbeit selbst daf√ľr zu sorgen das Objekte rechtzeitig freigegeben werden, die z.B. in C++ bei komplexeren Programmen extreme Ausma√üe annimmt entf√§llt also v√∂llig. Man spricht von einem Garbage Collector. In Java l√§uft dieser Garbage Collector in einem eigenen Task mit niederer Priorit√§t, das Aufr√§umen wird also im Hintergrund erledigt.
Speicherleichen, also Objekte die nicht mehr ben√∂tigt werden, deren Speicher jedoch nicht freigegeben wurde geh√∂ren automatisch der Vergangenheit an. Es kann auch nicht mehr vorkommen das eine Referenz auf ein nicht mehr allociertes Objekt existiert, was bei C und C++ zu h√§ufigen Fehlern gef√ľhrt hat (z.B. eine durch eine lokale Funktion deklarierte Variable wird per Pointer dem Aufrufer bekanntgegeben).
Dieses Konzept tritt nicht nur auf Objekte sondern auch f√ľr Klassen in Kraft, da Klassen in Java nichts anderes sind als von der Klasse Objekt abgeleitete Objekte. Das hei√üt insbesondere das zur Laufzeit eines Programms nur die Klassen im Hauptspeicher gehalten werden die auch wirklich gebraucht werden. Das hat zur Folge, dass beim Programmstart zun√§chst nur die Basisklassen z.B. der awt Library geladen werden, was allerdings auf Grund des dynamischen Linkvorgangs, der gleichzeitig einsetzt merklich Zeit in Anspruch nimmt.
5.1.5 Threads
Java verwendet selbst z.B. zur Realisierung der Speicherverwaltung Threads und es bietet dem Programmierer Klassen und Methoden zur Threadbildung zur Verf√ľgung. Threads erm√∂glichen das parallele Ausf√ľhren einzelner Programmteile. Bei GUI basierenden Systemen ist es z.B. wichtig das verschiedene Aufgaben parallel erledigt werden. So will der Anwender in der Men√ľstruktur bl√§ttern, w√§hrend in einem Fenster Berechnungen ausgef√ľhrt werden und in einem anderen gerade eine Grafik aufgebaut wird.
Bei Java muss sich der Programmierer nicht mehr mit den Besonderheiten der Zielplatform auseinandersetzen und er muss auch keine Bedenken haben ob die standard Library Funktionen reentredant (sprich mehrfach gleichzeitig aufgerufen werden d√ľrfen) sind. Er bekommt durch Java einheitliche Methoden zur Synchronisation von Threads und zur Kommunikation zwischen verschiedenen Threads zur Verf√ľgung gestellt. Durch den Modifizierer synchronized k√∂nnen Methoden eines Objekts gegen mehrfachen parallelen Aufruf gesch√ľtzt werden. Ein in der Java Laufzeitumgebung implementierter Monitor √ľberwacht dann das diese Methoden des Objekts nicht parallel sondern seriell Ausgef√ľhrt werden. Generell sollten alle Methoden die Objektatribute ver√§ndern als synchronized deklariert werden.
Die Standardbibliothek ist vollständig "Threadfest", das heißt Methoden kann uneingeschränkt mehrfach parallel aufgerufen werden.
5.1.6 Benennungskonventionen
Wie schon mehrfach erw√§hnt werden in Java Klassen unter ihrem Realnamen abgelegt. Dadurch muss man beachten, dass ein File mit dem Namen test.java nach der Compilierung unter Umst√§nden mehrere Files erzeugt die zum Beispiel klasse1.class, klasse2.class etc. hei√üen. Zum Auffinden der Klassen wird vom ClassLoader der Klassen eine bestimmte Strategie verfolgt (wie Eingangs erw√§hnt kann der ClassLoader auch √ľberladen werden und dadurch sein Verhalten ver√§ndert werden). Klassen werden zu sogenannten Packages zusammengefa√üt. Bestes Beispiel sind die standard Librarys deren Namen alle mit dem Prefix java. beginnen. Um den Anspruch an die Dateisysteme nicht √ľbergeb√ľhr zu erh√∂hen wird zum Beispiel f√ľr die Klasse java.awt.list der Filenamen list.class Verzeichnis .\java\awt\ verwendet.
Inzwischen ist man dazu √ľbergegangen die kompletten Librarys in einem Archiv zu speichern (CLASSES.ZIP). Dieses File darf bei der Installation von Java keinesfalls ausgepackt werden.
Zur Benennung von Klassen die (Inter - ) Netz weit bekannt sein sollen, gilt die Konvention als Prefix der Klassen den eigenen URL zu verwenden (dadurch w√§re es mit einem geeigneten ClassLoader m√∂glich Klassen automatisch in der aktuellsten verf√ľgbaren Version vom durch den URL zu identifizierenden Server zu Laden). Die Problematik der unter Umst√§nden recht langen Klassennamen (de.fh - furtwangen.ask.katze.libs.car.class) wird derzeit heftig diskutiert und ist auch reichlich umstritten.
5.1.7 Datentypen und Strukturen
In Java gibt es folgende grundlegende Basis Datentypen:
    byte 8 Bit Zahlenwert ( - 128..127) short 16 Bit Zahlenwert int 32 Bit Zahlenwert long 64 Bit Zahlenwert float 32 Bit IEEE 754 Fließkommazahl double 64 Bit IEEE 754 Fließkommazahl char 16 Bit Unicode Zeichen boolean "echter" 1 Bit Wert Arrays String Unicode String
Dabei kommt der Programmierer nicht mit den Endiantypen der numerischen Variablen in Ber√ľhrung. Was z.B. unter C zu Problemen beim Dateiaustausch f√ľhrt.
String ist in Java ein echter Datentyp und nicht wie in C ein k√ľnstliches Array von Zeichen. Allerdings sind einige Methoden zur Stringmanipulation in einer Klasse der Standard Library gekapselt.
5.1.8 Die Syntax, eine √úbersicht
Die Kontrollstrukturen, Schleifen und Operatoren sind weitgehend die von C oder C++ her bekannten Konstrukte. Lediglich bei den Operatoren musste, da es keine vorzeichenlosen Zahlen gibt der>>> Operator eingef√ľgt werden, der eine Zahl bitweise nach rechts Schiebt und von rechts Nullen nach schiebt. Im Gegensatz zum>> Operator, der das Vorzeichenbit nach schiebt. In C wurde dies anhand dessen entschieden, ob der Zahlenwert vorzeichenbehaftet war oder nicht.
Auf der n√§chsten Seite befindet sich die, bis auf die kursiv dargestellten Symbole DocComment, Identifier, Number, String und Character komplette Syntaxbeschreibung der Programmiersprache Java. Die Syntax ist trotz der Objektorientiertheit nicht wesentlich Komplexer als die der Programmiersprache C. Die Fett dargestellten Symbole sind Zeichen wie sie im Quelltext erscheinen. Folgende Notation wird f√ľr die Grammatik verwendet:
Ausdruck = Metaausdruck; "|" steht f√ľr Alternativen, (...) f√ľr Gruppierungen, ? f√ľr kein oder einmaliges Auftreten und * f√ľr kein oder mehrmaliges Auftreten.
CompilationUnit= PackageStatement? ImportStatement* TypeDeclaration* ;
PackageStatement= package PackageName ; ;
ImportStatement= import PackageName. * ;| import ( ClassName | InterfaceName ); ;
TypeDeclaration= ClassDeclaration | InterfaceDeclaration | ; ;
ClassDeclaration = Modifier* class Identifier (extends ClassName)? (implements InterfaceName (, InterfaceName)*)? { FieldDeclaration* } ;
InterfaceDeclaration = Modifier* interface Identifier (extends InterfaceName (, InterfaceName)*)? { FieldDeclaration* } ;
FieldDeclaration = DocComment? MethodDeclaration | DocComment? ConstructorDeclaration | DocComment? VariableDeclaration | StaticInitializer | ; ;
MethodDeclaration = Modifier* Type Identifier ( ParameterList? ) ( [ ] )* ( { Statement* } | ;) ;
ConstructorDeclaration = Modifier* Identifier ( ParameterList? ) { Statement* } ;
VariableDeclaration= Modifier* Type VariableDeclarator (, VariableDeclarator)* ; ;
VariableDeclarator= Identifier ([ ])* (= VariableInitializer)? ;
VariableInitializer= Expression | { ( VariableInitializer (, VariableInitializer )* ,? )? } ;
StaticInitializer= static { Statement* } ;
ParameterList = Parameter (, Parameter)* ;
Parameter = TypeSpecifier Identifier ([ ])* ;
Statement = VariableDeclaration | Expression ; | { Statement* } | if ( Expression ) Statement (else Statement)? | while ( Expression ) Statement | do Statement while ( Expression ) ; | try Statement (catch ( Parameter ) Statement)* (finally Statement)? | synchronized ( Expression ) Statement | return Expression? ; | throw Expression ; | switch ( Expression ) { Statement* } | case Expression : | default; | Identifier : Statement | break Identifier? ; | continue Identifier? ; | ; ;
BiOp= + | - | * | / | % | ^ | & | | | && | || | << |>> |>>> | = | += | - = | *= | /= | %= | ^= | &= | |= | <<= |>>= |>>>= | < |> | <= |>= | == | != |. |, ;
Expression= Expression BiOp Expression | Expression instanceof ( ClassName | InterfaceName ) | Expression ? Expression : Expression | Expression [ Expression ] | ++ Expression | - - Expression | Expression ++ | Expression - - | - Expression | ! Expression | ~ Expression | ( Expression ) | ( Type ) Expression | Expression ( ArgList? ) | new ClassName ( ArgList?) | new TypeSpecifier ( [ Expression ] )+ ([ ])* | new ( Expression ) | true | false | null | super | this | Identifier | Number | String | Character ;
ArgList = Expression (, Expression )* ;
Type = TypeSpecifier ([ ])* ;
TypeSpecifier= boolean | byte | char | short | int | float | long | double | ClassName | InterfaceName ;
Modifier= public | private | protected | static | final | native | synchronized | abstract | threadsafe | transient ;
PackageName= Identifier | PackageName. Identifier ;
ClassName= Identifier | PackageName. Identifier ;
InterfaceName= Identifier | PackageName. Identifier ;
Java l√§sst f√ľr Bezeichner (Identifier) Zeichen aus dem Unicode zu, das hei√üt, dass z.B. auch Umlaute in Namen vorkommen k√∂nnen. Diese M√∂glichkeit bereitet allerdings noch etlichen Dateisystemen Probleme, da die Klassennamen direkt in *.class Files abgelegt werden, daher ist bei der Benennung der Klassen darauf zu achten nur ASCII Zeichen zu verwenden, die auch in √ľblichen Dateisystemen verwendet werden d√ľrfen. Da einige Betriebsysteme etwas lausig mit dem Vergleich von Dateinamen umgehen (Namentlich z.B. WIN95) sollte auch darauf geachtete werden, dass sich Klassen nicht nur durch Gro√ü - und Kleinschreibung unterscheiden, was in Java generell m√∂glich ist.
Zahlen (Number) werden wie in C √ľblich dargestellt. char ist immer ein 16Bit Unicode Wert, der entsprechend dargestellt wird 7 Bit ASCII Werte werden direkt in ihre Unicode Entsprechungen transformiert.
Strings werden wie in C √ľblich durch doppelte Hochkomma eingeschlossen dargestellt. F√ľr die Darstellung von Unicode Zeichen gibt es eine spezielle Escape Darstellung.
Bleiben noch die DocComments, mittels des zur Java Entwicklungsumgebung gehörenden Dokumentencompilers kann aus Java Quelltext eine Dokumentation der Klassenhierarchie und der Klasseninterfaces erstellt werden. Sun hat aus der Not, das der Quelltext sich schneller verändert als die Dokumentation angepaßt wird eine Tugend gemacht und ermöglicht die Dokumentation des Codes direkt im Programmcode unterzubringen.
Um textuelle Beschreibungen in diese Dokumentation einflie√üen zu lassen gibt es eine spezielle Kommentarklammerung. Der Text zwischen /** und */ wird zur Beschreibung des darauffolgenden Codes (in der Regel eine Definition) verwendet und Automatisch eingebunden. Das erzeugte Dokument wird im HTML Format ausgegeben. Es ist auch m√∂glich im Kommentar HTML Tags zu verwenden die dann in das Dokument √ľbernommen werden. Hyperlinks erm√∂glichen es die Verschiedenen Hierarchiestufen der Klassen zu verfolgen. In den Kommentaren k√∂nnen dadurch auch HTML Tags z.B. zur Hervorhebung genutzt werden.
5.1.9 Compiler
Der Java Compiler (javac) √ľberpr√ľft den Quelltext und erzeugt aus den *.java Files die entsprechenden *.class Files der Klassen die darin Implementiert sind. In der aktuellen JDK Version (1.01) muss zwischen dem Dateinamen des Quelltextes und den der erzeugten Class Dateien kein Zusammenhang mehr bestehen. In fr√ľheren Versionen musste in der Quelltextdatei eine Klasse mit dem Namen der Datei enthalten sein. Bei der Compilation wird der Quelltext bereits, soweit m√∂glich, auf Fehler untersucht und in den von der Virtuellen Maschine zu interpretierenden Bytecode umgewandelt. Identifizierer, die zum Beispiel f√ľr den Zugriff auf andere Klassen ben√∂tigt werden bleiben dabei in Klarschrift erhalten und werden erst vom Interpreter in (physische) Adressen umgesetzt.
Zum Compiler gehört auch javadoc, der aus Java Quellfiles ein HTML Dokument der Klassenhierarchien und der Klassen Methoden und Attribute erzeugt. Dazu werden auch die Texte aus den Dokumentkommentaren verwertet.
In Suns JDK (Java Development Kit) ist auch ein Compiler namens javac_g vorhanden. Dieser hat die gleiche Funktionalit√§t wie der javac Compiler, er wurde jedoch mit Debuging Informationen √ľbersetzt und erm√∂glicht so das leichtere Auffinden von Fehlern innerhalb des Compilers. Der Compiler selbst verwendet die Java Librarys, daher ist die Gr√∂√üe des Programms √ľberraschend gering.
5.1.10 Virtuelle Maschine
Die Virtuelle Maschine interpretiert den Java Bytecode. Erst sie löst externe Referenzen auf, indem sie den ClassLoader, der die benötigte Klasse bei Bedarf sucht und in den Hauptspeicher lädt, aufruft und die Klartextnamen durch Adressreferenzen ersetzt.
Auf einem Computer bzw. Betriebssystem auf dem diese Virtuelle Maschine realisiert ist k√∂nnen alle Java Programme laufen. Dabei ist keine Neucompilierung des Quelltextes n√∂tig. Vor der Instanziierung einer Klasse werden dabei Laufzeitpr√ľfungen und eine Verifikation vorgenommen, welche die Sicherheit des Programms gew√§hrleisten sollen (dazu sp√§ter mehr).
5.1.11 Linker?
In Java gibt es keinen Linker im urspr√ľnglichen Sinne, wie schon oben Beschrieben wird jede Klasse in ein einzelnes File gespeichert. Der ClassLoader l√§dt die Klassen automatisch bei Bedarf (und erst dann) in den Hauptspeicher. Gibt es keine Referenz bzw. Instanz der Klasse mehr, so wird der Speicher wieder freigegeben.
Der Klassenlader kann dabei durch eigene Klassen √ľberladen werden und erm√∂glicht so z.B. das auffinden einzelner Klassen √ľber die Grenzen des lokalen Rechners hinweg.
Der Linkproze√ü findet also erst zur Laufzeit des Programms statt. Eine Unterscheidung, wie in C++ zwischen fr√ľhem und sp√§tem Linken existiert nicht.

5.2 Java - Entwicklung und Java - Tools
5.2.1 Was ist Java?
Java ist eine neue, von Sun Microsystems entwickelte, objektorientierte und plattformunabh√§ngige Programmiersprache. Dabei wird oft davon gesprochen, dass Java das WWW revolutionieren wird. Denn mit Java lassen sich faszinierende Dinge auf Web - Seiten machen, die bisher nicht m√∂glich waren. Herausragenstes Merkmal ist wohl das Ausma√ü der Interaktivit√§t, die doch bei weitem alles √ľbersteigt, was bei CGI - programmierten Web - Seiten zur Zeit m√∂glich ist. So er√∂ffnet Java ganz neue M√∂glichkeiten Web - Seiten mit Multimedia - Inhalten wie fl√ľssige Animationen, erweiterte Grafiken, Sound und Video effektvoll zu gestalten.
5.2.2 Wie entstand Java?
Das Java - Team bei Sun Microsystems wollte urspr√ľnglich Software zur Ger√§testeuerung entwickeln. Allerdings musste das Team feststellen, dass die existierenden Programmiersprachen wie C und C++ daf√ľr nicht geeignet waren.
In C oder C++ geschriebene Programme m√ľssen f√ľr einen bestimmten Computerchip kompiliert werden. Kommt ein neuer Chip auf den Markt, so k√∂nnen seine Leistungsmerkmale nur dann voll genutzt werden, wenn der gr√∂√üte Teil der Software erneut kompiliert wird.
Da ein Computerchip, der zu teuer wird, umgehend durch einen neueren, kosteneffizienteren ersetzt wird, muss eben auch die Steuerungssoftware auf dem neuen Chip arbeiten.
So begann 1990 James Gosling bei Sun Microsystems in Mountain View, Kalifornien, mit der Arbeit an einer neuen Programmiersprache, die f√ľr Steuerungselektronik geeigneter und gleichzeitig die mit den traditionellen Sprachen wie C und C++ verbundenen Probleme umgehen sollte.
5.2.3 Die ersten Java - Projekte
Die ersten Java - Projekte kamen selbstverständlich von Sun selbst und beeinflußte die Java - Entwicklung nachhaltig.
Das Green - Projekt
Das Green - Projekt war das erste Projekt, bei dem Java eingesetzt wurde. Es sollte eine neue Form von Benutzeroberfl√§che f√ľr die Steuerung von Ger√§ten im h√§uslichen Alltag wie Videorecorder, Fernseher, Lampen, Telefon usw. entwickelt werden. So bauten die beteiligten Mitarbeiter einen experimentellen, tragbaren Computer, dem sie den Namen "*7" (gesprochen: "star seven") gaben.
Die Benutzeroberfl√§che, die vollst√§ndig in Java geschrieben worden war, bestand nun aus einer farbigen, animierten Darstellung der h√§uslichen Umgebung, bei der verschiedene Ger√§te durch Bildschirmber√ľhrung bedient werden konnten.
Das Nachfolgeprojekt f√ľr den *7 war ein Demoprogramm f√ľr Video - On - Demand (VOD). Hier sollten kleine Programme √ľber die TV - Kan√§le √ľbertragen werden, um das Fernsehen interaktiv und attraktiv zu gestalten. Dadurch konnte gezeigt werden, dass sich die Benutzeroberfl√§che (und nat√ľrlich Java) nicht nur zur Ger√§testeuerung eignet, sondern auch f√ľr interaktives Fernsehen.
WebRunner und HotJava
Etwa 1993 entwickelte sich das World Wide Web von einem auf Text basierenden zu einem immer stärker grafisch ausgerichteten Interface, das immer mehr Interesse fand.
Da Java - Programme durch die Plattformunabh√§ngigkeit auf all den verschiedenen Computertypen wie PC, Mac oder Unix ablauff√§hig sind und deren lokale Rechenpower nutzen, wurde den Java - Entwicklern klar, dass sich diese Sprache hervorragend f√ľr die Programmierung von Web - Anwendungen eignet, ja sogar eine neue Dimension er√∂ffnet.
So entwickelte man einen Web - Browser vollst√§ndig in Java und nannte ihn "WebRunner". Aus urheberrechtlichen Gr√ľnden wurde dieser Browser sp√§ter in "HotJava" umgetauft. So war "HotJava" der erste Web - Browser, der Java - Applets unterst√ľtzte. Dieser Web - Browser brachte nun die Programmiersprache Java erst ins Rampenlicht der √Ėffentlichkeit.
Im Mai 1995 stellte Sun Microsystems die Java - Technologie in San Francisco offiziell vor. Dadurch, dass Netscape Communications zus√§tzlich bekanntgab, dass der Netscape Navigator Java - Applets unterst√ľtzt, hat das schon ohnehin sehr gro√üe Interesse nur noch eingeheizt. So unterst√ľtzt der Netscape Navigator ab der Version 2.0 Java - Applets.
5.2.4 Das Java - Development - Kit (JDK) und dessen Nutzung
Das JDK wird von Sun Microsystems f√ľr verschiedene Plattformen kostenlos angeboten. So k√∂nnen mit dem JDK "Java Applets" als auch "Java Applications" (Stand - alone - Anwendungen, die mit dem Interpreter "java" zu starten sind) entwickelt werden. Aber auch andere Unternehmungen, wie etwa IBM, entwickeln an einem JDK f√ľr ihre jeweiligen Systeme. So steht inzwischen z.B. f√ľr OS/2 ein JDK 1.0 und ein Java - f√§higer WebExplorer jeweils im Betastadium zur Verf√ľgung. Anm.: Den WebExplorer kann man unter "http://www.ics.raleigh.ibm.com" beziehen. Anm.: Dass Java wohl keine Eintagsfliege ist, machen die Ank√ľndigungen mehrerer gro√üer Betriebssystemhersteller deutlich, dass sie in Zukunft Java in ihre Betriebssysteme integrieren wollen.
Wie man das JDK installiert und nutzt soll nun am Beispiel von OS/2 erläutert werden:
Das JDK f√ľr OS/2 besteht aus zwei gepackten Archiven:
    Runtime.zip und Toolkit.zip
Um die Archive zu entpacken, wechselt man mittels "cd" in ein Verzeichnis, welches das JDK erhalten soll und kopiert obige Dateien hinein.
Wenn man also z.B. das JDK auf Laufwerk C: im Verzeichnis C:\Prg (in welchem mehrere Programmiersprachen installiert sind) installieren möchte, kopiert man eben dort die Archive hinein.
Nun entpackt man beide Archive. Dabei ist zu beachten, dass der Entpacker lange Dateinamen unterst√ľtzen muss und dass man den Parameter zur Generierung der Unterverzeichnisse nicht vergessen darf! Der Aufruf sieht dann z.B. folgenderma√üen aus:
C:\Prg>unzip - d runtime
C:\Prg>unzip - d toolkit
Es wurde nun folgendes Unterverzeichnis erstellt:
C:\Prg\JavaOS2
In diesem Verzeichnis befinden sich nun alle benötigten Programme wie etwa Compiler, Interpreter, Appletviewer usw.
Es wurde folgende Verzeichnisstruktur erstellt:
Datenträger, Laufwerk C, hat den Namen OS2.
Datenträgernummer ist 667C:8C15
Verzeichnis von C:\prg\javaos2
2.05.96 14.19 0 .
2.05.96 14.19 0 ..
12.04.96 10.58 0 bin (Java - Tools)
12.04.96 11.00 0 demo (Beispiele)
12.04.96 10.58 0 dll
12.04.96 11.00 0 include (C/C++ - Einb.)
12.04.96 10.58 0 lib (Java - Packages...)
12.04.96 0.15 483 0 copyrght
2.05.96 14.25 1068 0 index.html
12.04.96 0.15 3119 0 readme.run
12.04.96 0.15 5657 0 readme.tlk
12.04.96 10.55 3564 0 release.not
12 Datei(en) 13891 Byte belegt
48381440 Byte frei
So belegt das JDK f√ľr OS/2 etwas mehr als 7 MB auf dem Plattenspeicher (ohne Beispiele!).
Um nun damit arbeiten zu k√∂nnen, m√ľssen noch einige √Ąnderungen an der Systemdatei "Config.sys" gemacht werden:
    das PATH - Statement muss um C:\Prg\JavaOS2\bin erweitert werden das LIBPATH - Statement muss um C:\Prg\JavaOS2\dll erweitert werden SET JAVA_HOME=C:\Prg\JavaOS2 SET JAVA_USER=C:\Daten\Internet\JavaOS2 (Hier werden benutzerspezifische Daten gespeichert. Dieses Verzeichnis sollte von dem Programmverzeichnis verschieden sein!) SET JAVA_WEBLOGS=C:\Daten\Internet\JavaOS2 (Hier wird f√ľr jeden gestarteten Java - Proze√ü ein Logfile erstellt. Dieses Verzeichnis sollte von dem Programmverzeichnis verschieden sein!)
Nach einem Neustart des Rechners stehen nun folgende (grundlegenden) Befehle zur Verf√ľgung:
    javac - Das ist der Java - Compiler. Durch Eingabe von "javac DasPrg.java" wird eine Datei "DasPrg.class" erzeugt, welches nun den Java - Bytecode enth√§lt. java - Das ist der Java - Interpreter f√ľr Java - Applikationen, die NICHT das "Abstract Window Toolkit (AWT)" benutzen. Durch Eingabe von "java DasPrg.class" wird die Java - Applikation ausgef√ľhrt. javapm - Das ist der Java - Interpreter f√ľr Java - Applikationen, die das "Abstract Window Toolkit (AWT) benutzen. Durch Eingabe von "javapm DasPMPrg.class" wird das Programm auf der Workplace - Shell von OS/2 ausgef√ľhrt. applet - Das ist ein Programm, um Applets in HTML - Sites ohne einen Web - Browser ausf√ľhren zu k√∂nnen. Durch Eingabe von "applet WebSite.html" werden evtl. vorhandene Applets innerhalb der vorgegebenen Web - Site auf der Workplace - Shell von OS/2 ausgef√ľhrt. Anm.: Auf anderen Plattformen hei√üt das Programm zum starten von Applets meist "appletviewer". javadoc - Dies ist ein Programm, das aus bestimmt markierten Kommentaren automatisch eine Dokumentation im HTML - Format erzeugt. Die Dokumentation des JDK's wurde auf diese Weise erstellt.
5.2.5 Die Java - Packages
Neben Klassen, die es ermöglichen, Felder und Methoden zu gruppieren, existieren in Java die sogenannten Packages. Mit Hilfe dieser Packages ist es möglich, verwandte Klassen zu gruppieren. Klassen aus solchen Packages lassen sich durch einen von Modula - 2 abgeleiteten import - Befehl durch andere Klassen benutzen. Der import - Befehle ist damit mit einem #include - Statement bei C oder C++ vergleichbar.
Die Java - Packages
In Java gibt es sechs (sehr umfangreiche) Packages, die standardmäßig zum JDK gehören:
    java.lang: Dieses Package beinhaltet wesentliche Java - Klassen. Dieses Package wird implizit in jede Java - Datei importiert. So muss ein "import java.lang.*" nicht in einer Java - Datei deklariert werden. java.io: Dieses Package enth√§lt Klassen, die f√ľr die Datenein - bzw. ausgabe benutzt werden k√∂nnen. java.util: Enth√§lt Utility - Klassen wie Hashtables, Vektoren, Zufallszahlen, Datum usw. java.net: Enth√§lt Klassen f√ľr die Netzwerkverbindung. Diese Klassen k√∂nnen zusammen mit den Klassen aus dem java.io - Package benutzt werden, um Daten aus dem Netzwerk zu lesen oder in das Netzwerk zu schreiben. java.awt: Mit diesem Package lassen sich plattformunabh√§ngige GUI - Applikationen schreiben. Es sei hier ausdr√ľcklich darauf hingewiesen, dass speziell dieses Package Java f√ľr die Programmierung im Internet interessant macht. Mit diesem Package erreicht man einen Interaktivit√§tsgrad, der mit herk√∂mmlicher CGI - Programmierung undenkbar w√§re. java.applet: Enth√§lt Klassen f√ľr die Java - Applet - Programmierung. Diese Applets k√∂nnen dann in jedem Java - kompatiblen Web - Browser ablaufen.
Das Package "java.awt"
Das Abstract Window Toolkit (AWT) ist ein GUI - Toolkit, das plattform√ľbergreifend arbeitet. Es beinhaltet nat√ľrlich nicht alle Features, die die unterschiedlichen Betriebssysteme bieten, sondern hat eine allgemeine Reihe von Merkmalen, die von den meisten Plattformen unterst√ľtzt werden. Es ist eben so, dass man sich bei plattformunabh√§ngiger Programmierung nun mal auf den kleinsten gemeinsamen Nenner einigen muss. Dabei werden die Methoden so weit als m√∂glich auf die darunterliegenden plattformspezifischen GUI - APIs abgebildet.
Da das AWT wohl das wichtigste Package f√ľr zuk√ľnftige Java - Applikationen und besonders Java - Applets darstellt, sollen dessen Aufbau und M√∂glichkeiten kurz dargestellt werden.
Zus√§tzlich sei gesagt, dass das AWT nat√ľrlich erweiterbar ist, wobei man dann auch sicher sein kann, dass diese Erweiterungen ebenfalls plattform√ľbergreifend arbeiten.
Die folgende Abbildung zeigt nun die wichtigsten AWT - Klassen in ihrer Hierarchie:
Abbildung : Die wichtigsten AWT - Klassen
    Component: Das ist die Basisklasse vieler AWT - Klassen. Der Hauptzweck dieser Klasse besteht darin, etwas mitsamt seiner Lage und Größe auf dem Bildschirm darzustellen. Container: Das ist die Basisklasse aller Komponenten. Sie selbst kann andere Klassen enthalten. Zu dieser Klasse gehört ein Hilfsobjekt: ein Layout - Manager, der die Komponenten im Container nach bestimmten Grundsätzen ordnet. Window: Ein Hauptfenster ohne Rahmen. Frame: Ein Hauptfenster mit Rahmen. Diese Klasse ist meist mit einem "MenuBar" - Objekt verbunden. Dialog: Ein Hauptfenster, zum Erstellen von Dialogen. Dieses Fenster kann modal oder nicht modal sein. FileDialog: Dialog zur Dateiauswahl. Panel: Dies ist eine von der Container - Klasse abgeleitete Klasse, die in anderen Containern benutzt werden kann. Dadurch können komplizierte Layouts erstellt werden. Button: Ein GUI - Aktionsknopf wie etwa "Abbruch". Canvas: Dies ist eine allgemeine Komponente, die es erlaubt, Eingabebefehle des Benutzers zu zeichnen oder abzufangen. Checkbox: Ein Feld mit Boolean - Charakter. Dieses Feld kann man setzen oder löschen. Label: Ausgabe einer Zeichenkette an einer bestimmten Stelle. List: Scollbare Liste von Zeichenketten. Scrollbar: Rollbalken, mit denen scrollbare Canvases erstellt werden können. TextArea: Einfache Texteditierung. Textfield: Textkomponente mit nur einer Zeile zur Erstellung von Formularen.
Dies ist nat√ľrlich nur ein kleiner Anri√ü der M√∂glichkeiten, die das AWT bietet.
5.2.6 Entwicklungsumgebungen f√ľr Java
Mit dem vorliegenden JDK ist nat√ľrlich ein angenehmes Arbeiten aufgrund der Kommandozeilen - Befehle nicht machbar. Dies haben die Software - Hersteller f√ľr Entwicklungsumgebungen nat√ľrlich erkannt und trimmen nun ihre bereits bestehenden C/C++ - Entwicklungsumgebungen auf Java.
Daher sollen hier die derzeit wichtigsten Java - Entwicklungsumgebungen kurz vorgestellt werden:
    Sun Microsystems stellte auf der Cebit ¬ī96 eine erste Version ihrer Java - Entwicklungsumgebung "Java Workshop" vor, die selbst in Java geschrieben wurde. Rogue Wave Software bietet schon eine komplette, visuelle Java - Entwicklungsumgebung f√ľr Win32 und Solaris an. "JFactory" beteht aus einem Applikationsdesigner, einem Codegenerator und dem Compiler. Anm.: "Jfactory" ist unter "http://www.roguewave.com" zu beziehen. Symantec bietet schon jetzt "Espresso" f√ľr Win32 und "Caffeine" f√ľr den Macintosh an. Dabei handelt es sich aber lediglich um eine Einbindung von Sun's JDK in die Oberfl√§chen der jeweiligen Symantec - Compiler. Die integrierte L√∂sung mit eigenem Compiler, Debugger usw. soll es bald als "Caf√©" folgen. Anm.: Kontakt √ľber "http://www.symantec.com". PowerSoft will mit "Optima++" auf den Markt. "Optima++" setzt zwar weiterhin als prim√§re Programmiersprache C++ ein, soll aber lernen, Java - Applets zu erzeugen. Innovative Software bietet ihr auf Java getrimmtes OEW als ein Reverse/Forward - Engineering - und Designwerkzeug an. Die Version 0.9 von "OEW/Java" ist zudem kostenlos vom Server "www.isg.de" zu beziehen. Metrowerks bietet f√ľr den Mac den "CodeWarrior 8" an. Der "Code Warrior 9" soll nach Auskunft von Metrowerks f√ľr den Mac Mitte Mai erscheinen. Dabei sollen sowohl der Compiler, als auch der Debugger Eigenbauten sein. Anm.: Kontakt √ľber "http://www.metrowerks.com". Natural Intelligence bietet f√ľr den Mac die integrierte Java - Entwicklungsumgebung "Roaster" an. melonSoft Berlin bietet mit "ACupOfCoffee" den ersten kompletten GUI - Builder f√ľr das Java - Abstract - Window - Toolkit (AWT) an. "ACupOfCoffee" ist eine Palette f√ľr den NextStep InterfaceBuilder. Anm.: Kontakt √ľber "mailto: suckow@contrib.de". Borland will in naher Zukunft ebenfalls eine integrierte Java - Entwicklungsumgebung anbieten. Diese soll ebenfalls plattform√ľbergreifend sein (durch Entwicklung mit Java) und hofiert unter dem Codename "Latte". Microsoft will Java - Entwicklungstools in die n√§chste Version von Visual C++ integrieren.

5.3 Applets: Animation und Interaktion im WWW
5.3.1 Java und das WWW
Java animiert WEB Seiten und erm√∂glicht interaktive und spezialisierte Anwendungen. Hypertext als Basis f√ľr die Informationsorganisation bietet ein Vehikel f√ľr die Auswahl der Information. Das Common Gateway Interface (CGI) stellt eine Schnittstelle zwischen Web - Seiten im Client - Browser und dem WWW - Server dar. Java hingegen gibt erstmals die M√∂glichkeit Animation sowie komplexe Benutzerinteraktion in Echtzeit auf WWW - Seiten darzustellen. Durch Java wird die klassische W3 - Hypertext - Seite nicht nur dynamischer als mit Hilfe des CGI; Benutzer, die im WWW auf Java - Programme sto√üen, k√∂nnen an vielf√§ltiger Interaktion und Animation teilnehmen, die ausschlie√ülich durch die Phantasie des Java - Entwicklers begrenzt wird.
Ausf√ľhrbare Elemente in W3 - Seiten
Lokale Echtzeitinteraktion und - animation im Client - Browser wird durch ausf√ľhrbare Inhalte erm√∂glicht, mit denen der WWW - Designer seine Seiten anreichert. Diese ausf√ľhrbaren Elemente werden mit HTML - Tags in die Web - Seiten eingewoben. Allerdings kann nicht jeder beliebige Browser diese ausf√ľhrbaren Inhalte anzeigen. Der Browser Hot Java von Sun Microsystems war der erste Browser, der die Java - Features nutzen konnte. Heute ist auch in Netscape 2.0 die virtuelle Java - Engine integriert. Dabei spielt es keine Rolle, auf welcher Plattform der Java - kompatible Browser l√§uft.
5.3.2 Java - Applets in WWW - Seiten
Die ausf√ľhrbaren Elemente in WWW - Seiten werden Applets genannt und mit dem - Tag in die Hypertext Markup Language eingebunden. Ist der Client - Browser Java - kompatibel wird das Applet auf dem Client - Browser problemlos dargestellt.
Applets k√∂nnen auch ohne Kenntnisse der Programmiersprache Java in eigene Dokumente eingebunden werden. Applets verf√ľgen √ľber eine wohldefinierte Schnittstelle, die √ľber den - Tag in HTML angesprochen werden kann. Der - Tag hat den in beschriebenen Grundaufbau. Um ein Applet in eigene HTML - Seiten einbinden zu k√∂nnen, m√ľssen also
    Standort (HTML - Adresse und Verzeichnis z.B. http://www.xyz.de/java/class) Name (Name des Applets in ByteCode, also mit Suffix "class") Parametereigenschaften
des gew√ľnschten Applets bekannt sein.
    . .. Sie benötigen einen Javakompatiblen Browser!
    Abbildung : Grundaufbau des - Tags. Notwendige Attribute sind unterstrichen. Auf den SRC - Parameter kann vollst√§ndig verzichtet werden, wenn sich das Applet im aktuellen Verzeichnis befindet. Dieser Parameter erm√∂glicht auch das benutzen von Applets, die sich auf irgendeinem WWW - Server befinden (siehe ). In diesem Fall muss dort die jeweilige HTTP - Adresse inclusive Pfad eingegeben werden. Der code - Parameter bestimmt den Namen des Applets. Zeile 9 enth√§lt einen alternativen Inhalt, der nur von Browsern angezeigt wird, die Java - Applets nicht unterst√ľtzen.
    Abbildung : Applets in HTML - Seiten
    WWW - Seiten mit Java - Applets entstehen in folgenden Schritten:
      Entwickler erstellen Java - Sourcecode auf ihren Rechnern Der Quellcode wird mit dem Java - Compiler kompiliert Als Ergebnis erh√§lt man das plattformunabh√§nige Applet in ByteCode Erstellen einer HTML - Seite mit Tag und einem Mindestma√ü an Parametern Ausf√ľhren der Seite mit Java - kompatiblem Browser oder mit dem im JDK enthaltenen appletviewer 5.3.3 Operationen beim Abruf einer WWW - Seite mit Applets
      Im folgenden wird der Ablauf von der Anforderung bis zur Darstellung einer HTML - Seite mit Applet beschrieben.


      Abbildung : Ablauf von Anforderung bis Darstellung von HTML - Seiten mit Applet
        Der Benutzer sendet eine Anfrage f√ľr ein HTML - Dokument an den Server Das HTML - Dokument wird an den Browser des Benutzers geschickt. Durch die - Tags wird ein Applet identifiziert. Der Bytecode des Applets wird an den Client √ľbertragen. Der Java - kompatible Client - Browser interpretiert die Bytecodes und zeigt die HTML - Seite mit Applets an Der Benutzer kann unabh√§ngig vom Web - Server mit dem Applet interagieren. Der Bytecode enth√§lt alle daf√ľr notwendigen Informationen. Dabei werden nur Ressourcen des Client - Rechners beansprucht, es sei denn, eine Interaktion mit dem Web - Server w√ľrde stattfinden. 5.3.4 Gartner - Group Modell
         
        Teilhaber - Betrieb
        Distributed Presentation
        Remote Presentation
        Distributed Processing
        Remote Database
        Distributed Database
        File Server
         
        SERVER
        SERVER
        SERVER
        SERVER
        SERVER
        SERVER
        SERVER
         
        Data Mgmt.
        Data Mgmt.
        Data Mgmt.
        Data Mgmt.
        Data Mgmt.
        Data Mgmt.
         
         
        Fachlogik
        Fachlogik
        Fachlogik
        Fachlogik
         
         
         
         
        Dialog & Presentation
        Dialog & Presentation
         
         
         
         
         
         
        Internet
        Internet
        Internet
        Internet
        Internet
        Internet
        Internet
         
         
         
         
         
         
        Data Mgmt.
        Data Mgmt.
         
         
         
         
        Fachlogik
        Fachlogik
        Fachlogik
        Fachlogik
         
         
        Presentation (phys.)
        Dialog & Presentation
        Dialog & Presentation
        Dialog & Presentation
        Dialog & Presentation
        Dialog & Presentation
         
        CLIENT
        CLIENT
        CLIENT
        CLIENT
        CLIENT
        CLIENT
        CLIENT
        Java Applets
         
         
        X
        X
        X
        X
        X
        CGI
         
         
        X
         
         
         
         
        RPC
         
         
        X
         
         
         
         
        X11
         
        X
         
         
         
         
         
        Abbildung : Applets und CGI (sowie RPC und X11) im Modell der Gartner Group
        Java - Applets haben im Vergleich zu CGI - Skripts folgende Vorteile:
          nur notwendige Fachlogik auf Server - > geringer Serverbelastung Daten werden da gelagert, wo sie wirklich gebraucht werden Nutzung von Client - Ressourcen weniger Netzwerkbelastung
        5.3.5 Animation und Interaktion mit Java - Applets
        Java Applets lassen sich grob nach dem Informationsflu√ü strukturieren. Untersucht man die Informationsfl√ľ√üe diverser Applets, lassen sich drei Typen bilden.


        Abbildung : Lokale Präsentation ohne Interaktion
        beschreibt den einfachsten Applettyp. Dabei findet ein Informationsflu√ü vom Server zum Client statt, sowie vom Client zum Benutzer. Ein Beispiel f√ľr diese Art von Applet ist das Trembling - Duke Applet sowie alle anderen "Daumenkino" - Applets. Der Bytecode wird lokal ausgef√ľhrt, der Benutzer interagiert aber nicht mit dem Applet und es findet kein Infomationsflu√ü zwischen Client - Browser und Server statt.
        Abbildung : Lokale Präsentation und Benutzer - Client Interaktion
        Bei dem in dargestellten Applettyp findet nicht nur ein Informationsflu√ü vom Server zum Client und zum Benutzer statt; der Benutzer hat hier die M√∂glichkeit mit dem Applet auf dem Client zu Interagieren. Beispielhaft f√ľr diesen Typ von Applet ist irgendein Spreadsheet - Applet mit integrierter Fachlogik: Irgendeine Bank bietet ein Spreadsheet in Form eines Applets zur Ratentilgung an. Der Benutzer kann seine pers√∂nlichen Daten eingeben und diverse Berechnungen durchf√ľhren. Es findet also eine Interaktion zwischen dem Applet und dem Benutzer statt, nicht aber zwischen den Client Browser und dem WWW - Server.
        Abbildung : Lokale Präsentation und Server - Client - Benutzer - Interaktion
        zeigt einen Applettyp, bei dem Interaktion zwischen allen beteiligten Parteien stattfindet. Beispiel: Eine Versicherung erstellt ein Applet mit dem eine KFZ - Versicherung abgeschlossen werden kann. Das Applet wird bei Anforderung der WWW - Seite auf den Client geladen. Der Benutzer interagiert mit dem Applet indem er seine pers√∂nlichen Daten eingibt. Nach einer Plausibilit√§tspr√ľfung auf dem Client werden die Benutzerinformationen zum Server geschickt.
        Animation mit Applets
        Die wohl einfachste Form von Applets sind Animationen. Hier findet keine Interaktion mit dem Benutzer statt. Vielmehr dienen diese Animationen entweder der grafischen Auflockerung von Web - Seiten oder zum Abspielen von Informationssequenzen (z.B. Scrollines, B√∂rsenticker, Filme, Sounds). Ein evidenter Vorteil von Applets hier: bis dato mussten Viewer/Player f√ľr Dateien mit Informationssequenzen getrennt vom Browser auf dem Client - System mitgef√ľhrt werden (JPEG - Viewer f√ľr JPG’s, WAV - Player f√ľr WAV’s). Jetzt k√∂nnen mit Hilfe von Applets Informationssequenzen vom Benutzer genutzt werden, ohne sich √ľber das Format der Dateien Sorgen machen zu m√ľssen, da der Java - Bytecode einen Viewer/Player enthalten kann.
        Hier zun√§chst ein Beispiel f√ľr ein einfaches Animationsapplet:



        Hallo... Testwebseite


        wie gehts ??










        In diesem Beispiel werden die in gezeigten GIF - Dateien √ľbereinanderkopiert. Durch die Tr√§gheit den menschlichen Auges sehen wir ein bewegtes Bild.
        Animierte Applets m√ľssen aber nicht zwangsweise √ľbereinanderkopierte Bitmaps sein; der Bytecode kann ja auch direkt auf die angezeigte Bitmap wirken und diese so animieren. Ein Beispiel hierf√ľr ist das Feuerwerk - Applet oder das Clock - Applet (http://java.sun.com).
        Interessant ist das LED Sign Applet (http://java.sun.com).. Neben bloßer Parameter bietet es eine Makrosprache zur Anzeige einer Laufschrift an.
        Wichtig f√ľr den Business - Bereich k√∂nnten die B√∂rsenticker werden: Ein Applet ist f√ľr die grafische Darstellung von Charts (z.B. Aktienkurse) auf dem Client - Browser zust√§ndig. Diesem Chart - Applet m√ľssen dann nur reine Nutzdaten aus dem Netz √ľbergeben werden, die vom Chart - Applet auf dem Client angezeigt werden.
        Interaktion mit Java - Applets
        Mit Hilfe der CGI - Programmierung kann der Web - Entwickler in eine Anwendung ein gewisses Ma√ü an Interaktivit√§t einbauen und somit dem Benutzer eine M√∂glichkeit an die Hand geben, auf Anfrage exakt auf seine Bed√ľrfnisse zugeschnittene Informationen zu erhalten. CGI - Programme k√∂nnen einem Benutzer auch gestatten, eine Informationsstruktur zu √§ndern oder ihr etwas hinzuzuf√ľgen. Wegen seines ausf√ľhrbaren Inhaltes ist mit Java ein noch h√∂herer Grad an Interaktivit√§t m√∂glich.
        Bei der CGI - Programmierung werden die Ressourcen des Client - Rechners nicht genutzt. An jedem Interaktionspunkt findet ein Zugriff auf den Server statt, da bei CGI keine Fachlogik mit der HTML - Seite heruntergeladen wird. So wird das Netz und der WWW - Server oft unnötig belastet und die Antwortzeit sinnlos in die Höhe getrieben. Verwendet man Java - Applets, kann ein Teil der Fachlogik auf den Client gelegt werden, so dass nur in notwendigen Fällen ein Server - Zugriff stattfindet.
        Bei Applets mit reiner Benutzer - Client Interaktion können Serverzugriffe vollkommen verhindert werden. Beispielhaft soll dies anhand des Spreadsheet - Applets ( und ) verdeutlicht werden.


        Abbildung : Client - Ressourcen werden genutzt, unnötiger Serverzugriff verhindert
        Stock Positions

        My Portfolio


















        Abbildung : HTML - Code zu Spreadsheet - Beispiel
        Beim Spreadsheetbeispiel wurde die gesamte Fachlogik in das Applet verlagert. Manchmal ist eine Interaktion zwischen Server und Client - Browser (wie im KFZ - Versicherungsbeispiel aus Kapitel 5.4) notwendig um Nutzdaten zu √ľbertragen oder Transaktionen durchzuf√ľhren. An dieser Stelle kann das B√∂rsentickerbeispiel weitergesponnen werden: Einem Aktienanalysten werden nicht nur die aktuellsten Kursdaten √ľbertragen, man k√∂nnte Ihm ein zus√§tzliches Feature bieten, das Ihm Transaktionen, z.B. den Kauf und Verkauf von Aktien, erm√∂glicht.
        Außerdem können durch Java - Applets nicht nur weltumspannende Multiusergames realisiert werden. Die gesamte Groupware eines Unternehmens kann basierend auf Java einheitlich umgesetzt werden.
        In Anbetracht der von Oracle, Sun und anderen Firmen geplanten diskless Settopboxen kann angenommen werden, dass in naher Zukunft sogar Applikationen "gemietet" werden. Wieso soll man sich eine teure Textverarbeitung mit Tausenden ungenutzten Features kaufen, wenn man sich im Internet diese mit "Rent - an - Application" auf Zeit mieten kann.
        5.3.6 Sicherheitsaspekte
        Dadurch, dass fremder Code (in Form von Applets) √ľber das Internet auf den lokalen Rechner geladen und ausgef√ľhrt wird, wurde der Ruf nach Sicherheitsma√ünahmen laut. Wer m√∂chte schon, dass ein Applet die Daten der lokalen Festplatte unbemerkt einem unbekannten Dritten zuspielt, oder dass ein Applet gar die Festplatte formatiert?
        F√ľr diesen Zweck wurden daher Ma√ünahmen getroffen, die die unbemerkte Informations√ľbermittlung und die Sch√§digung des lokalen Computers unm√∂glich machen sollen.
        Diese Sicherheit wird dadurch erreicht, dass Java - Quellcodes zuerst in Byte - Code - Anweisungen kompiliert werden, die in dieser Form verifiziert werden k√∂nnen. Die Java - Anweisungen im Byte - Code √§hneln anderen Befehlss√§tzen von Computerchips, jedoch sind sie nicht f√ľr ein bestimmtes Computersystem spezifisch und k√∂nnen somit auf eventuelle Schutzverletzungen gepr√ľft werden (siehe Abbildung 14).


        Abbildung : Der Verifizierungsproze√ü f√ľr den Byte - Code bei Java.
        Anders als bei herk√∂mmlichen Programmiersprachen erfolgt der Zugriff auf Methoden und Variablen stets √ľber ihren Namen. So l√§sst sich leicht verifizieren, welche Methoden tats√§chlich benutzt werden. Dies ist auch notwendig, damit ein unbefugtes Herumbasteln an den Byte - Codes ausgeschlossen werden kann.
        Nachdem die Applets verifiziert wurden, k√∂nnen sie in einer beschr√§nkten Umgebung ablaufen. In dieser Umgebung k√∂nnen bestimmte gef√§hrliche Funktionen von Applets nur ausgef√ľhrt werden, wenn ihnen das ausdr√ľcklich gestattet wird. Aufgrund der Verifizierung ist ein Ausbrechen aus dieser Umgebung nicht m√∂glich.
        Weiterhin gilt f√ľr verifizierte Applets:
          es ist kein Operandenstack - Overflow möglich alle Operationen werden auf Operanden mit korrektem Typ angewendet es existieren keine unzulässigen Typkonvertierungen die Zugriffsrechte auf Felder (public, private, protected) werden eingehalten
        Die Gestaltung der Zugriffsm√∂glichkeiten f√ľr externe Applets lassen sich in den Java - f√§higen Web - Browsern einstellen. Dabei kann es folgende M√∂glichkeiten geben (dies variiert zwischen den Browsern):
          None: Die Applets haben keinen Zugriff auf das Netzwerk. Dies ist der beste Schutz, jedoch sind in diesem Modus nicht alle Applets ablauff√§hig. Applet Host: Hier haben die Applets nur Zugriff auf den Host, von dem sie stammen. Diese Applets k√∂nnen daher nicht auf die Informationen auf ihren Computern zugreifen. Dies ist auch die Standardeinstellung in der die meisten Applets ablauff√§hig sind. Firewall: Applets au√üerhalb der Firewall k√∂nnen nur auf Hosts, die ebenfalls au√üerhalb der Firewall sind, zugreifen. Dieser Modus ist nat√ľrlich nur m√∂glich, wenn auch eine Firewall eingerichtet wurde. Unrestricted: Hier k√∂nnen Applets zu allen Hosts im Internet Verbindungen herstellen. Dieser Modus sollte allerdings nur benutzt werden, wenn keine Sicherheitsbedenken bez√ľglich des Applets vorhanden sind.
        Lokal gestartete Applets (dies sind Applets im CLASSPATH!!) k√∂nnen nat√ľrlich auf den lokalen Rechner zugreifen. F√ľr externe Applets kann zus√§tzlich der Zugriff auf die lokale Klassenbibliothek eingeschr√§nkt werden. Dadurch wird ein √úberschreiben dieser als sicher akzeptierten Klassen unterbunden.
        Anzumerken bleibt, dass die Sicherheit von Java und speziell von Java - Applets durch Einsatz kryptografischer Verfahren (Public - Key - System) bei der Übertragung von Klassen und durch die eindeutige Identifizierung des Herstellers noch erhöht werden könnte.

        Literaturverzeichnis
        Back, Svend [Heißer Kaffee, 1996]. "Heißer Kaffee". c't. Ausgabe 2 (1996): S. 138 - 142.
        Behme, Henning [Kaffeehaus, 1995]. "Im Kaffeehaus". iX Multiuser - Multitasking - Magazin. Ausgabe 7 (1995): S. 120 - 125.
        December, John [JAVA, 1996]. JAVA - Einf√ľhrung und √úberblick. 1. Auflage. Haar bei M√ľnchen: Markt&Technik, 1996.
        Gosling, James [White, 1995]. The Java Language Environment A White Paper. MountainView: Sun Microsystems, 1995.
        Luckhardt, Norbert, Storm Ingo [Ballonrennen, 1996]. "Bollonrennen". c't. Ausgabe 2 (1996): S. 136.
        Schneider, Ute [Applets, 1996]. "Applets, schöne Applets". iX Multiuser - Multitasking - Magazin. Ausgabe 5 (1996): S. 62 - 68.
        Storm, Ingo [Verletzungsgefahr, 1996]. "Verletzungsgefahr". c't. Ausgabe 5 (1996): S. 72 - 73.
        Templ, Josef [Schwarzes Loch, 1996]. "Schwarzes Loch". iX Multiuser - Multitaskting - Magazin. Ausgabe 5 (1996): S. 70 - 73.
        Van Hoff, Arthur [Java - Applets, 1996]. Java - Applets erstellen und nutzen: Interaktive Web - Seiten selbstgemacht. 1. Auflage. Bonn, M√ľnchen, Paris u.a.: Addison - Wesley, 1996.

        7666 Worte in "deutsch"  als "hilfreich"  bewertet