33
Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität Oldenburg Vorlesung 15 Dietrich Boles

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Embed Size (px)

Citation preview

Page 1: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 1

Programmierkurs Java

Vorlesung

im WS 1998/1999

am FB Informatik

der Universität Oldenburg

Vorlesung 15

Dietrich Boles

Page 2: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 2

Gliederung von Vorlesung 15

• Ein-/Ausgabe

• Threads

• GUI-Programmierung

• Applets

• Client-Server-Programmierung

• RMI

• Java-Beans

Page 3: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 3

Ein-/Ausgabe in Java

• JDK: package java.io;• basiert auf dem Konzept der Datenströme

Datenquelle Filter Datensenke

Eingabe-Datenstrom

Ausgabe-Datenstrom

Folge von Daten

TerminalDateiZeichenketteSocket...

...

Page 4: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 4

Ein-/Ausgabe in Java

• Unmenge an unterschiedlichen Klassen

• Wichtige Klassen:– InputStream (abstrakt)– OutputStream (abstrakt)– DataInputStream– BufferedReader– InputStreamReader– DataOutputStream– PrintStream

• Wichtige Variablen:– System.err (PrintStream)– System.in (InputStream)– System.out (PrintStream)

Page 5: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 5

Ein-/Ausgabe in Java / Beispiel 1

Eingabe von Tastatur / Ausgabe auf Bildschirm:

import java.io.*;public class TerminalIOTest { public static void main(String[] args) { BufferedReader in = null; try { in = new BufferedReader( new InputStreamReader(System.in)); String eingabe = new String(); do { System.out.print("Zahl eingeben: \n"); eingabe = in.readLine(); int zahl = Integer.parseInt(eingabe); System.out.println("danke: " + zahl); } while ((eingabe != null) && (eingabe.length() > 0)); }

Page 6: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 6

Ein-/Ausgabe in Java / Beispiel 1

catch (IOException exc) {

System.err.println("Ein-/Ausgabefehler: " + exc);

}

catch (NumberFormatException exc) {

System.err.println("Ein-/Ausgabefehler: " + exc);

}

finally {

try {

if (in != null) in.close();

} catch (IOException exc) {}

}

}

}

Page 7: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 7

Ein-/Ausgabe in Java / Beispiel 2

Eingabe aus Datei:

import java.io.*;

public class FileIOTest {

public static void main(String[] args) {

BufferedReader in = null;

try {

in = new BufferedReader(

new FileReader("eingabe.dat"));

String eingabe = null;

while ((eingabe = in.readLine()) != null) {

System.out.println(eingabe);

}

}

catch (...) // wie in Beispiel 1

...

Page 8: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 8

Thread

• Ein Java-Programm mit mehreren Kontrollflüssen (Threads) aber einem

Adreßraum

• zu jeder Zeit ist genau ein Kontrollfluß aktiv

• das Java-Laufzeitsystem steuert, welcher Thread aktiv ist und wann ein

Threadwechsel eingeleitet wird

• es gibt jedoch auch Steuerungsmethoden für den Programmierer

• Klasse: java.lang.Thread

• Probleme:

– Synchronisation mehrerer Threads

– Kommunikation mehrerer Thread untereinander

– Prozessorzuteilung

– Verklemmungen (Deadlocks)

– ...

Page 9: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 9

Threads / Beispiel 1

2 Threads:

public class PingPong extends Thread {

String word; int delay;

public PingPong(String text, int delay) {

this.word = text; this.delay = delay;

}

public void run() {

try {

while (true) {

System.out.print(this.word + " ");

sleep(delay); // warten

}

} catch (InterruptedException exc) {

System.err.println("Interruption: " + exc); return;

} }

Page 10: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 10

Threads / Beispiel 1

public static void main(String[] args) {

new PingPong("ping", 33).start(); // 1/30 Sek.

new PingPong("PONG", 100).start(); // 1/10 Sek.

}

}

Ausgabe (nicht deterministisch):

ping PONG ping ping PONG ping ping ping PONG ping ...

Page 11: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 11

Threads / Beispiel 2

Synchronisation:

import java.util.*;

class Konto {

private double kontostand;

public Konto(double init) {

this.kontostand = init;

}

public synchronized double getKontostand() {

return this.kontostand;

}

public synchronized void einzahlen(double betrag) {

this.kontostand = this.kontostand + betrag;

// ! Problem: hier Threadwechsel

}

}

Page 12: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 12

Threads / Beispiel 2

public class Sparer extends Thread {

Konto konto;

public Sparer(Konto konto) { this.konto = konto; }

public void run() {

try {

while (true) {

this.konto.einzahlen(new Random().nextDouble()*1000);

System.out.println(this.konto.getKontostand());

sleep((long)this.konto.getKontostand()); // warten

}

} catch (InterruptedException exc) {

System.err.println("Interruption: " + exc);

return;

}

}

Page 13: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 13

Threads / Beispiel 2

public static void main(String[] args) {

Konto konto = new Konto(1000);

// beide Sparer haben ein gemeinsames Konto

new Sparer(konto).start();

new Sparer(konto).start();

}

/* A B K

-----------------

1000

+500

+500

1500 (?)

*/

}

Page 14: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 14

Threads / Beispiel 3

Thread-Kommunikation:import java.util.*;class Stack { Object[] table; int actual = -1; public Stack(int size) { this.table = new Object[size]; } public synchronized void push(Object elem) { if (actual < (this.table.length-1)) { this.table[++this.actual] = elem; notifyAll(); // wartende Threads informieren } } public synchronized Object pop() { try { while (actual < 0) { wait(); // Warten auf ein Element } return this.table[this.actual--]; } catch (InterruptedException exc) { return null; }} }

Page 15: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 15

Threads / Beispiel 3

class Chef extends Thread {

Stack akten_haufen;

public Chef(Stack haufen) { this.akten_haufen = haufen; }

public void run() {

try {

int nummer = 1;

while (true) {

String akte = ("Akte " + nummer++);

this.akten_haufen.push(akte);

System.out.println("Chef: " + akte);

sleep((long)(new Random().nextDouble()*1000));

// neue Akte erzeugen

}

} catch (InterruptedException exc) {

System.err.println("Chef interrupted: " + exc);

return;

} } }

Page 16: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 16

Threads / Beispiel 3

class Knecht extends Thread {

Stack akten_haufen; int fleiss;

public Knecht(Stack haufen, int fleiss) {

this.akten_haufen = haufen; this.fleiss = fleiss;

}

public void run() {

try {

while (true) {

String akte = (String)this.akten_haufen.pop();

System.out.println("Knecht " + fleiss + ": " + akte);

sleep((long)(fleiss*new Random().nextDouble()*100));

// Akten bearbeiten

}

} catch (InterruptedException exc) {

System.err.println("Chef interrupted: " + exc);

return;

} } }

Page 17: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 17

Threads / Beispiel 3

public class Betrieb {

public static void main(String[] args) {

Stack akten_haufen = new Stack(10);

// ein Chef und zwei Knechte teilen sich den Aktenhaufen

new Chef(akten_haufen).start();

new Knecht(akten_haufen, 1).start(); // fleissig

new Knecht(akten_haufen, 9).start(); // faul

} }

Ausgabe (nicht deterministisch):Chef: Akte 1Knecht 1: Akte 1Chef: Akte 2Knecht 1: Akte 2Chef: Akte 3Knecht 2: Akte 3...

Page 18: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 18

GUI-Programmierung

• Graphische Benutzeroberflächen (GUI)

• JDK: package java.awt; + Unterpackages (Abstract Window Toolkit)

• JDK 1.0, JDK 1.1: unterschiedliche Klassen und Eventbehandlung

• JDK 1.2: SWING (komfortable GUI-Klassen)

• umfaßt mehrere Kategorien:

– graphische Elemente: Bilder, Polygone, Farben, Fonts, ...

– UI-Komponenten (Component): Buttons, Menüs, Texteingabefelder, ...

– Behälter-Klassen (Container): Windows, Canvases, Dialogboxen, ...

– Layout-Manager: Kontrolle der räumlichen Anordnung

– Event-Behandlung: Mouse-Events, Keyboard-Events, Aktionsevents, ...

• Andere Art der Programmierung: invertierte Programmierung

Page 19: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 19

GUI-Programmierung / Beispiel 1

Einfachstes Programm:

import java.awt.*;

public class WindowTest extends Frame {

public static void main(String[] args) {

WindowTest win = new WindowTest("Test");

win.setSize(300, 100);

win.show();

// ab hier arbeitet der EventManger des AWT

}

public WindowTest(String title) {

super(title);

add(new Label("Start"));

} }

Test

Start

Page 20: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 20

GUI-Programmierung / Beispiel 2

Event-Behandlung:

import java.awt.*;

import java.awt.event.*;

class ButtonListener implements ActionListener {

Button button;

public ButtonListener(Button button) {

this.button = button;

}

public void actionPerformed(ActionEvent event) {

if (this.button.getLabel().equals("Start"))

this.button.setLabel("Stop");

else

this.button.setLabel("Start");

} }

Event-Test

Start

Page 21: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 21

GUI-Programmierung / Beispiel 2

public class EventTest extends Frame { public static void main(String[] args) { EventTest win = new EventTest(“Event-Test"); win.setSize(300, 100); win.show(); // ab hier arbeitet der EventManger des AWT } Button button; public EventTest(String title) { super(title); this.button = new Button("Start"); add(this.button, "Center"); // Layout-Manager button.addActionListener(new ButtonListener(button)); addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent event) { dispose(); System.exit(0); } } );} }

Page 22: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 22

Applets

• Applets: Java-Programme, die in einem WWW-Browser ausgeführt werden

können

• JDK: package java.applet;

• basiert sehr stark auf dem AWT

• Tool: appletviewer

• Datei: Uhr.html

• Aufruf: appletviewer name.html oder in WWW-Browser laden <HTML> <HEAD> <TITLE> Name </TITLE> </HEAD>

<BODY>

<H3> Aktuelle Uhrzeit </H3>

<APPLET code=“<name>.class“ width=100 height=100>

</APPLET>

</BODY>

</HTML>

Page 23: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 23

Applets / Beispiel 1

import java.awt.*; import java.applet.*;public class TestApplet extends Applet { private Label label; // wird beim ersten Start aufgerufen (load/reload) public void init() { System.out.println("init()"); } // wird nach init aufgerufen sowie beim erneuten // Besuch einer WWW-Seite public void start() { System.out.println("start()"); this.label = new Label(“Test-Label"); this.add(this.label); } // wird beim Stoppen aufgerufen sowie beim Verlassen // einer WWW-Seite public void stop() { System.out.println("stop()"); this.remove(this.label); } // wird nur beim "Zerstoeren" nach stop aufgerufen public void destroy() { System.out.println("destroy()"); }}

Netscape: Title

Test-Label

Page 24: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 24

Applets / Beispiel 2

import java.awt.*;

import java.applet.*;

import java.util.*;

public class Uhr extends Applet implements Runnable {

protected Thread uhr = null;

public void start() {

if (uhr == null) {

uhr = new Thread(this); uhr.start();

} }

public void stop() { uhr.stop(); uhr = null; }

public void run() {

while (uhr != null) {

repaint();

try { uhr.sleep(1000); } catch(Exception e){}

}

}

Page 25: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 25

Applets / Beispiel 2

public void paint(Graphics g) { // Applet-"main"

Date jetzt = new Date();

String str = jetzt.getHours() + ":" +

jetzt.getMinutes() + ":" +

jetzt.getSeconds();

g.drawString(str, 25, 20);

} }

<HTML> <HEAD> <TITLE> Uhr </TITLE> </HEAD>

<BODY>

<H3> Aktuelle Uhrzeit </H3>

<APPLET code=“<name>.class“ width=200 height=100>

</APPLET>

</BODY>

</HTML>

Netscape: Uhr

16:47:39

Aktuelle Uhrzeit

Page 26: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 26

Windows + Applets

import java.awt.*;

import java.applet.*;

public class TestWindowApplet extends Applet {

private Label label;

public static void main(String[] args) {

TestWindow win = new TestWindow("Test-Window");

win.setSize(300, 100);

win.show();

}

public void start() {

this.label = new Label(“Test-Label");

this.add(this.label);

}

public void stop() { this.remove(this.label); }

}

Page 27: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 27

Windows + Applets

class TestWindow extends Frame {

public TestWindow(String title) {

super(title);

TestWindowApplet applet = new TestWindowApplet();

applet.start();

add(applet, "Center");

}

}

java TestWindowApplet über HTML-Seite

in Netscape ladenTest-Window

Test-Label

Netscape: Title

Test-Label

Page 28: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 28

Client-Server Programmierung

• Client-Server-Programme: Programme, die auf unterschiedlichen Rechner

laufen (können) und miteinander kommunizieren

• JDK: package java.net;

• charakteristisch:

– mehrere Prozesse

– kein gemeinsamer Adreßraum

– Datenaustausch via Kommunikation (über Sockets)

• Server: Programm, das bestimmte Dienste mehreren ihm im allgemeinen

unbekannten Clients anbietet (bspw. Drucker)

• Client: Programm, das Server-Dienste nutzen will

Page 29: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 29

Client-Server Programmierung / Beispiel

import java.io.*; import java.net.*;

public class Server {

public static void main(String[] args) {

try {

ServerSocket ss = new ServerSocket(5555);

Socket s;

while ((s = ss.accept()) != null) {

BufferedReader in = new BufferedReader(

new InputStreamReader(s.getInputStream()));

String eingabe = null;

while ((eingabe = in.readLine()) != null) {

System.out.println(eingabe);

} } }

catch (Exception e) { System.err.println("Fehler: "+e); }

}

} // liest Daten von Clients und gibt sie aus

Page 30: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 30

Client-Server Programmierung / Beispiel

import java.io.*;

import java.net.*;

public class Client {

public static void main(String[] args) {

try {

Socket s = new Socket(“jeddeloh", 5555);

PrintWriter sout =

new PrintWriter(s.getOutputStream());

for (int i=0; i<args.length; i++) {

sout.println(args[i]);

sout.flush();

}

} catch (Exception e) {System.err.println("Fehler: "+e);}

}

} // schickt Argumente zum Server

Page 31: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 31

Remote Method Invocation (RMI)

• Motivation: Alternative zur Realisierung von Client-Server-Programmen

• Idee:

– Aufruf von Methoden von Objekten, die auf anderen Rechnern laufen

– Datenaustausch via Parameter und Rückgabewerten

– ähnlicher Ansatz: CORBA (sprachunabhängig)

• zusätzliche Werkzeuge erforderlich: JDK-package, Compiler, Broker

Rechner A Rechner B

ClientServer

Turn t = spieler.nextTurn(); nextTurn();

spieler

Page 32: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 32

Java Beans

• Technologie für Software-Komponenten

• Ziel: Programme (Komponenten) schreiben, die überall laufen und überall

wiederverwendet werden können

• in Java: Komponenten (Beans) = spezielle Objekte

• Konkurrenz: ActiveX von Microsoft

• Motivation: Anwendungsprogrammierer holt sich benötigte (binäre!) Beans

und verknüpft sie (u.U. mit graphischen Hilfsmitteln) zu einem

Gesamtprogramm (Container)

• Beispiele für Beans:

– Buttons – Rechtschreibprüfung

– Scrollbars – Textverarbeitung

– Zeitgeber – ...

Page 33: Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität

Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99 Seite 33

Java Beans

• Bean Development Kit (BDK):

– package java.beans;

– Bean-Beispiele

– einfacher graphisch-interaktiver Test-Container (BeanBox)

– komplette Sourcen

– Dokumentation

• besondere Merkmale / Eigenschaften / Dienste:

– Verwaltung von Eigenschaften (Properties = besondere Attribute)

– Introspektion (Zugriff auf Struktur von Komponenten)

– Ereignisbehandlung

– Persistenz (dauerhaftes Abspeichern von Objektzuständen)

– Unterstützung für die Anwendungsentwicklung (Entwicklungswerkzeuge)