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