DVGB05 Grafiska användargränssnitt. Mjukvarudesign med Model-View-Controller

Relevanta dokument
Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document

Översikt Föreläsning 1. Trivicalc. Vad är trivicalc? En cell. Områden på skärmen. SMD168/SMD135 Fredrik Bengtsson

Model View Controller. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Observer Pattern och MVC. Objekt-orienterad programmering och design Alex Gerdes, 2016

Observer Pattern och MVC. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Vad utmärker ett bra användargränssnitt?

Observer Pattern och MVC. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

DAT043 - Föreläsning 7

Webbtjänster med API er

Universe Engine Rapport

Snake App Rapport - Snake App Rapport Utskriven/PDF Export: Copyright Version 1.2 Sidan 1 av 9.

Grafiska användargränssnitt i Java

Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.

Imperativ programmering. Föreläsning 4

CliMate följer Tre-lager-arkitektur. Domänobjekt - domänlogiklagret. Viktiga domänklasser i CliMate. De tre lagren. Paketen i CliMate:

Föreläsning 3: Händelsestyrda program och användargränssnitt

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

TENTAMEN I DATAVETENSKAP

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Vad utmärker ett bra gränssnitt?

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Next -> Next -> Finish

Objektorienterad programmering

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Design och konstruktion av grafiska gränssnitt

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Dagens program. Objektorienterad modellering och diskreta strukturer / design. Model/View/Control-implementering. Model/View/Control-arkitektur

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Properties. Användbara metoder som kan anropas i propertychanged:

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Grafiska användargränssnitt i Java

Windows Forms Winstrand Development

Design och konstruktion av grafiska gränssnitt

L04.1 Marodören. Inledning. Mål. Genomförande. Uppgift 1 Hello World. Moment I

Föreläsning 15: Repetition DVGA02

BuildingPortalSuite. Beskrivning BuildingPortalSuite - Beskrivning

PROGES PLUS THERMOSCAN RF. Instruktionsmanual V

Lösningar till tentamen i EDAF25

Nyheter i Revit Precast automation for lattice girder slabs API for precast automation

Föreläsning 2. Objektorienterad analys och design. Analys: att modellera världen. Design: att strukturera program.

VCON har stöd för upp till 32 dysor samtidigt. Upp till 3 sekvenscykler per dysa kan specifi ceras.

Inkapsling (encapsulation)

Inlämningsuppgifter, EDAF30, 2015

Objektorienterad programmering

ProgramMetodik! Allmänt

Programmering = modellering

Laboration 3 GUI-programmering

<script src= "

Industriella styrsystem, TSIU06. Föreläsning 2

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

Fönsterbeteende. Mike McBride Jost Schenck Översättare: Stefan Asserhäll

Mål med lektionen! Veta kursmålen. Ha kännedom om några av de grundläggande begreppen.

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

KravinsamlingAnalys Design Implementation Testning

ANVÄNDARMANUAL BRUNSTKALENDERN

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

Arkitektur Michael Åhs

Sju riktlinjer vid utveckling av hemsidor för mobil och desktop

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Redogörelse för utvecklingsprocessen av spelet The Legend of Chalmers

Arcus-EDS. Produktbeskrivning. Gateway KNX / DMX. KNX-GW-DMX Art.-Nr Maj LedLab AB Kungegårdsgatan Alingsås

Spel som interaktiva berättelser

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

Observer Pa*ern och MVC. Objekt-orienterad programmering och design Alex Gerdes, 2018

1 Klasser och objektorientering Vad är objektorientering?

Föreläsning 1: Intro till kursen och programmering

Föreläsning 1: Intro till kursen och programmering

JavaRats. Kravspecifikation. Version 1.1. Gustav Skoglund Marcus Widblom Senast ändrad: 13 / 05 / 08

Spelet i sig är inte avancerat men projektet ställer en del krav på implementationen bland annat:

Boken. Kap Kap 11.3

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Laboration 3 Refaktorering av spelramverket

Laboration 3: Refaktorering av spelramverket Pelle Evensen (2011) & Christer Carlsson (2015)

Designmönster - EMW. Kent Petersson epost1: kentp@cs.chalmers.se epost2: kent.petersson@emw.ericsson.se URL:

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

TDTS04: Distansvektorroutning i java

SPF/MiRiaM Manual avancerad sökning

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

Innehåll INNEHÅLL. Teckenförklaring Komma igång

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Innehåll. Förändringar i v5.3

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

WebViewer Manual för administratör Nova Software AB

1 Kravspecifikation Snake App

Programmering, abstraktion och modellering PROJEKTFÖRELÄSNING ANDERS MÄRAK LEFFLER IDA/HCS

Lab5 för prgmedcl04 Grafik

Axalon Process Navigator SP Användarhandledning

ALEPH ver. 16 Introduktion

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Lösningar till tentamen i EDAF25

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Tentamen i Objektorienterad modellering och design Helsingborg

The power of simplicity

Transkript:

DVGB05 Grafiska användargränssnitt Mjukvarudesign med Model-View-Controller

Skärmbildsinvarianter Studera bilden Anteckna vilka regler som gäller för visning av verktygen Dessa regler måste upprätthållas av programmet 2

Skärmbildsinvarianter Stängd dörr får inte stängas Knappen Stäng dörr inaktiveras vid stängd dörr Annars är knappen Stäng dörr aktiv Öppen dörr får inte öppnas Knappen Öppna dörr inaktiveras vid stängd dörr Annars är knappen Öppna dörr aktiv Rullningslisten ska alltid visa dörrens läge Rullningslisten får inte dras medan dörren rör sig Radioknapparna ska alltid återspegla dörren Stängd/Öppen intryckt dörren är stängd resp. öppen Stängs/Öppnas intryckt dörren är i angiven rörelse 3

Skärmbildsinvarianter Regler för GUI - skärmbildsinvarianter Stängd/öppen dörr får inte stängas/öppnas Stängd/öppen dörr ska återspeglas i radioknapparna 4

Invarianter och kopplingsgraf Kopplingsgrafen visar beroenden mellan programdelarna En riktad graf mellan påverkande och påverkade noder Engelsk term: Connectivity Graph Invarianterna måste upprätthållas Av alla operationer som kan påverka dem Stäng dörr Passivera Stäng Aktivera Öppna Tryck in Stängd Öppna dörr Motsvarande 5

Invarianter och kopplingsgraf Kopplingsgrafen visar beroenden mellan programdelarna En riktad kant mellan påverkande och påverkad nod Invarianterna måste upprätthållas Av alla operationer som kan påverka dem Stäng dörr dimma ner Passivera Stäng Stäng dörr Öppna dörr Aktivera Öppna aktivera Tryck in Stängd aktivera aktivera Öppna dörr Motsvarande Ej hållbar lösning Stängd Öppen se grafen Stäng dörr dimma ner 6

Tolkning av kopplingsgrafen Kopplingsgrafen visar hur en programvarudel (nod) påverkar och påverkas av andra noder Varje sådant beroende skapar en oönskad koppling Gör det svårare att konstruera lösningen, varje dels uppgift är beroende av andra delar, det kan bli svårt att dra ansvarsgränser förstå lösningen, förståelsen av en del är kopplad till förståelse av andra delar förändra, en förändring griper in på flera stället Önskar lösningar med få kopplingar helst inte kopplingar kors och tvärs kan skapas genom modularitet 7

Kopplingsgrad Kopplingsgraden g k definieras som antalet riktade kanter / antalet noder g k = k / n Kopplingsgraden i exemplet är g k = 8 / 4 = 2, (15/5 = 3) Kopplingsgraden är ett uttryck för komplexitet Om många delar är logiskt beroende av många andra Hög kopplingsgrad tyder på spagetti -logik En förändring på ett ställe påverkar många andra Försvårar underhåll när systemet blir större Tumregel: En kopplingsgrad under 2 verkar hanterbar 8

Problem GUI kan förändras för att bli mer användarvänligt Logiken kan behöva uppdateras för att klara av nya krav Vill inte bygga om hela tillämpningen så fort en liten förändring inträffar Får ej bryta skärmbildsinvarianterna Kan vi få ner kopplingsgraden? 9

Lösning MVC Härrör från Smalltalk Konstruktionsmönster - ramverk Separering av Modell - Underliggande informationsmodell (logik) Vy - GUI (utmatning, mätdon) Kontroller - Kontroll av indata (inmatning, styrdon) Objektorientering = klasser Observer/Observable-mönstret 10

Lösning MVC Ett MVC-organiserat program fungerar som följer: Användaren interagerar med vyerna och kontrollerna När användaren manipulerar en kontroll skickas ett meddelande om att förändra datan i modellen som kontrolleras av kontrollen När data i modellen ändras, antingen av interna beräkningar, användarinteraktion eller något annat, skickas meddelanden till de associerade vyerna om att visa de nya värdena för användaren 11 Bild från: http://java.cnam.fr/public_html/iagl99/dazy/uml_mvc/mvc/mvc%20course/mvc.html

MVC Normalt påverkar inte en kontroller direkt någon vy, förutom sig själv om det rör sig om en view-controller som en slider. En kontroller påverkar modellen och modellen uppdaterar vyerna. På så sätt upprätthålls en viktig egenskap Det finns inget viktigt på skärmen som inte finns representerat i modellen 12

MVC-Triangeln Observatör Observerbar 13

MVC - Översikt Vy Presentation Läs av tillstånd, getters Uppdatering, Initiering av GUI Användaren begär förändringar av modellen Meddela förändrin g Val av vy Modell Affärslogik Kontrollant Användarkontroll Uppdater a tillstånd, setters 14

Scenario - Logisk vy 1 - Användaren utför en åtgärd 2 - Kontrollern tolkar händelsen och begär en förändring på modellen 3 - Modellen förändrar sitt tillstånd och informerar vyn om förändringen notifychanged() modelchanged() 4 - Vyn frågar modellen om dess tillstånd och förändrar sig därefter getstate() 5 - Användaren ser effekter av åtgärd User sees uses Delbild från The Smalltalk MVC paradigm with pluggable views av Tong Sin Yin, Chow Pui Yee 15

Modell Spindeln i nätet Representerar & stödjer kärnan av problemet Affärslogiken Känner inte till mekanismerna som exponerar den för resten av världen Mjukvaruutecklare modellerar & implementerar oftast denna del först Kommunicerar med vyer Visa värdeförändring -> samtliga vyer meddelas (multicast) Kommunikation sker med händelser (Observable) 16

Modell (forts) Modellens ramverk skickar händelser till intresserade vyer Kärnan av modellen känner inte till vyerna Ramverket har API för att förändra och avslöja modellens tillstånd Behöver inte styras av kontrollern i GUI Kan styras av annan kontroller i annat GUI Modell som representerar ex. hårdvara Måste fortfarande meddela alla intresserade vyer 17

Vy Hanterar utdata Synligt för användaren Mätdon (Styrdon) Visar modellens tillstånd Fönster grafik text Novis- eller expertvy Bilder från www.icq.com 18

Vy (forts) Känner till modellen & kontrollern Visar värdeförändringar i modellen (Observer) Skickar användarförändringar av modellen till kontrollern (delegering) Hanterar generell uppdatering (utan förändring av modellen) exempelvis initiering av GUI genom att anropa modellen direkt Innehåller information om vyn (ex. storlek, plats, egenskaper, beteende, representation etc.) 19

Kontroller Hanterar indata från användaren som ska påverka modellen Mus, tangentbord Bearbetar händelser från användaren och anropar modellen Kontroll av indata - modellens villkor Känner till modellen & vyn Förändrar modellens status Knapptryck -> modellen anropas som reagerar därefter Nytt värde inmatas -> modellen anropas som uppdaterar med det nya värdet Kan även förändra vyn (ex. GUI-inställning) Vy och kontroll Kan kombineras Starkt kopplade (användarsynpunkt) 20

Kopplingsgraf - MVC Stäng dörr dimma ner Öppna dörr dimma ner Stängd aktivera Öppen aktivera Kopplingsgrad = 6/5=1,2 8/6=1,333... Hållbar lösning Dörrmodell Stäng dörr 21

Observer-mönster Definierar ett 1-till-m beroende mellan objekt så när ett objekt förändrar tillstånd, blir alla intressenter varse & uppdateras automatiskt Används för att koppla bort den observerade från de som observerar, den observerade behöver lite information för att meddela observerande Java-listeners,.NET (delegates) & Qtsignal/slots 22

Observer-mönstret Observer - Vy Godtyckligt objekt som vill bli varse om tillståndsförändringar i annat objekt Observable - Modell Objekt med ett intressant tillstånd & där andra objekt kan registrera sitt intresse 23

Exempel - Observer Controller BankAccount AccountView SummaryView deposit(int) setchanged() notifychanged() modelchanged() getbalance() modelchanged() getbalance() 24

Fördelar/Nackdelar - Observer + - Mönstret tillåter modellen att meddela multipla vyer Observer s kan (av)registrera sig själva Kan resultera i stort meddelandeflöde 25

Distribuerat system Mellanvara DCOM,COM+ RMI,CORBA 26

DS - systemstruktur JDBC, ODBC DCOM,COM+,RMI,CORBA 27

MVC - Problem & nackdelar Svårt att särskilja rollerna (logisk teknisk) Vy & kontroller samma objekt Qt, VB etc. IDE stödjer inte MVC på ett tillfredsställande vis Gränserna kan flyta ihop Svårt att se skillnad på GUI-logik & modell-logik Omständligt vid pyttesmå projekt Problem kan uppstå vid interface-förändringar Bakåtkompatibilitet Mycket trafik genereras mellan vy & modell även då små förändringar sker Problem speciellt vid distribuerade tillämpningar 28

MVC - Fördelar Flera olika utformade GUI till samma (ovetande) modell Utveckla modell och GUI parallellt eller separat Problemområden separeras tydligt Klarare design & kod Återanvända delar av systemet 29

MVC Fler fördelar Mjukvaran kan delas upp i mindre moduler Inkapsling av funktionalitet Separata interna förändringar av M, V, C är lättare att utföra Lätt att byta ut komponenter M, V eller C helt respektive plugga in nya GUI Modellens meddelanden når ut till samtliga vyer Förenklar distribution Klient/Server-lösning (proxy mellan GUI & modell) 30

Konstruktionsmönster Mönstervarianter - modell meddelar vyer Typ 1 - Fire and forget modellen initierar ett objekt innehållande förändringarna som undersöks närmare i vyn Modell - model.notifychanged(event e), vy.modelchanged(event e) Event e - innehåller förändringarna som vyn får läsa av - e.getchange Ok vid distribuerade modeller Typ 2 - Modellen meddelar förändring sedan får vyn fråga modellen om vad som egentligen hände Modell - model.notifychanged, vy.modelchanged Vy - model.getchange Typ 3 Hybrid Ex. labb 1, 3. Unika signaler som är informationsbärare + event ex. signalgasändrad(int nygas) 31