Entwurf und Implementation interaktiver Systeme SWT GUI, A. Dittmar & P. Forbrig Rahmenmodell für interaktive Systeme (IS) presentation System with a core language performance output observation User with a task language interface input articulation (Abowd, 1991) 2 SWT GUI, A. Dittmar & P. Forbrig Interaktionsstile • • • • • • • • Kommandozeilen-Interface Menüs natürliche Sprache Frage-Antwort Dialog formularbasierter Dialog WIMP (Windows, Icons, Menus, Pointers) point and click 3D interfaces Die Art des Interaktionsstils hat einen wesentlichen Einfluß auf den Dialog zwischen Mensch und Computer... 3 SWT GUI, A. Dittmar & P. Forbrig Graphische Benutzungsschnittstellen • GUI (Graphical User Interface) • aus Perspektive eines Nutzers: Arbeit mit (unabhängigen) Interaktionsobjekten Direktmanipulation • bekannte Interaktionsobjekte (Widgets): - Window - Button - Textfelder - Scrollbar... 4 SWT GUI, A. Dittmar & P. Forbrig Entwicklungswerkzeuge für GUIs Einteilung in 3 Schichten möglich: – windowing systems – interaction toolkits – user interface management systems (UIMS) 5 SWT GUI, A. Dittmar & P. Forbrig Windowing Systems Voraussetzung für die Programmierung von GUIs: - Unabhängigkeit von spezieller Hardware (und deren Programmierung) - Management von nebenläufigen Applikationen, die sich dieselben Hardwareressourcen teilen (Eingabefokus wechseln, überlappende Fenster...) 6 SWT GUI, A. Dittmar & P. Forbrig Programmierung von Applikationen Interaktive Applikationen sind benutzer- bzw. ereignisgesteuert. Die von der Anwendung ausgeführte Aktion wird durch eine Nutzereingabe bestimmt. Paradigmen zur Organisation des Steuerflusses in einer Anwendung: read-evaluation loop notification loop • Server sendet strukturiertes Ereignis zur Applikation. • Hauptsteuerschleife für Ereignisverarbeitung nicht innerhalb der Applikation. • Zentraler Ereignismanager (notifier), der Ereignisse vom Fenstersystem filtert und die Ereignisse, für die eine Anwendung Interesse bekundet hat, an sie weiterleitet. • Anwendung führt callbacks aus, bevor Kontrolle wieder an Ereignismanager zurückgegeben wird. • Applikation liest jedes Ereignis und bestimmt eine entsprechende anwendungsspezifische Reaktion. 7 SWT GUI, A. Dittmar & P. Forbrig Read-Evaluation Loop (aus: Dix et al., 2004) repeat read-event(myevent) case myevent.type type_1: do type_1 processing type_2: do type_2 processing ... type_n: do type_n processing end case end repeat 8 SWT GUI, A. Dittmar & P. Forbrig Notification-based Paradigm void main(String[] args) { Menu menu = new Menu(); menu.setOption(“Save”); menu.setOption(“Quit”); menu.setAction(“Save”,mySave) menu.setAction(“Quit”,myQuit) ... } int mySave(Event e) { // save the current file } int myQuit(Event e) { // close down } 9 SWT GUI, A. Dittmar & P. Forbrig Toolkits Ein Toolkit liefert den Programmierern eine Menge von vorgefertigten Interaktionsobjekten (Interaktionstechniken/Widgets), die sie zur Entwicklung ihrer Anwendung nutzen können. (aus: Dix et al., 2004) Vorteile: • Interaktionsobjekte verbinden Ein- und Ausgabe, haben vordefiniertes Verhalten. • “Notification-based paradigm” wird unterstützt; Ereignisse auf höherem Abstraktionsgrad verarbeitbar. • Konsistenz und Verallgemeinerbarkeit wird durch ähnliches “look and feel” der Widgets gefördert. 10 SWT GUI, A. Dittmar & P. Forbrig GUI-Programmierung in Java • Java toolkit – AWT (abstract windowing toolkit) • Java classes for windows, buttons, menus, etc. • Notification based; – AWT 1.0 – need to subclass basic widgets – AWT 1.1 and beyond -– callback objects • Swing toolkit – built on top of AWT – higher level features – uses MVC architecture • java.awt, javax.swing 11 SWT GUI, A. Dittmar & P. Forbrig Swing-Komponenten GUI-Programmierung “passt zur” objektorientierten Programmierung: • Interaktionsobjekte (IO) als Instanzen von Klassen, • Komplexe IOs als hierarchische Kompositionen aus einfacheren IOs, • Vererbung zur Beschreibung von ähnlichen IOs. GUI-Komponenten Sichten: Container-Klassen Komponenten-Klassen • Aufnahme anderer GUI-Komponenten • Grafische Repräsentation von Interaktionsobjekten • Positionierung der aufgenommenen Komponenten mittels LayoutManager • Stellen Methoden zur Ereignisverarbeitung zur Verfügung 12 SwingKlassenhierarchie SWT GUI, A. Dittmar & P. Forbrig 13 SWT GUI, A. Dittmar & P. Forbrig Hierachische Struktur von komplexen Interaktionsobjekten Beispiel: Ursprünglich von: http://java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr/shortcourse.html 14 SWT GUI, A. Dittmar & P. Forbrig Container 1 Fenster “WS_FTP95...” Container 1 Container 2 Container 2 Cont. 11 Choice List Cont. 12 Cont. 112 Cont. 13 Button “<--” ... ... Cont. 21 TextArea Cont. 23 ... Checkbox “ASCII” ... Button “Close” Cont. 1121 Button “ChgDir” ... 15 SWT GUI, A. Dittmar & P. Forbrig Layout-Management • Bestandteil von AWT, • dient zum Anordnen von Komponenten in einem Container. • Funktionsweise: - Positionierung der Komponenten mittels qualitativer Angaben („Komponente A befindet sich links neben der Komponente B“), statt absoluter Koordinaten. - Größe der Komponenten wird gesteuert über die Parameter: minimumSize, preferredSize und maximumSize. • Vorteil: - Vereinfachung des Oberflächenentwurfes, - Flexibilisierung der Oberflächen Bsp. eines Darstellungsfehlers bei absoluter Positionierung: 16 SWT GUI, A. Dittmar & P. Forbrig Layout-Manager Anwendung: • Erzeugung eines Exemplars des gewünschten Layout-Managers, • Registrierung des Layout-Managers beim Container (setLayout()), • Einfügen der Komponenten in den Container (add()), • FlowLayout: vordefiniertes Layout bei JPanel public class FlowTest { public static void main(String[] args) { JFrame f = new JFrame("FlowTest"); f.setLayout(new FlowLayout()); f.add(new JButton("A")); f.add(new JButton("B")); f.add(new JButton("C")); f.add(new JButton("D")); f.add(new JButton("E")); f.pack(); f.setVisible(true); } } 17 SWT GUI, A. Dittmar & P. Forbrig BorderLayout JFrame f = new JFrame(""); f.setLayout(new BorderLayout()); f.add(new JButton("North"),BorderLayout.NORTH); f.add(new JButton("South"), BorderLayout.SOUTH); f.add(new JButton("East"), BorderLayout.EAST); f.add(new JButton("West"), BorderLayout.WEST); f.add(new JButton("Center"), BorderLayout.CENTER); f.pack(); f.setVisible(true); Ein “FlowLayout-Managed Container “ innerhalb eines “BorderLayout-Managed Containers”. 18 GridLayout • Anordnung der Komponenten in einem gleichförmigen Gitter. • Jede Komponente nimmt eine Gitterzelle ein. Es gibt weitere Layout-Manager. “Before writing any GUI code, you should always do two things: Draw a picture! You would be surprised how many people try to visualize the GUI in their head. Drawing a picture makes the design significantly easier to develop. Describe the resize behavior. After drawing the picture, add information about which parts of the GUI will expand/collapse when the window is resized.” http://java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr/shortcourse.html SWT GUI, A. Dittmar & P. Forbrig 19 Ereignisbehandlung Ereignis-Auslöser-Objekte: • Aktionen des Nutzers lösen Ereignisse aus (z.B. Mausclick, Mausbewegung, Drücken einer Taste). • Ereignisse werden meist durch GUI-Objekte erzeugt. Event-Objekte: • Jedes Ereignis wird durch ein Objekt repräsentiert. Listener-Objekte: • Interessierte Objekte melden sich beim Auslöser-Objekt an. • Sie werden bei Ereignissen benachrichtigt. • Stellen für die Ereignisbehandlung entsprechende Methoden bereit. • Bilden Schnittstelle zum funktionalen Kern der Anwendung. SWT GUI, A. Dittmar & P. Forbrig 20 Ereignisklassen • Alle Ereignisse der GUI sind Objekte, die aus Unterklassen der Klasse java.awt.AWTEvent gebildet sind. • In jeder Unterklasse sind noch einmal Ereignisgruppen unter einer ID zusammengefaßt (getID()). • Beispiele: - Klasse KeyEvent mit IDs: KEY_PRESSED, KEY_RELEASED, KEY_TYPED - Klasse MouseEvent mit IDs: MOUSE_CLICKED, MOUSE_DRAGGED, MOUSE_ENTERED, MOUSE_EXITED, MOUSE_MOVED, MOUSE_PRESSED, MOUSE_RELEASED ... - usw. SWT GUI, A. Dittmar & P. Forbrig 21 Einige Ereignisauslöser Auslöser auslösende Aktion ausgelöstes Ereignis JButton Aktivierung der Schaltfläche ActionEvent JScrollBar Wertänderung AdjustmentEvent Component Änderung der Sichtbarkeit oder der Größe ComponentEvent Container Änderung des Inhalts ContainerEvent JComponent Tastatur KeyEvent JList Auswahl ItemEvent JComponent Bewegung MouseEvent JComponent Betreten oder Verlassen einer Komponente MouseEvent SWT GUI, A. Dittmar & P. Forbrig 22 Listener-Objekte • Sind Objekte, die sich bei den Objekte anmelden, die Quellen für die sie interessierenden Ereignisse sind. • Für jedes Ereignis gibt es ein eigenes Listener-Interface. Die Listener-Objekte müssen dieses Interface, d.h. die konkrete Ereignisbehandlung implementieren. Dazu werden den Listener-Objekten die entsprechenden Ereignisobjekte übergeben. Beispiele für Listener-Schnittstellen: • ActionListener Schaltfläche o. Menü aktiviert, auf ein Textfeld gedrückt, • WindowListener – Fenster schließen oder verkleinern, • MouseListener – Maustaste gedrückt, • MouseMotionListener – Maus bewegt. SWT GUI, A. Dittmar & P. Forbrig 23 Beispiel - Variante 1: GUI-Komponente und Listener in einem Objekt public class Test_Button extends JButton implements MouseListener { public Test_Button() { super(); addMouseListener(this); } public void mouseClicked (MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3) { System.out.println("Maustaste rechts"); } else { System.out.println("Maustaste links");} } public void mouseExited (MouseEvent e) {} public void mouseEntered (MouseEvent e) {} public void mousePressed (MouseEvent e) {} public void mouseReleased (MouseEvent e) {} public static void main(String[] args) { Test_Button button = new Test_Button(); button.setText("ListenerTest"); JFrame frame = new JFrame(); frame.getContentPane().add(button); frame.pack(); frame.setVisible(true); } } SWT GUI, A. Dittmar & P. Forbrig 24 SWT Verhalten & GUI, P. Forbrig & A. Dittmar Beispiel - Variante 2: GUI-Komponente und Listener sind separate Objekte import java.awt.event.MouseListener; public class Test_Listener implements MouseListener { String name; public Test_Listener (String n) { name = n; } public void mouseClicked (MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3) { System.out.println("Listener "+name+" hoert: Maustaste rechts"); } else {...} } public void mouseExited (MouseEvent e) {} public void mouseEntered (MouseEvent e) {} public void mousePressed (MouseEvent e) {} public void mouseReleased (MouseEvent e) {} } Test2_Button b = new Test2_Button(); Test_Listener l = new Test_Listener(“L1"); // Anmeldung von 2 Listener-Objekten b.addMouseListener(l); b.addMouseListener(new Test_Listener(“L2")); ... SWT GUI, A. Dittmar & P. Forbrig 25 SWT Verhalten & GUI, P. Forbrig & A. Dittmar Variante 2 unter Nutzung einer abstrakten Adapterklasse für die Listener public abstract class MouseListenerAdapter implements MouseListener { public void mouseClicked (MouseEvent e) {} public void mouseExited (MouseEvent e) {} public void mouseEntered (MouseEvent e) {} public void mousePressed (MouseEvent e) {} public void mouseReleased (MouseEvent e) {} } public class Test_Listener_2 extends MouseListenerAdapter { String name; public Test_Listener_2 (String n) { name = n; } public void mouseClicked (MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3) { ... } } SWT GUI, A. Dittmar & P. Forbrig 26 SWT GUI, A. Dittmar & P. Forbrig Entwicklungswerkzeuge für GUIs Einteilung in 3 Schichten: – windowing systems – interaction toolkits • Unterstützung der Entwickler beim Verschmelzen des Ein- und Ausgabeverhaltens des Systems. • “Even experienced programmers will have difficulties using toolkits to produce an interface that is predictably usable.” (Dix et al., 2004) – user interface management/development systems (UIMS/UIDS) 27 SWT GUI, A. Dittmar & P. Forbrig UIMS • Konzeptionelle Architektur von interaktiven Systemen (IS), • Techniken zur separaten Implementierung von Applikation und Präsentation, • verbessert: - Portabilität - Wiederverwendbarkeit von Komponenten - multiple interfaces - Anpaßbarkeit durch Entwickler und Nutzer • Seeheim-Modell als erstes Architekturmodell für IS (1985): presentation dialogue application 28 SWT GUI, A. Dittmar & P. Forbrig Zur Trennung Applikation-Präsentation IS besteht aus Applikation ist abhängig von beschreibt Verhalten = Menge von Applikationszustandsfolgen BSS beschreibt beobachtbares Verhalten = Menge von Dialogzustandsfolgen Beispiele für Beschreibungsmittel für Dialogabläufe: • (Paper) Prototyping • State Charts... 29 SWT GUI, A. Dittmar & P. Forbrig Seeheim-Modell USER lexical syntactic semantic Presentation Dialogue Control Functionality (application interface) APPLICATION switch direct communication between application and presentation, regulated by dialogue control Seeheim-Modell ist ein Schichtenmodell: - große Komponenten, - nur vertikale Dekomposition des IS 30 SWT GUI, A. Dittmar & P. Forbrig Schichten- vs. objektbasierte Architekturmodelle • Smalltalk nutzte bereits ein objektbasiertes Architekturmodell mit vertikaler und horizontaler Dekomposition: MVC-Modell (model–view–controller) – model: interner logischer Zustand der Komponente – view: wie erfolgt die Darstellung auf dem Bildschirm – controller: Verarbeitung der Nutzereingabe Application view User Interface model controller teilweise Umsetzung in Java – siehe Übungen... 31 SWT GUI, A. Dittmar & P. Forbrig Architektur für MVC-Pattern Subjekt subjekt beobachter Beobachter * Model View Verantwortung Stellt den funktionalen Kern der Anwendung bereit. Registriert abhängige Views und Controller. Benachrichtigt registrierte Komponenten, wenn sich sein Zustand geändert hat. < holeDaten Controller Verantwortung Verantwortung Stell Informationen dar. Implementiert die Aktualisierungsoperation. Erfragt Daten beim Model. Erzeugt und initialisiert gegebenenfalls ihre Steuerungen. Erkennt Benutzungseingaben als Ereignis. Übersetzt Ereignisse in Dienstanforderungen an das Model oder Darstellungsmöglichkeiten an die View. Implementiert die Aktualisierungsoperation. < holeDaten, ändere 32 SWT GUI, A. Dittmar & P. Forbrig PAC-Modell 33 SWT GUI, A. Dittmar & P. Forbrig Ein weiteres objektbasiertes Modell: PAC • PAC-Modell dichter am Seeheim-Modell – abstraction – logical state of component – presentation – manages input and output – control – mediates between them • manages hierarchy and multiple views – control part of PAC objects communicate • PAC cleaner in many ways … but MVC used more in practice 34 SWT GUI, A. Dittmar & P. Forbrig Einordnung der Werkzeuge ...mit Bezug auf das Seeheim-Modell: 35 SWT GUI, A. Dittmar & P. Forbrig Shneiderman’s Eight Golden Rules of Interface Design 1. 2. 3. 4. 5. 6. 7. 8. Strive for consistency in action sequences, layout, terminology, command use and so on. Enable frequent users to use shortcuts, such as abbreviations, special key sequences and macros, to perform regular, familiar actions more quickly. Offer informative feedback for every user action, at a level appropriate to the magnitude of the action. Design dialogs to yield closure so that the user knows when they have completed a task. Offer error prevention and simple error handling so that, ideally, users are prevented from making mistakes and, if they do, they are offered clear and informative instructions to enable them to recover. Permit easy reversal of actions in order to relieve anxiety and encourage exploration, since the user knows that he can always return to the previous state. Support internal locus of control so that the user is in control of the system, which responds to his actions. Reduce short-term memory load by keeping displays simple, consolidating multiple page displays and providing time for learning action sequences. 36 SWT GUI, A. Dittmar & P. Forbrig DIN-Norm • Die DIN EN ISO 9241-110 hat eine ähnliche Sicht auf die Dinge. Dort wird allerdings eine etwas detailliertere Charakterisierung vorgenommen. Sie unterscheidet: – – – – – – – Aufgabenangemessenheit Selbstbeschreibungsfähigkeit Steuerbarkeit Erwartungskonformität Fehlertoleranz Individualisierbarkeit Lernförderlichkeit 37 SWT GUI, A. Dittmar & P. Forbrig Viele Gesetze der Gestaltung z.B. Gesetz der Nähe 38 SWT GUI, A. Dittmar & P. Forbrig Alte Gliederung der ISO 9241 39 SWT GUI, A. Dittmar & P. Forbrig Zusammenfassung • Einordnen der Begriffe Windowing System, Interaction Toolkit, User Interface Management Systeme • Java GUI-Programmierung und Listener • Architekturmodelle für interaktive Systeme • Golden Rules in Interface Design und Usability (Wird in Module HCI und SE-Tools detaillierter diskutiert.) 40
© Copyright 2025 ExpyDoc