42. Architektur interaktiver Systeme

Ähnliche Dokumente
46. Architektur interaktiver Systeme

43. Architektur interaktiver Systeme

Dabei sollen die Nutzern nach einer Authentifizierung entsprechend ihren Rechten Begriffe ändern, anlegen und kommentieren können.

Model-View-Controller

Multimedia im Netz Wintersemester 2012/13

VAADIN, SPRING BOOT & REST

Sommersemester Implementierung III: GUI und Verhalten (Teil 2)

Integration von UIS-Webdiensten

70. Programmierung interaktiver Systeme

70. Programmierung interaktiver Systeme

Alternative Architekturkonzepte

Hochschule Bochum. Fachbereich Elektrotechnik und Informatik. Arbeitsthese. UML2 Web-Modelling-Tool. Tim Keller

Eine Untersuchung der Funktionen des Apache Wicket Webframeworks

Projekt im Praktikum zur OOS im Sommersemeter 2016

Einführung in die Programmierung für NF MI. Übung 11

Einführung in die Programmierung für NF. Übung

Programmieren mit Java

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

Kompendium der Web-Programmierung

Motivation Grundlagen Technologien Manipulation Ecore Genmodell Demo Persistenz Notification Ausblick GMF Fazit / Quellen

MVC Ein wichtiges Konzept der Software-Architektur

Hauptseminar Informatik. Java Web Frameworks Alexander Löser

Vortrag. Thema: Apache Struts + Tiles

Komponentenbasierte Client-Architektur. Bernd Olleck, IT Beratung Olleck Dr. Martin Haft, sd&m AG München,

70. Programmierung interaktiver Systeme mit modularen Controllern

Interaktive Karten als Rich Internet Applications. Ruben Schempp Anwendungen

Seite Architektur interaktiver Systeme. 7. Architektur interaktiver Systeme. 7.1 Entkopplung durch Sichten. Schichtenarchitektur

React.js flottes Front-End für Domino. Knut Herrmann

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

VON MVC ZU MODEL-VIEW-VIEWMODEL

Ereignisbasierte WebGUIs

32. Werkzeuge zur Visualisierung

Enterprise JavaBeans Überblick

Architektur von REST basierten Webservices

43 Verfeinerung von Lebenszyklen - Geschichtete Interpretierer (Automaten)

Model-View-Controller

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

Play Framework, MySQL, JPA, HQL, HTML, jquery,

Mit dem Google-Web-Toolkit moderne Web-Anwendungen entwickeln

Webanwendungen mit Java und JavaServerPages

Kai Wähner MaibornWolff et al GmbH

Funktionale und Objekt-Orientierte Programmierkonzepte

Grafische Benutzeroberflächen

Objektorientierte Analyse

Rails Ruby on Rails Ajax on Rails. Clemens H. Cap

Komponenten & Frameworks Seite 1

Internet-Programmierung

43 Verfeinerung von Lebenszyklen - Geschichtete Interpretierer (Automaten)

Model-View-Controller. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1

Praktikum ios-entwicklung. Wintersemester 2017 / 2018 Prof. Dr. Linnhoff-Popien Kyrill Schmid, Markus Friedrich

V by WBR1/BFH-TI 2011 by MOU2/BFH-TI

Hochschule Darmstadt Fachbereich Informatik

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans

XML Publisher die universelle Lösung für Geschäftsdokumente

JavaFX im UI-Technologiedschungel

Internettechnologien Vorlesung für Master-Studierende Geoinformatik/-management Sommersemester 2016

Rich Internet Applications, Flex & Mate. (Ja, das ist Grafische Benutzeroberflächen!) Jakob Külzer jakob.kuelzer@gmail.

Institut für Programmierung und Reaktive Systeme. GUIs mit Swing. Markus Reschke

Consulting, Development, Deployment, Training and Support for Media-IT. Datum: Daniel Dimitrijevic

Aufbau einer Web 2.0 Community mit Grails. DOAG Konferenz + Ausstellung 2010 Nicole Hoock, esentri consulting GmbH

Komponentenorientierte Software-Entwicklung. Seite 1 / 42

Eclipse Tutorial.doc

Programmieren 2 12 Netzwerke

Inhaltsverzeichnis. vii

<Insert Picture Here> Generierung von ADF-Applikationen aus Metadaten des Oracle Designer

Mathematik Seminar WS 2003: Simulation und Bildanalyse mit Java. Software-Architektur basierend auf dem Plug-in-Konzept

AJAX und Ruby on Rails

Unternehmensdokumente mit dem XML Publisher erzeugen

Grundlagen Internet-Technologien INF3171

Abschnitt 20: Ein Grundprinzip der Software-Architektur

Objektorientierte und Funktionale Programmierung SS 2014

Delphi MVC Framework. Mathias Pannier

Grafische Benutzeroberflächen

Grafische Benutzeroberflächen

30. Parser-Generatoren

Geschäftsprozesse Benutzerschnittstelle

Einsatz von Java-Komponenten in verteilten Embedded Systems

Das Model View Controller (MVC) Konzept

Lernen vom Page Designer. Auf den Spuren von Jules Verne

MVC-Architektur am Beispiel von OLAT

Software-Entwurfsmuster (weitere) A01 OOP. Software-Entwurfsmuster (weitere)

Grails. Weiterführende Themen zu Internet- und WWW-Technologien. Matthias Springer. 06. Juni 2011

Indigo vs. Juno. Was ist neu für Eclipse 4.x RCP Entwickler? Hauptseminar 2012

Oracle JDeveloper 10 g

Business Applika-onen schnell entwickeln JVx Framework - Live!

Praktikum ios-entwicklung

Internettechnologien Vorlesung für Master-Studierende Geoinformatik/-management Sommersemester 2017

Einstieg in die Informatik mit Java

Recherchebericht. 2 Konzepte Client-Server-Modell Servlets-Architektur Google Web Toolkit... 5

Google Gears Offline Web?

/** Main-Methode erzeugt einen neuen Editor zum Testen */ public static void main(string[] args) { new Editor();

Teil II Objektorientierte Programmierung (OOP) 20. Objektnetze

Cross Platform Development mit SharePoint

Transkript:

Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie 42. Architektur interaktiver Systeme Prof. Dr. rer. nat. Uwe Aßmann Institut für Software- und Multimediatechnik Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden Version 16-1.1, 09.07.16 Softwaretechnologie (ST) 1) Benutzungsoberfächen und Anwendungslogik 2) Kopplung von synchronen und formularbasierten Benutzungsoberfächen und Anwendungslogik 3) Kopplung von reaktiven, graphischen Benutzungsoberfächen und Anwendungslogik 4) Controller als Steuerungsmaschinen 5) Implementierung der Konnektoren 6) Swing

Literatur 2 Softwaretechnologie (ST) Obligatorisch: [PassiveView] Martin Fowler. Passive View. http://www.martinfowler.com/eaadev/passivescreen.html. Strikte Schichtung, aktiver Controller und passiver View. Weitere: F. Buschmann. N. Meunier, H. Rohnert, P. Sommerlad, M. Stal. Pattern-orientierte Software-Architektur. Addison-Wesley. Entwurfsmuster und Architekturstile. MVC, Pipes, u.v.m. [Herrmann] M. Veit, S. Herrmann. Model-View-Controller and Object Teams: A Perfect Match of Paradigms. Aspect-Oriented System Development (AOSD) 2003, ACM Press Mike Potel. MVP: Model-View-Presenter The Taligent Programming Model for C+ + and Java. VP & CTO Taligent, Inc. ftp://www6.software.ibm.com/software/developer/library/mvp.pdf html web frameworks STRUTS http://exadel.com/tutorial/struts/5.2/guess/strutsintro.html Web Application Component Toolkit http://www.phpwact.org/pattern/model_view_controller

3 Softwaretechnologie (ST) Die Architektur interaktiver Anwendungen ist eines der komplexesten Gebiete der Software- Architektur Um sie zu verstehen, brauchen wir alle Teile des Kurses: Kollaborationen und Konnektoren Schichten Steuerungs- und Protokollmaschinen Sequenzdiagramme Entwurfsmuster Resourcen: GUI/MVCModular.java GUI/MVCModularDirectPlayOut.java Die Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. Carl Carl Hilty, Hilty, 28.02.1833 28.02.1833 -- 12.10.1909 12.10.1909 Schweizer Schweizer Richter Richter und und Staatsrechtler, Buchautor Buchautor und und christl. christl. Staatsrechts-Philosoph Seine Seine Bücher Bücher beeinflussten auch auch K. K. Adenauer Adenauer

Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie 42.1 Benutzungsoberfächen (UI) und Anwendungslogik Verschiedene Arten der Kopplung zwischen Benutzer und Software Softwaretechnologie (ST)

Schichtenarchitektur, grob 5 Softwaretechnologie (ST) Benutzungsoberfläche (UI) - Teile des Kontextmodells UI_Window UI_Button UI_Menu Fachliches Modell (Anwendungslogik AL) A_Teammitglied A_Teambesprechung Ablaufsteuerung Datenhaltung M_TeamMitglied z.b. relationale Datenbank M_Teambesprechung

Controller bildet 4. Schicht zwischen der Benutzungsoberfäche (UI) und der Anwendungslogik 6 Softwaretechnologie (ST) Benutzungsoberfläche (user interface, UI) UI_Form UI_Page UI_Button UI_Menu Play-In- Konnektor Controller-Schicht Play-out- Konnektor Unsichtbare Ablauf- Steuerung (Ereignis- Verwaltung) Fachliches Modell (Anwendungslogik) Datenhaltung A_Teammitglied A_Teambesprechung

Arten von Benutzungsschnittstellen (User Interface, UI) 7 Softwaretechnologie (ST) Synchrone UI: die Anwendungslogik ruft die UI auf und wartet auf Eingaben (Treiber ist die Anwendungslogik) Asynchrone UI: die Anwendungslogik reagiert auf die UI (Treiber ist die UI) Graphische UI (GUI) Kommandozeilen-orientiert, textuelle UI (TUI) Maskenorientiert (screen fow) oder formularorientiert (form fow, FUI) Tangible UI (TUI) ==> dann muss der Controller die parallele Verarbeitung steuern ==> dann kann der Controller entfallen Verteilte UI (Web UI) ==> dann muss der Controller die verteilte und parallele Verarbeitung steuern

Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie 42.2 Kopplung von synchronen Benutzeroberfächen mit der Anwendungslogik Text- und Formularbasierte Oberfächen (Form- Based UI, FUI) sind meist synchron mit der Anwendungslogik gekoppelt Die Anwendungslogik ruft die Oberfäche auf und wartet auf die Eingaben des Benutzers, z.b. das Ausfüllen von Formularen Softwaretechnologie (ST)

Synchrone Kopplung zwischen Anwendungslogik, Controllerschicht und FUI 9 Softwaretechnologie (ST) Die Anwendungslogik ruft das formularbasierte UI mit einem leeren Formular auf und warten auf das Ausfüllen des Benutzers (synchron) Die Play-In und Play-Out-Konnektoren sind besonders einfach Menu Formularbasierte Benutzungsoberfläche (FUI) Form Page Button ausfüllen Filled Form Filled Page Play-out: Präsentation Formular (Screen) Controller-Schicht Play-In: Interpretation des Formulars Fachliches Modell (Anwendungslogik) A_Teammitglied A_Teambesprechung

42.2.1. Textbasierte UI mit synchronem Update (ein View) 10 Softwaretechnologie (ST) In Java: Eingabe mit System.in, Ausgabe mit System.out Play-In und Play-Out-Konnektoren sind Prozeduraufrufe an die UI m:domain Model v1:textview askforfilledtext() return FilledText redraw(filledtext)

Textbasierte UI mit synchronem Update (mehrere Text- Views) 11 Softwaretechnologie (ST) Immer alles schön nacheinander (synchron) v1:textview askforfilledtext() m:domain Model v2:textview return FilledText redraw(filledtext) redraw(filledtext)

Einfache textuelle Sichten 12 Softwaretechnologie (ST) Textbasierte UI sind spezielle formularbasierte UI In Java: Aufruf der Objekte System.in und System.out class class PersonModel PersonModel { activities activities of of the the model model System.out.println( Enter a number\n ); number\n ); int int num num = System.in.read(); Person Person p.number p.number = num; num; foreach foreach (view (view ; model.getviews()) { view.redraw(p); view.redraw(p); } further further activities activities of of the the model model }

42.2.1. Formularbasierte UI mit XML 13 Softwaretechnologie (ST) v1:formview HTML und XML bieten standardisierte Formate für Formulare an, die von Browsern dargestellt, interpretiert, und ausgefüllt werden können Die Play-In und Play-Out-Konnektoren transportieren XML-Dokumente askforfilledform(html) m:domain Model v2:formview return FilledForm:HTML redraw(filledform:html) redraw(filledform:html)

Formularbasierte UI mit XML übers Web 14 Softwaretechnologie (ST) HTML und XML können vom Client zum Server übertragen werden Kanalprotokoll http oder https Client Server Client v1:formview askforfilledform(html) m:domain Model v2:formview return FilledForm:HTML via http redraw(filledform:html) via http redraw(filledform:html) via http

Screen-Flow 15 Softwaretechnologie (ST) Der Fluss von Daten zwischen AL und FUI wird als Screen Flow bezeichnet und kann durch ein Aktivitätendiagramm mit zwei Swimlanes beschrieben werden Die Initiative liegt in der AL: Der FUI wird jeweils von der AL beauftragt, die Daten einzuholen AL Einloggen Abfrage starten Adress-Objekt anlegen Kontonummer prüfen Versanddetails hinzufügen Bestellung bearbeiten FUI email + passwd angeben Versandadresse ausfüllen Kontonummer ausfüllen Versanddetails ausfüllen

Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie 42.3 Überblick zu reaktiven graphischen Benutzeroberfächen (GUI) Kopplung der GUI und Anwendungslogik durch Controller Bislang war es einfach, aber auch unfexibel Jetzt bringt ein Controller bzw. eine Controllerschicht die Ereignisse, auslösenden Fensterelemente (Sicht) und Modell asynchron zusammen Der Controller beherrscht und kapselt die Interaktion, die Initiative geht von ihm aus View und Modell sind gegenüber ihm passiv Softwaretechnologie (ST)

Schichtenarchitektur der reaktiven Benutzungsoberfäche (GUI) 17 Softwaretechnologie (ST) Graphische Benutzungsoberfläche (Fensteroberfläche mit Widget-Hierarchie, graphical user interface, GUI) UI_Window UI_Button UI_Menu Play-In (asynchron) Fachliches Modell (Anwendungslogik) Controller-Schicht Play-out (synchron, aber multiple Sichten und pull-steuerung) A_Teammitglied A_Teambesprechung Unsichtbare Ablauf- Steuerung (Ereignis- Verwaltung des Laufzeitsystems)

Schichtenarchitektur der reaktiven Benutzungsoberfäche (GUI) 18 Softwaretechnologie (ST) Graphische Benutzungsoberfläche (Fensteroberfläche mit Widget-Hierarchie, graphical user interface, GUI) UI_Window UI_Button UI_Menu Controller-Schicht Play-In (asynchron) In-Controller Out-Controller Play-out (synchron, aber multiple Sichten und pull-steuerung) Unsichtbare Ablauf- Steuerung (Ereignis- Verwaltung des Laufzeitsystems) Fachliches Modell (Anwendungslogik) A_Teammitglied A_Teambesprechung

Modell, Controller und Views in strikter Schichtung 19 Softwaretechnologie (ST) mehrere push-observer => Änderungen (play-in, asynchron ausgelöst) Sicht 1 (View) Sicht 2 (View) In-Controller1 In-Controller2 Benachrichtigung vieler Sichten über Änderungen (play-out, viele pull Observer) Out-Controller1 Out-Controller2 Methodenaufrufe => Änderungen (play-in) Fachliche Klasse (Modell)

Controller sind Konnektoren zwischen Model und View 20 Softwaretechnologie (ST) Meist existiert ein Hauptobjekt in der Kollaboration, womit der Controller einen Konnektor darstellt Sicht 1 (View) Sicht 2 (View) Play-In-Konnektor Play-Out-Konnektor In-Controller1 In-Controller2 Out-Controller1 Out-Controller2 Methodenaufrufe => Änderungen (play-in) Fachliche Klasse (Modell)

Controller sind Konnektoren zwischen Model und View (gefaltet) 21 Softwaretechnologie (ST) Konnektoren, die Ports verbinden, abstrahieren die Kollaborationen Sicht 1 (View) Sicht 2 (View) Anwendungslogik (Modell)

Widgets und Datenstrukturen in asynchronen GUI 22 Softwaretechnologie (ST) Fensterstrukturen sind hierarchisch (Einkapselung von Widgets) Datenstruktur in Anwendung wird den Widget-Hierarchien zugeordnet Screen-Buffer zeigt die Widget-Struktur bitweise (paint()) Pro View ein Controller View 1 - Widget Tree 1 (Fenster-Struktur) Observer (play-in) Controller- Schicht Observer (play-out) Modell: Datenstruktur in Anwendungslogik (und Datenbank) Screen Buffer View 2 - Widget Tree 2 (Fenster-Struktur) Controller Controller

Programme mit asynchronen GUI laufen in 3 Phasen 23 Softwaretechnologie (ST) Interaktive Anwendungen mit GUI laufen in Phasen: 1) Aufbau der Schichten: Aufbau der Datenstrukturen a) Aufbau der Anwendungslogik b) Aufbau der Controllerschicht (Aufbau der Konnektoren) c) Aufbau der Widget-Schicht (widget hierarchies): Hierarchischer Aufbau der Fensteroberfäche durch Konstruktoraufrufe an Widgets und Einfügen in Fensterhierarchie (widget embodiment) 2) Netzaufbau a) Vernetzung der Fensteroberfäche mit der Anwendungslogik über die Controller- Konnektoren, um Reaktionen der Anwendungslogik zu ermöglichen a) a) Play-Out-Kollaboration: Anschluß des GUI-Reaktionscodes auf Veränderungen der Modellstruktur (View wird pull-observer des Controller, indirekt des Modells, Vorbereitung des Play-Out) b) b) Play-In-Kollaboration: Anschluß des Modell-Reaktionscode auf Benutzereingaben (Controller ist push-observer der Widgets, Vorbereitung des Play-In) 3) Reaktionsphase (Reaktive, asynchrone Phase) s. nächste Folie

Zusammenspiel der Widget-Struktur und der Anwendungslogik 24 Softwaretechnologie (ST) 3) Reaktionsphase (Reaktive, asynchrone Phase) Play-In: bei der die Benutzeraktionen vom System (Ereignisverwaltung) als Ereignisobjekte ins Programm gegeben werden Event notification: Ereignismeldung, dass Benutzer etwas getan hat Data transmission: etwaiger Transfer der Daten Play-Out: Bei der in der Anwendungslogik durchgeführten Aktionen die Fensteroberfäche auf den neuesten Stand gebracht wird Event notification: Ereignismeldung, dass Anwendung etwas getan hat Data transmission: Transfer der Daten zum GUI Visualization: Neuzeichnen des GUI Der Steuerfuß eines GUI-Programms wird nie explizit spezifziert, sondern ergibt sich aus den Aktionen des Benutzers oder des Modells Die Controllerschicht hat die Kontrolle über das Verhalten reagiert auf die Ereignisse im View und im Anwendungsmodell (reaktives System) steuert Redraw und Aktionen auf Modell

1) Aufbauphase Schichten: Aufbau der Widget-Struktur und fachl. Modell 25 Softwaretechnologie (ST) Verschiedene Techniken für den Aufbau der Datenstrukturen: Rich Client: Durch Konstruktoraufrufe und Additionen von Unterwidgets zu Oberwidgets (encapsulation) rein in Java-AWT/Swing, mit expliziter Konstruktion der Widget-Hierarchien App: App-Frameworks wie Android oder ios Web: z.b. Durch einen HTML-Baum, der von einem Brauser interpretiert wird (für Webanwendungen) Durch einen XML-Baum, der von einem XML-Parser eingelesen und als Objekt-Struktur im Speicher abgelegt wird (XUL - Firefox, XAML - Vista) Durch einen HTML-Baum, der bei Veränderungen inkrementell im Brauser nachgeladen wird (Web 2.0, Ajax) Client Server Modell: Datenstruktur View 1 - Widget Tree 1 in Anwendungslogik in html / Ajax (und Datenbank) Screen Buffer

Phase 2) Netzaufbauphase: Aufbau der Verbindung 26 Softwaretechnologie (ST) Die Netzaufbauphase verbindet mit Kollaborationen GUI, Input-Controller und AL für Play-In (In-Connector) AL, Output-Controller und GUI für Play-Out (Out-Connector) View 1 - Widget Tree 1 (Fenster-Struktur) Controllerschicht Modell: Datenstruktur in Anwendungslogik (und Datenbank) register as play-in Observer Play-in collaboration Screen Buffer In-Controller register as play-out-observer Out-Controller Play-out collaboration

Phase 3) Life Überblick MVC Dynamik 27 Softwaretechnologie (ST) Model ist passiv. Der Controller interpretiert die Eingaben und schreibt das Modell entsprechend View ist weitg. passiv. Controller benachrichtigt View, wenn sich was im Modell geändert hat In-Controller ist ein Observer, der wenig Daten (Events) zu transferieren hat, kann also als push- Observer oder pull-observer implementiert werden; meist push-observer Out-Controller muss u.u. große Datenmengen transferieren und wird meist als pull-observer realisiert View 1 - Widget Tree 1 (Fenster-Struktur) Controllerschicht Play-in collaboration Modell: Datenstruktur in Anwendungslogik (und Datenbank) Screen Buffer widget- Observer Play-in durch push- oder pull-observer In-Controller Out-Controller Play-out collaboration Play-out durch pull-observer

Die Dynamik der Phase 3 ( Life ) 28 Softwaretechnologie (ST) Phase Phase 3 3 (Dynamik) (Dynamik) trennt trennt zwischen zwischen Ereignisverarbeitung Ereignisverarbeitung und und Datentransport Datentransport Die Die Konnektoren Konnektoren setzen setzen pushpushoder oder pull-observer-muster pull-observer-muster ein ein Phase Phase 3 3 behandelt behandelt Verteilung Verteilung (Web) (Web) mit mit unterschiedlichen unterschiedlichen Controller- Controller- Architekturen Architekturen Frameworks Frameworks geben geben die die Architektur Architektur vor vor (z.b. (z.b. Spring, Spring, Grails, Grails, Ruby Ruby on on Rails) Rails)

Gesamte MVC-Dynamik (indirektes Play-In und Play-Out) 29 Softwaretechnologie (ST) Model ist völlig passiv, wird vom Controller geschrieben View is ebenfalls passiv, wird vom Controller aktiviert und gelesen Play-Out Observers indirektem play-out: greift indirekt über den Observer auf das Modell zu (update, data-pull) Der Controller kontrolliert, was passiert Steuert die Datenübertragung beim pull und beim push 2) register as play-in Observer View 1 - Widget Tree 1 (Fenster-Struktur) 2) register as play-out Observer Controller 1 (pro Sicht) 2) register as play-out Observer Modell: Datenstruktur in Anwendungslogik (und Datenbank) Screen Buffer 3i) notify 3i) update-pull Play-in collaboration In-Controller 3i) push-write Out-Controller 3o a) update (redraw) 3o b) pull Play-out collaboration 3o a) update 3o b) pull

Play-In mit passivem View und pull-in-controller; Passives Play-Out mit indirektem pull-out-view [PassiveView] 30 Softwaretechnologie (ST) v1:view register() c1:controller m:application Model register() register() c2:controller register() v2:view notify(event) update() pull Play-In pull() writetomodel() Play-Out 1 update/redraw() pull() update() pull() update/redraw() pull() Play-Out 2 update() pull()

Variante: Play-In mit aktivem View und push-in-controller; Passives Play-Out mit pull-out-view 31 Softwaretechnologie (ST) v1:view register() c1:controller m:application Model register() register() c2:controller register() v2:view itemchanged(data) update(data) Push-Play-In writetomodel() Play-Out 1 redraw() pull() update() pull() update() pull() Play-Out 2 redraw() pull()

Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie 42.4 Controller als Steuerungsmaschinen in Konnektoren Im Entwurfsmuster PassiveView bestehen die Controller aus Steuerungsmaschinen, die die Ereignisse der GUI in die Ereignisse der Anwendungslogik übersetzen und umgekehrt Softwaretechnologie (ST)

Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie Einschreibung in das Praktikum Softwaretechnologie für das WS 2016/17 Ab sofort erfolgt für ALLE Studenten (auch für IST-Studierende!) die Einschreibung in das kommende Softwarepraktikum WS 2016/17 über www.jexam.de! Die Einschreibung ist bis einschließlich 31. Juli 2016 befristet. Schreiben Sie sich entweder in das externe oder in das interne Praktikum ein! Wer keinen externen Praktikumsplatz erhält, bekommt automatisch einen internen Praktikumsplatz. Wer sich in das Praktikum bis einschließlich 31. Juli 2016 nicht eingeschrieben hat, kann wahrscheinlich nicht teilnehmen, sich jedoch in die Nachrückliste eintragen! Softwaretechnologie (ST)

Implementierung der Controller als Steuerungsmaschinen 34 Softwaretechnologie (ST) Ein Ein Controller-Konnektor Controller-Konnektor wird wird durch durch eine eine Steuerungsmaschine Steuerungsmaschine implementiert, implementiert, die die die die Ereignisse Ereignisse auf auf der der Fensterhierarchie Fensterhierarchie (UI) (UI) in in die die Aufrufe Aufrufe an an die die Anwendungslogik Anwendungslogik übersetzt übersetzt (u.u.) (u.u.) Ereignisse auf der Fensterhierarchie (UI) Button-Pressed, WindowClosed, MenuItemSelected, etc. Aufrufe an die Anwendungslogik: Erzeugen von Kommandoobjekten Schreiben auf Materialien (Domänenobjekte) Aufrufen von Tools und Workfows Ein Ein In-Controller In-Controller übersetzt übersetzt die die Ereignisse Ereignisse des des UI UI in in die die Ereignisse Ereignisse der der AL. AL. Ein Ein Out-Controller Out-Controller übersetzt übersetzt die die Ereignisse Ereignisse der der AL AL in in die die Ereignisse Ereignisse der der UI. UI. Beide Beide können können kombiniert kombiniert sein. sein.

Input-Controller mit drei Zuständen 35 Softwaretechnologie (ST) Die entstehende Steuerungsmaschine steuert View und Model an ( beherrscht sie) Getriggert wird sie durch die Ereignisse viewchanged (update). Sie löst pulldata und writetomodel aus <<Steuerungsmachine>> In-Controller viewchanged() Data pull() view.pulldata() model.writetomodel (data) / model.writetomodel(data) inconsistent model new viewchanged()/ data = view.pulldata() all consistent

Paare von Controller-Steuerungsmaschinen 36 Softwaretechnologie (ST) In- und Out-Steuerungsmaschinen bilden Elemente einer oder mehrerer In- und Out- Kollaborationen <<Steuerungsmachine>> In-Controller <<Steuerungsmachine>> Out-Controller viewchanged() Data pull() view.pulldata() model.writetomodel (data) modelchanged() view.update() Data model.pull() / model.writetomodel(data) inconsistent model new viewchanged()/ data = view.pulldata() inconsistent modelchanged(data) / data = model.pull() new data arrived / foreach view: view.update() - all consistent all consistent

Controller als bidirektionale Inout-Konnektoren 37 Softwaretechnologie (ST) In- und Out-Controller können auch zusammengelegt sein (z.b. in Spring) Die entstehende Steuerungsmaschine steuert View und Model an ( beherrscht sie) Getriggert wird sie durch die Ereignisse viewchanged und modelchanged <<Steuerungsmachine>> Controller viewchanged() Data pull() modelchanged() <<provided>> Data view.pull() model.writetomodel(data) view.update() Data model.pull() <<required>> Play-In view changed /model.writetomodel(data) model changed /data = model.pull() views updating viewchanged()/ data = view.pull() all consistent modelchanged() views pulling Play-Out foreach view: view.pull() /foreach view: view.update() -

Prinzipieller Aufbau von InOut-Controllern 38 Softwaretechnologie (ST) Die Steuerungsmaschine des InOut-Controllers kennt viele verschiedene Ereignisse des UI und kann sie in spezifschen Zuständen behandeln <<Steuerungsmachine>> Controller viewchanged() Data pull() modelchanged() <<provided>> Data view.pull() model.writetomodel(data) view.update() Data model.pull() <<required>> Exit MenuItem Selected MenuItemSelected( FileSave) /model.writetomodel(data) Button pressed ButtonPressed( Count ) all consistent Window closed ButtonPressed( Close ) model changed modelchanged() views pulling /data = model.pull() /foreach view: view.update() - views updating

Implementierung der Controller 39 Softwaretechnologie (ST) Die Controllerschicht wird realisiert entweder als Konnektor mit einer Steuerungsmaschine Menge von In-/Out-Konnektoren mit kommunizierenden Steuerungsmaschinen Oder einer Menge von bidirektionalen-konnektoren Controller können kombiniert (InOut-Controller), oder auch als Paare von kommunizierenden Steuerungsmaschinen auftreten: Der Input-Controller ist eine Steuerungsmaschine, die die Ereignisse auf der Fensterhierarchie in die Aufrufe an die Anwendungslogik übersetzt Der Output-Controller ist eine Steuerungsmaschine, die die Ereignisse in der Anwendungslogik in die Aufrufe an die Fensterhierarchie übersetzt

Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie 42.5 Implementierung mit Konnektoren Softwaretechnologie (ST)

Ein einfacher MVC-Konnektor (als Team mit inneren Klassen) 41 Softwaretechnologie (ST) class class MVCConnector<Model,View,Controller>{ MVCConnector<Model,View,Controller>{ List<myView> List<myView> views; views; mymodel mymodel model; model; mycontroller mycontroller controller; controller; // // Phase Phase 1: 1: creation creation of of layers layers MVCConnector<View,Model,View,Controller> MVCConnector<View,Model,View,Controller> () () { views views = = new new ArrayList<myViews>(); ArrayList<myViews>(); model model = = new new mymodel(); mymodel(); connector connector = = new new mycontroller(); mycontroller(); } class class myview myview extends extends View View { // // Inherit Inherit the the View View methods methods } class class mymodel mymodel extends extends Model Model { // // Inherit Inherit the the Model Model methods methods } class class mycontroller mycontroller extends extends Controller Controller { // // phase phase 2: 2: wirenet() wirenet() { { registerview(); registerview(); registermodel(); registermodel(); } registerview() registerview() {.... } registermodel() registermodel() {.... } // // Phase Phase 3: 3: dynamics dynamics run() run() {.... Controller Controller state state machines machines.... } } }

Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie 42.6. MVC Frameworks (Controller Frameworks) Softwaretechnologie (ST)

MVC-Frameworks 43 Softwaretechnologie (ST) Die Struktur einer Controllerschicht kann sich von Anwendungsklasse zu Anwendungsklasse sehr unterscheiden. Ein MVC-Framework gibt eine Struktur der Controllerschicht vor, defniert Protokolle für die Ereignismeldung und den Datenaustausch vor und kann durch den Entwickler erweitert werden. MVC Frameworks benötigen Konfguration und Plugins Oft folgt man dem Prinzip Convention over confguration : Konventionen über Dateiverzeichnisse und Konfgurationsdateien vereinfachen dem MVC- Framework das Auffnden von Controller-, View-, Anwendungsklassen, sowie Hinweise zu ihrer Verdrahtung Konfgurationsdateien meist in XML oder Java-Property-Lists Berühmte Beispiele: Java: Spring, Struts Ruby: Ruby on Rails Groovy: Grails

MVC Frameworks kennen Plugins 44 Softwaretechnologie (ST) Configuration File Configuration Hook UI-ExtensionPoint C-ExtensionPoint A-ExtensionPoint UI-Package C-Package A-Package

Spring Framework 45 Softwaretechnologie (ST) Spring ist das im Praktikum im WS verwendete MVC-Framework Webbasiert, d.h. Controllerschicht ist auf Client und Server verteilt implementiert Konfgurierbar durch XML-Dateien und Java Property Files Erweiterbar Das Salespoint-Framework nutzt als Konnektor zum GUI das Konnektor- Framework SPRING Main controller, subcontroller Web-MVC Frameworks brauchen starke Schichtung Bietet sehr viele verschiedene Pakete, nicht nur für Web-UIs http://spring.io/guides

Spring Konfguration 46 Softwaretechnologie (ST) Spring übernimmt das Management der Verteilung Das Zusammenspiel zwischen Browser, Server und Anwendungslogik auf dem Server DispatcherServlet DispatcherServlet. properties Configuration Hook UI-ExtensionPoint C-ExtensionPoint A-ExtensionPoint UI-Package C-Package A-Package

Struktur des String Controllers in Web- Systemen (Server Side) 47 Softwaretechnologie (ST) Der Spring Controller ist ein komposites Programm auf dem Server: das Spring-DispatcherServlet enthält einen FrontController, der das ankommende Ereignis interpretiert (Steuerungsmaschine) und an untergeordnete Controller bzw. Steuerungsmaschinen weiter leitet

Controller sind Konnektoren zwischen Model und View 48 Softwaretechnologie (ST) Im Folgenden gibt es ein Hauptobjekt, den Konnektor, der View, Controller und Modell verdrahtet Sicht 1 Sicht 2 Sicht 3 Sicht 4 Java FX html+javascript html XSWT Play-In-Connector applet Play-Out-Connector Browser Web - http Servlet Front-Controller In-Controller2 Out-Controller1 Out-Controller2 Fachliche Klasse (Modell) Methodenaufrufe => Änderungen (play-in)

Server-seitiger Spring-Controller 49 Softwaretechnologie (ST) In- und Out-Controller können auch verteilt sein (z.b. in Spring) Die Steuerungsmaschine ist verteilt auf client und server Getriggert wird sie durch die Ereignisse viewchanged und modelchanged <<Steuerungsmachine>> Spring Controller viewchanged() push(data) modelchanged() <<provided>> model.writetomodel(data) view.update() <<required>> Seite geändert Play-In push(data)/http.get(data) Web - http model changed writetomodel(data) App is computing viewchanged()/ data = view.pull() Play-Out all consistent /Return = http.get(data) view update modelchanged()

Spring nutzt @attribut-basierte Codegenerierung 50 Softwaretechnologie (ST) Spring wandet Java-@Attribute (sog. Metadaten) in Code um Attribute parameterisieren Schablonen ( templates ): Template-gesteuerte Codegenerierung Siehe auch Xdoclet, xdoclet.sf.net Attribut- Code-Regeln Code- Schablonen Spring Code- Attribute e.g., @RequestMapping Methoden einer Klasse Attribut- Parser Schablonen- Expandierer Hilfs-Code für Web-Mapping Funktionaler Kern

@RequestMapping 51 Softwaretechnologie (ST) Ein REST-Webservice bildet URL (Web-Dateinamen) auf aktive Methoden eines Webservice-Objekts ab @RequestMapping( <relative URL> ) Wird die URL im Browser aufgerufen, wird die Methode aufgerufen und ihr Resultat als String im JSON-Format zurückgegeben http://st.inf.tu-dresden.de Webserver http://st.inf.tu-dresden.de /showproduct /layintobasket /order @RequestMapping( /showproduct ) @RequestMapping( /layintobasket ) @RequestMapping( /order ) otto:katalog zeigeprodukt() legeproduktinwarenkorb() bestelle()

Achtung! Hinweis auf Praktikum 52 Softwaretechnologie (ST) Zu Beginn des WS gibt es eine weitere Vorlesung über Implementierung von Interaktiven Systemen, die dieses Thema weiterführt

Was haben wir gelernt? 53 Softwaretechnologie (ST) GUI-Programme laufen in 3 Phasen: 1) Aufbau der Fensterfronten (widget hierarchies) durch Konstruktoraufrufe und Additionen (embodiment) (auch im Browser) 2) Netzaufbau, Aufbau der Controller-Kollaborationen Vorbereitung Play-Out: Anschluß des View-Reaktionscodes als jdk-observer des Modells Vorbereitung Play-In: Anschluß des Controller als widget-observer der Views 3) Reaktionsphase, bei der die Benutzeraktionen vom System als Ereignisobjekte ins Programm gegeben werden: der Controller als Listener benachrichtigt und ausgeführt werden (Play-In) die Views bzw. der Controller als Listener des Modells benachrichtigt werden (Play-Out) Der Kontrollfuß eines GUI-Programms wird nie explizit spezifziert, sondern ergibt sich aus den Aktionen des Benutzers Die Views reagieren auf Ereignisse im Screenbuffer, die von der Ablaufsteuerung gemeldet werden Der Controller auf Widget-Veränderungen im View und Änderungen im Modell Der Controller wird als Steuerungsmaschine implementiert und steuert alles (aktiver Konnektor) Das MVC-Framework Spring enthält eine stark geschichtete GUI- Anwendungskopplung Enthält einen kompositen Controller (komposite Steuerungsmaschine) Regelt den Verkehr zwischen Browser, Server, Servlet, Webservice-Methoden

The End 54 Softwaretechnologie (ST) Diese Folien sind eine stark überarbeitete Version der Vorlesungsfolien zur Vorlesung Softwaretechnologie von Prof. H. Hussmann. used by permission. Verbreitung, Kopieren nur mit Zustimmung der Autoren.