Schuljahr 2002/2003
Fachreferat in Technologie
Referent: Kagerer, Thomas B12Ta
Fachlehrer: Herr Eckl
Die
Programmiersprache Java am Beispiel Java Applet 
Inhalt:
4. Die Programmiersprache Java
4.1 Grundlegende Sprachelemente
5. Das Taschenrechnerapplet "Techno"
Dieses Dokument zusammengefasst im Thesenpapier (Word-Dokument)
Java ist eine plattformunabhängige objektorientierte Programmiersprache der Firma Sun Microsystems.
Will man Java Programme
ausführen, muss man auf seinem System die Java Virtual Machine (JVM) installiert
haben.
Das ist die Laufzeitumgebung, die sicherstellt, dass einunddasselbe Programm
auf allen Systemen genau gleich läuft.
Java Applets erweitern die Vorteile von Java, da sie nicht nur plattformunabhängig sind, sondern auch im Browser lauffähig sind - alle aktuellen Browser in der Lage sind, Java-Applets auszuführen.
Ein Applet ist ein Programm, das in eine Website eingebettet ist. Der Programmcode wird aus dem Internet geladen und auf dem lokalen Rechner ausgeführt.
Bereits bei der Enwicklung der Sprache wurde besonderer Wert auf Sicherheit gelegt. Java-Applets haben nur eingeschränkten Zugriff auf ihre Umgebung, d. h. den lokalen Rechner. Dieses Prinzip wird als Sandbox bezeichnet, in Analogie zu einem Kind, das in seinem Sandkasten keinen Schaden anrichten kann.
Der Zugriff auf die Umgebung wird durch ein spezielles Objekt, den Sicherheitsmanager, gesteuert. Der Sicherheitsmanager, und damit die Zugriffsrechte des Applets, wird bei der Initialisierung der Virtual Machine (JVM - Laufzeitumgebung) festgelegt und kann vom Applet nicht geändert werden. Folgende Sicherheitsrisiken werden vom Sicherheitsmanager u. a. ausgeschlossen:
Zugriffe auf das Dateisystem des lokalen Rechners
Zugriff auf Daten des Benutzers
(Nutzername, Zwischenablage etc.)
Netzwerkverbindungen zu anderen
Rechnern als dem Server, von dem das Applet geladen wurde
Starten von Programmen
Änderung der Sicherheitseinstellungen
Die Sicherheit,
die durch den Sicherheitsmanager gewährleistet wird, basiert auf dem Sprachkonzept
von Java. Der Sicherheitsmanager kann normalerweise nicht durch das Applet verändert
werden. Es ist aber theoretisch möglich, den Bytecode so zu manipulieren,
dass dieses Sprachkonzept umgangen wird und das Applet den Sicherheitsmanager,
ändern kann. Um derartige Risiken auszuschließen, wird vor dem Ausführen
auf dem lokalen Rechner geprüft, ob der Bytecode alle sicherheitsrelevanten
Sprachkonzepte erfüllt.
Um die Funktionalität von Applets zu erweitern, wurde in der Java-Version 1.1 das Prinzip der signierten Applets eingeführt. Für Applets, die von bestimmten vertrauenswürdigen Servern geladen werden, können zusätzliche Rechte vergeben werden. Um sicherzustellen, dass ein Applet wirklich von diesem Server stammt, werden alle Klassen des Applets in eine Datei verpackt, die mit einer digitalen Signatur versehen wird. Auf dem lokalen Rechner wird die Signatur des Applets geprüft und entschieden, ob ihm die festgelegten Rechte eingeräumt werden.
Theoretisch sind
den Anwendungsmöglichkeiten keine Grenzen gesetzt. Da die Sprache noch
relativ jung ist, experimentieren interessierte Programmierer oft mit einfachen
Dingen, die als "normale", "nicht-online" Software nichts
Neues wäre.
Zur Zeit finden sich verschiedenste Kategorien von integrierten Applets im WWW.
Hauptsächlich stößt man auf Animationen, wie Laufschriften,
oder Chats. Aber auch Spiele, Musik, Client/Server-Zugang, Finanzplanungs-Programme
oder Börsenapplikationen kann man beim surfen im weltweitem Netz finden.
Ein großer Vorteil von Applets gegenüber anderen interaktiven Systemen ist, dass die Internetseite nicht neu geladen werden muss, sondern einundieselbe "Seite" Informationen abrufen sowie versenden kann. Vor allem bei Chats, wie z.B. die GongFM "Baggergrube", kann man sehen, was in Java Applets steckt.
Ursprünglich wurde die Programmiersprache für die Gerätesteuerung
für Geräte mit meist langer Lebensdauer, wie Toaster, Videorecorder,
Telefone u.ä. entwickelt.
Dabei
entstand auch das Zeichentrick-Maskottchen Duke,
das die Anwender duch den virtuellen Haushalt navigierte.
1994 jedoch kam das Aus für Java, da die Vorgängersprache Oak niemand lizensieren wollte. Zu diesem Zeitpunkt jedoch entdeckte die Breite Masse sowie das Sun-Team das Internet, denn diese neue plattformunabhängige Sprache war hervorragend zur Programmierung von Web-Anwendungen geeignet. So stelltes sie diese unter dem Namen Java im Frühjahr 1995 der Internet-Gemeinde vor.
Übrigens, die häufige Darstellung von Kaffeetassen im Zusammenhang mit der Sprache erklärt sich dadurch, daß Java in den USA umgangssprachlich "Kaffee" bedeutet, der auch das Hauptexportprodukt der gleichnamigen Insel darstellt.
4. Die Programmiersprache Java
Java ist sehr stark an C++ angelehnt, hat aber Besonderheiten, die es für die Anwendung im WWW besonders auszeichnen sollen. Am leichtesten werden es ProgrammiererInnen haben, denen die Syntax von C++ geläufig ist. Für alle NichtprogrammiererInnen ist Java genauso leicht oder schwer zu erlernen wie jede andere höhere Programmiersprache, auch wenn Sun behauptet, Java sei besonders einfach.
Objektorientiert
In Java geschriebene Programme benutzen Objekte. Objekte werden in zwei Bestandteile unterteilt, Datenelemente und die dazugehörigen Funkionen (Methoden). Inhalte von Datenelementen repräsentieren den Zustand, in dem ein Objekt sich gerade befindet. Funktionen sind Operationen, die ein Datenobjekt von einem Zustand in einen anderen versetzen. Die Gesamtheit von Objekten mit gleichen Eigenschaften wird als Klasse bezeichnet. Objektorientiertes Programmieren ist die Zusammenstellung von Klassenbeschreibungen, d.h. die Beschreibung der Datenelemente, die jedes Objekt der Klasse enthält, sowie der Funktionen, die auf jedes Objekt der Klasse anwendbar sind. Diese sind z.B. im Rahmen eines größeren Programmpaketes wiederverwendbar. Somit kann man sich im Laufe der Zeit eine umfangreiche Bibliothek (Klassenbibliothek) verschiedener Objekte anlegen. Ein Satz Bibliotheken für Standardaufgaben (wie z.B. Ein/Ausgabe oder Graphik) wird zur Sprache mitgeliefert.
Plattformunabhängigkeit
Die Plattformunabhängigkeit/Architekturneutralität ergibt sich aus der Tatsache, daß Java-Programme zunächst in neutralen Byte-Code kompiliert werden. Byte-Codes ähneln Maschinenbefehlen, sind jedoch nicht für eine bestimmte Maschine spezifisch. Die Quellcodes in Java werden zu Dateien vom Typ .class kompiliert, die das Programm in Bytecode enthalten. Die Bytecodes können nun auf jeder Plattform, die Java unterstützt, durch die Java Virtual Machine laufen. Sie werden quasi beim Starten interpretiert und ausgeführt.
Multithreading
Threads sind parallele Aktionen, die ein Programm gleichzeitig ausführen kann. Das heißt, ein Thread kann eine Berechnung durchführen, wobei gleichzeitig ein anderes Thread eine Benutzerinteraktion ermöglicht. Es gibt also weniger Wartezeiten. Java hat leicht benutzbare Synchronisationseigenschaften, die die Schwierigkeiten der Programmierung solcher Umgebungen einfacher machen sollen.
Sicher und robust
Java-Programme können vor der Ausführung verifiziert werden, da sie keine Zeiger haben und in Bytecode vorliegen. Die Verifizierung wird von Web-Browsern benutzt, um sicherzustellen, daß keine Viren enthalten sind. Java verwendet nicht Adressen aus Zahlen, sondern Namen für Funktionen und Methoden, die leicht überprüft werden können. So kann kein Java-Applet etwas ausführen oder auf etwas zugreifen, was nicht ausdrücklich im Verifizierungsprozess definiert worden ist. Dadurch, daß jeder Speicherzugriff geprüft wird, kommt es nicht zu Computerabstürzen.
Garbage Collector
Wird ein Speicherbereich des Rechners nicht mehr benötigt, muß ein Programmierer, der in C oder C++ (und vielen anderen Sprachen) programmiert, darauf achten, daß das Programm ihn zur Neubenutzung wieder freigibt. Diese Speicherverwaltung erfordert große Genauigkeit. Bei Java erledigt dies ein eingebautes Programm, der Garbage Collector, das den Speicher scannt und nicht mehr gebrauchte Speicherbereiche wieder freigibt.
Auf die Syntax von Java kann hier nicht näher eingegangen werden. Ausführliche
Erläuterungen dazu findet man unter http://wwwswt.informatik.../Vortrag03/.
Als exemplarisches Beispiel hier nur das obligatorische "Hello world"
Programm.
1:
/*
2: *Datei: Helloworld.Java
3: */
4: public class Helloworld{
5 : public static void main (String args[]){
6 : System.out.println("Hello world!");
7 : }
8 : }
Erklärung:
Zeile 1-3: Kommentar
Zeile 4: Deklaration der Klasse, der Compiler übernimmt den Namen "HelloWorld"
(und nennt das Programm helloworld.class)
Zeile 6:Aufruf der Methode / Funktion main:
main heißt: diese Klasse hat eine Methode, und die "oberste"
Methode heißt wie bei "C" main ()
public heißt: die Methode kann von überall aufgerufen werden
static heißt: alle Instanzen der Klasse sind inbegriffen
void heißt: das die Methode keinen Wert zurückgibt
Das Argument ist
eine Zeichenkette (String) namens args
Zeile 8: Die Bildschirmausgabe "HelloWorld" erfolgt durch den Befehl
println, der zu der Klasse out gehört, die Teil des System-Objekts ist.
Der Befehl beinhaltet eine Zeilenschaltung.
Kompilierung:
Der Quellcode heißt hier Helloworld.Java. Wird er mit dem Java-Compiler
bzw. mit dem Befehl javac kompiliert, wird eine Datei mit dem Namen Helloworld.class
erzeugt, die jetzt auf allen Plattformen mit Java-Interpreter die Bildschirmausgabe
"Hello world!" erscheinen läßt.
4.1 Grundlegende Sprachelemente
In der Sprache Java gibt es so genannte Schleifen, die essentiell wichtig sind, um ein funktionierendes Programm zu erstellen. Der Aufbau dieser Schleifen ist fast in jeder Programmiersprache gleich. Hier die wichtigsten:
Die if-Anweisung hat zwei Formen:
if ( Bedingung* ) Anweisung1
if ( Bedingung ) Anweisung1 else Anweisung2
Falls die Bedingung erfüllt (true) ist, wird Anweisung1 ausgeführt. Andernfalls wird bei der zweiten Form Anweisung2 ausgeführt.
*) Eine Bedingung ist vom Wert boolean. Das bedeutet sie kann nur wahr (true) oder falsch (false) sein. Mögliche Bedingungen sind:
if ( 10 > 5 ) Anweisung1
if ( t >= 6) Anweisung1
if ( t == 10*) Anweisung1
*) Der Vergleichsoperator für Bedingungen ist ==, da der Operator = schon für die Zuweisung verbraucht ist (z.B. t = 10).
Wenn mehrere Anweisungen ausgeführt werden sollen, werden diese mit geschweiften Klammern vom Rest des Quellcodes abgegrentzt:
if
( Bedingung ){
Anweisung1
Anweisung2
Anweisung3
} else Anweisung4
Die while-Schleife hat die Form:
while ( Bedingung ) Anweisung
Die Anweisung (der Schleifenrumpf) wird solange wiederholt, bis die Bedingung nicht mehr erfüllt ist.
Beispiel:
t
= 0;
while ( t < 10 )
t++; *
*) t++; ist eine Abkürzung für t = t + 1; - Programmierer sind faul ;-)
Die for-Schleife hat die Form:
for ( Initialisierung; Bedingung; Ausdruck ) Anweisung
Erklärung der Einzelteile am Beispiel:
for( t= 0; t < 10; t++; ){ }
Diese for-Schleife ohne Anweisung entspricht im Grunde der oben genannten While-Schleife.
5. Das Taschenrechnerapplet "Techno"
Das Applet ermöglicht das Verschieben sowie das normale Bedienen des Rechners. Die ausführliche Beschreibung wie die einzelnen Programmteile funktionieren kann dem Quelltext (www.ichdertom.de/Java/Techno.Java) entnommen werden bzw. durch aufmerksames Folgen des Vortrags ;-)
Hier vorab der allgemeine Aufbau ohne Kommentare:
import Java.awt.*;
import Java.awt.event.*;
import Java.applet.*;
import Java.io.*;
import Java.math.*;
import Java.text.*;
public class Techno extends Applet implements MouseListener, MouseMotionListener,
ActionListener{
public void init() {}
public void actionPerformed(ActionEvent e) { }
public void mouseClicked(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseDragged(MouseEvent e) { }
public void mouseMoved(MouseEvent e){ }
public boolean titell(String value, MouseEvent e){ }
public void paint(Graphics g){ }
public void rechne(String value,char type){ }
public void param(boolean operator_pressed,boolean point_pressed,boolean
zahl_pressed){ }
public void rechne2(){ }
}
Wenn man noch keine Erfahrung mit Java gemacht hat, ist dieser Code natürlich nicht besonders aufschlussreich, deshalb folgt hier der komplette Quelltext mit detaillierten Kommentaren (www.ichdertom.de/Java/Techno.Java).
Es ist empfehlenswert, diesen mit einem der weitverbreiteten Javaeditoren zu öffnen, der den Quelltext und seine Elemente einfärbt und so hilft, diesen zu verstehen (z.B. JCreator).
Bei Interesse ist auch der Besuch der Seite www.selfjava.de zu empfehlen.
Hier nun der fertige Taschenrechner.
Intranetprogrammierung mit Java (Siemens Technik Akademie, Peter Loos).
Diverse andere kleinere Datenquellen, durch die man oft das fehlende Puzzlestück
zur Lösung eines Problems erst fand: http://www.google.de.
IRC, #Java (Internet Relay Chat Channel #Java).