20-2_wanzen

Werbung
Wie überwacht man Objekte im
"Alltag" ?
Indem man "Wanzen" an diese
anbringt.
Beispiel:
Überwachung eines
Kaufhauses, um einen Brand
oder einen Einbruch zu
verhindern. Die Wanze hat z.B.
zwei verschiedene Funktionen
integriert:
- Rauchmelder
- Bewegungsmelder
Feuerwehr
löst Aktion
aus
Rauchmelder
Polizei
löst Aktion
aus
Bewegungsmelder
Wanze, besteht aus:
Es gibt auch noch andere
Wanzen.
Beispiel:
Überwachung eines an einem
- zu Kühlzwecken- Fluss
liegenden AKWs, um Schäden
(die statistisch pro Urknall nur
zu 0,000000001 %
vorkommen) von der
Bevölkerung "abzuwenden".
Die Wanze hat z.B. drei
verschiedene Funktionen
- GAU-Melder
- Sabotage-Melder
- Niedrigwasser-Melder
Polizei
Abschaltung
Evakuierung
löst Aktion
aus
SabotageMelder
löst Aktion
aus
löst Aktion
aus
Niedrigwasser- GAUMelder
Melder
Wanze, besteht aus:
Wanzen in Java
1. Beispiel:
An eine Schaltfläche (Button)
wird eine Wanze angebracht.
Diese überwacht, ob vom
Anwender eine spezielle Aktion
ausgeführt wird:
d.h. ob der Button "angeklickt"
bzw. die Leertaste gedrückt
wird oder ...
… die Maus den Button
"betritt" bzw. den Button
"verlässt".
Wenn die Aktion ausgeführt
wird, wird automatisch ein
spezielles Objekt erzeugt bzw.
"geworfen".
Dieses spezielle Objekt wird
dann einer speziellen Methode
der Wanze übergeben (von
dieser Methode mit einem
"Fischernetz eingefangen").
Anschaulich illustriert in der
nächsten Folie …
entsprechende
Meldung auf BS entsprechende
Meldung auf BS
entsprechende
Meldung auf BS
löst Aktion
aus, z.B:
Button
betreten
löst Aktion
aus, z.B:
Button
verlassen
löst Aktion
aus, z.B:
Button
anklicken
Wanze, besteht u.a. aus folgenden
(Überwachungs)Methoden
Zeitlicher Verlauf könnte z.B.
so aussehen:
Button anklicken : dadurch wird automatisch ein
spezielles Objekt erzeugt (geworfen)
Dieses Objekt wird automatisch einer speziellen Methode der
Wanze übergeben, die dann automatisch ausgeführt wird.
Button anklicken : dadurch wird automatisch ein
spezielles Objekt erzeugt (geworfen)
Dieses Objekt wird automatisch einer speziellen Methode der
Wanze übergeben, die dann automatisch ausgeführt wird.
…
Zeitlicher Verlauf : von oben nach unten
zugehöriges, einfaches DemoBeispiel in Java
Im folgenden Demo-Programm
wird kein Wert auf Design
gelegt.
Es soll nur das Prinzip eines
Listeners verstanden werden.
package listener1;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MainListener1 {
public static void main(String[] args) {
Fenster fenster;
fenster = new Fenster();
}
}
class Fenster extends javax.swing.JFrame{
public Fenster(){
anbringen der Wanze bal
JButton button;
an den Button "button",
Container mycont;
ButtonActionListener bal;
der beim Klicken feuert.
button = new JButton("klick mich");
bal = new ButtonActionListener();
mycont = getContentPane();
add(button);
button.addActionListener(bal);
this.setSize(500, 500);
this.setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
einfangende
}
Methode
class ButtonActionListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
System.out.println("es wurde gefeuert ");
}
}
2. Beispiel:
Ein Timer (Uhr) feuert in
periodischen (z.B. 1 ms)
Abständen (d.h. er erzeugt bzw.
"wirft" ein spezielles Objekt).
An diesen Timer wird eine
Wanze angebracht. Diese
überwacht, wann der Timer
feuert.
Wenn er feuert, wird
automatisch dieses spezielle
Objekt einer speziellen
Methode übergeben (von dieser
Methode "eingefangen").
Zeitlicher Verlauf könnte z.B.
so aussehen:
Timer feuert : dadurch wird automatisch ein spezielles
Objekt erzeugt (geworfen)
Dieses Objekt wird automatisch einer speziellen Methode der
Wanze übergeben, die dann automatisch ausgeführt wird.
Timer feuert : dadurch wird automatisch ein spezielles
Objekt erzeugt (geworfen)
Dieses Objekt wird automatisch einer speziellen Methode der
Wanze übergeben, die dann automatisch ausgeführt wird.
…
Zeitlicher Verlauf : von oben nach unten
zugehöriges, einfaches DemoBeispiel in Java
Im folgenden Demo-Programm
wird kein Wert auf Design
gelegt.
Es soll nur das Prinzip eines
Listeners verstanden werden.
package listener3;
anbringen der Wanze tal
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; an den Timer "timer",
import javax.swing.Timer;
der periodisch alle 2000
ms feuert
public class MainListener3 {
public static void main(String[] args) {
Timer timer;
TimerActionListener tal;
tal = new TimerActionListener();
timer = new Timer(2000,tal);
timer.start();
// Endlosschleife
while(true)
;
}
}
einfangende
Methode
class TimerActionListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
System.out.println("x");
}
}
3. Beispiel:
An ein Objekt (z.B. eine
Zielperson) wird eine Wanze
angebracht ("sie wird von
einem Detektiv überwacht").
Diese überwacht, ob das Objekt
(besser Attribute des Objekts
wie z.B. eine Zahl) verändert
wird.
Wenn etwas verändert wird,
wird automatisch ein spezielles
Objekt erzeugt bzw.
"geworfen".
Dieses spezielle Objekt wird
dann einer speziellen Methode
übergeben (von dieser Methode
"eingefangen").
Wenn er feuert, wird
automatisch dieses spezielle
Objekt einer speziellen
Methode übergeben (von dieser
Methode "eingefangen").
Zeitlicher Verlauf könnte z.B.
so aussehen:
Objekt wird geändert : dadurch wird automatisch ein
spezielles Objekt erzeugt (geworfen)
Dieses Objekt wird automatisch einer speziellen Methode der
Wanze übergeben, die dann automatisch ausgeführt wird.
Objekt wird geändert : dadurch wird automatisch ein
spezielles Objekt erzeugt (geworfen)
Dieses Objekt wird automatisch einer speziellen Methode der
Wanze übergeben, die dann automatisch ausgeführt wird.
…
Zeitlicher Verlauf : von oben nach unten
Hier das UML ...
Detektiv
- zielperson : Zielperson
Zielperson
- zahl : int
roter, gestrichelter geschwungener
Pfeil: zeigt vom Ereignis (fire)
zur Wanze (Lauscher)
schwarzer Pfeil: Assoziation
zugehöriges, einfaches DemoBeispiel in Java
Im folgenden Demo-Programm
wird kein Wert auf Design
gelegt.
Es soll nur das Prinzip eines
Listeners verstanden werden.
class Zielperson extends Observable{
private int zahl;
diese Methoden veranlassen, daß
gefeuert wird:
public Zielperson (){
setChanged() setzt ein
zahl=0;
}
Änderungsflag und zeigt damit an,
daß eine Änderung erfolgt ist.
public void change(){
Falls eine Änderung erfolgte, wird
zahl=zahl+1;
sie durch notifyObservers("Zahl")
setChanged();
notifyObservers("Zahl"); übermittelt.
}
Gibt es keine Änderung, dann
übermittelt notifyObservers() auch
public int getZahl(){
nichts.
return zahl;
}
}
Der Methode notifyObservers(...) kann noch ein Objekt (hier wird
implizit ein String in die Klasse Object gecastet) als Parameter
übergeben werden. Dieses kann dann vom "Detektiv" verwendet
(ausgewertet) werden.
class Zielperson extends Observable{
private int zahl;
public Zielperson (){
zahl=0;
}
Dadurch wird Zielperson wird zu
einem Ereignisauslöser gemacht,
d.h. zum Leben erweckt.
public void change(){
zahl=zahl+1;
Im Gegensatz dazu muß ein Button
setChanged();
oder ein Timer nicht zu einem
notifyObservers("Zahl"); Ereignisauslöser gemacht werden.
}
Diese können ohne weitere
Vorbereitung feuern bzw.
public int getZahl(){
return zahl;
Ereignisobjekte werfen (man
}
braucht dann nur noch eine
}
Wanze).
class Detektiv implements Observer{
private Zielperson zielperson;
public Detektiv(Zielperson ziel){
zielperson = ziel;
}
einfangende
Methode
public void update(Observable m, Object o) {
if (m == zielperson) {
System.out.print((String)o+" ");
System.out.println(zielperson.getZahl());
}
}
}
package listener2;
import java.util.Observable;
import java.util.Observer;
anbringen der Wanze
watson an das Objekt z
public class MainListener2 {
public static void main(String[] args) {
int i;
Detektiv watson;
Zielperson z;
z = new Zielperson();
watson = new Detektiv(z);
// An Zielperson den Lauscher anbringen
z.addObserver(watson);
for(i=0;i<10;i++){
z.change();
}
}
}
Herunterladen