2 Folien/Seite

Werbung
7. Architektur interaktiver Systeme
7.1 Entkopplung durch Sichten
7.2 Ereignisgesteuerter Programmablauf
7.3 Benutzungsoberflächen
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie
7. Architektur interaktiver Systeme
7.1 Entkopplung durch Sichten
'The
'Thenight
nightist
istfine',
fine',the
theWalrus
Walrussaid,
said,
'Do
'Doyou
youadmire
admirethe
theview?'
view?'
Lewis
LewisCarroll
Carroll
Technische Universität Dresden
Prof. Hußmann
Seite 1
Softwaretechnologie
Schichtenarchitektur
Window
Benutzungsoberfläche
Menu
Button
Teammitglied
(Fachliches) Modell
Teambesprechung
Ablaufsteuerung
z.B. relationale Datenbank
Datenhaltung
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie
Sichten: Motivierendes Beispiel
Sicht 1
Sicht 2
cf: CounterFrame
Counter
c: Counter
– ctr
value = 7
+ count()
+ reset()
+ getValue()
Modell
Technische Universität Dresden
Prof. Hußmann
Seite 2
Softwaretechnologie
Modell und Sicht
Sicht 1
Methodenaufrufe
=> Änderungen
Sicht 2
Benachrichtigung
über Änderungen
Modell
Beispiele:
Verschiedene Dokumentenansichten, Statusanzeigen,
Verfügbarkeit von Menüpunkten
Frage:
Wie hält man das Modell unabhängig von den einzelnen
Sichten darauf ?
Muster "Observer"
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie
Ein Zähler (Beispiel fachliches Modell)
class Counter
private int ctr = 0;
public void count () {
ctr++;
{
}
public void reset () {
ctr = 0;
}
public int getValue () {
return ctr;
}
}
Technische Universität Dresden
Prof. Hußmann
Seite 3
Softwaretechnologie
Beobachtbares Modell (Model)
class Counter extends Observable {
private int ctr = 0;
public void count () {
ctr++;
setChanged();
notifyObservers();
}
public void reset () {
ctr = 0;
setChanged();
notifyObservers();
}
public int getValue () {
return ctr;
}
}
• Das fachliche Modell enthält keinerlei Bezug auf die
Benutzungsoberfläche !
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie
7. Architektur interaktiver Systeme
7.2 Ereignisgesteuerter Programmablauf
IIclaim
claimnot
notto
tohave
havecontrolled
controlledevents,
events,
but
butconfess
confessplainly
plainlythat
thatevents
eventshave
havecontrolled
controlledme.
me.
Abraham
AbrahamLincoln,
Lincoln,1864
1864
Technische Universität Dresden
Prof. Hußmann
Seite 4
Softwaretechnologie
Ereignisse
• Definition Ein Ereignis ist ein Vorgang in der Umwelt des
Softwaresystems von vernachlässigbarer Dauer, der für das
System von Bedeutung ist.
Eine wichtige Gruppe von Ereignissen sind Benutzerinteraktionen.
• Beispiele für Benutzerinteraktions-Ereignisse:
–
–
–
–
–
–
–
–
Drücken eines Knopfs
Auswahl eines Menüpunkts
Verändern von Text
Zeigen auf ein Gebiet
Schließen eines Fensters
Verbergen eines Fensters
Drücken einer Taste
Mausklick
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie
Beispiel für Ereignisverarbeitung
• Das erste Java-Programm in der Vorlesung mit einer
"graphischen Benutzungsoberfläche"...
– Hinweis "für Java-Insider": Hier noch reines "AWT", im nächsten
Kapitel wird "Swing" eingeführt werden.
• Aufgabe: Ein leeres, aber schliessbares Fenster anzeigen
Schliessknopf
(Fenster geschlossen,
Programm beendet)
Hinweis: Fensterdarstellung ("look and feel") gemäß Solaris CDE;
Schliessknopf in Windows-Darstellung:
Technische Universität Dresden
Prof. Hußmann
Seite 5
Softwaretechnologie
Ereignis-Klassen
• Klassen von Ereignissen in (Java-)Benutzungsoberflächen:
–
–
–
–
WindowEvent
ActionEvent
MouseEvent
KeyEvent, ...
• Bezogen auf Klassen für Oberflächenelemente (siehe Kapitel 7.3):
–
–
–
–
Window
Frame
Button
TextField, ...
• Zuordnung (Beispiele):
– Window (mit Frame) erzeugt WindowEvent
» z.B. Betätigung des Schliessknopfes
– Button erzeugt ActionEvent
» bei Betätigung des Knopfes
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie
Hauptprogramm für Fensteranzeige
import java.awt.*;
class ExampleFrame extends Frame {
public ExampleFrame () {
setTitle("untitled");
setSize(150, 50);
setVisible(true);
}
}
class GUI1 {
public static void main (String[] argv) {
ExampleFrame f = new ExampleFrame();
}
}
Technische Universität Dresden
Prof. Hußmann
Seite 6
Softwaretechnologie
Registrierung für Listener
• In java.awt.Frame (ererbt von java.awt.Window):
public class Frame ... {
public void addWindowListener
(WindowListener l)
}
• java.awt.event.WindowListener ist eine Schnittstelle:
public interface WindowListener {
... Methoden zur Ereignisbehandlung
}
• Vergleich mit Observer-Muster:
– Frame bietet einen "Observable"-Mechanismus
– Window-Listener ist eine "Observer"-Schnittstelle
Technische Universität Dresden
Prof. Hußmann
Softwaretechnologie
Hauptprogramm für schließbares Fenster
import java.awt.*;
import java.awt.event.*;
class WindowCloser implements WindowListener {
... siehe später ...
}
class ExampleFrame extends Frame {
public ExampleFrame () {
setTitle("untitled");
setSize(150, 50);
addWindowListener(new WindowCloser());
setVisible(true);
}
}
class GUI2 {
public static void main (String[] argv) {
ExampleFrame f = new ExampleFrame();}
}
Technische Universität Dresden
Prof. Hußmann
Seite 7
Softwaretechnologie
Herunterladen