Donnerstag 08 Mai 2003

Schuljahr 2002/2003
Fachreferat in Technologie
Referent: Kagerer, Thomas B12Ta
Fachlehrer: Herr Eckl

Die Programmiersprache Java am Beispiel Java Applet duke

 

Inhalt:

1. Was ist Java?

2. Was sind Java-Applets

2.1 Das Sandbox-Prinzip.

Bytecode

Signierte Applets

2.2 Was können Applets?

3. Die Geschichte von Java.

4. Die Programmiersprache Java

Die Eigenschaften

Ein Beispielprogramm

4.1 Grundlegende Sprachelemente

Die if-Anweisung

Die while-Schleife

Die for-Schleife

5. Das Taschenrechnerapplet "Techno"

Der komplette, detaillierte Quelltext

6. Quellen


Dieses Dokument zusammengefasst im Thesenpapier (Word-Dokument)


1. Was ist Java?

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.

zur¨ck

2. Was sind Java-Applets?

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.

zur¨ck

2.1 Das Sandbox-Prinzip.

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

Bytecode

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.

Signierte Applets

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.

zur¨ck

2.2 Was können Applets?

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.

zur¨ck

3. Die Geschichte von Java


Ursprünglich wurde die Programmiersprache für die Gerätesteuerung für Geräte mit meist langer Lebensdauer, wie Toaster, Videorecorder, Telefone u.ä. entwickelt.

dukeDabei 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.

zur¨ck

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.


Die Eigenschaften


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.

Ein Beispielprogramm


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.

zur¨ck

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

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

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

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.

zur¨ck

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.

zur¨ck

6. Quellen

Intranetprogrammierung mit Java (Siemens Technik Akademie, Peter Loos).

http://www.selfjava.de.

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).

zur¨ck

 

Valid HTML 4.01!