Fönstersystem. Objektorientering och händelsebaserad programmering. Applikation. Interaktionstoolkit. Händelsehanterare och grafiktoolkit

Relevanta dokument
GUI-programmering. Gustav Taxén Martin Berglund DH2640 Grafik och Interaktionsprogrammering VT 2008

Objektorientering i allmänhet

Objektorientering och händelsebaserad programmering. Gustav Taxén

Frameworks. GUI till tusen. GUI till tusen. Sampling architectures. Inmatningstyper

GUI /ll tusen. GUI /ll tusen. Java/Swing. Top Level Containers. General Purpose Containers. GrIP-vt2010-GUI-programmering Cristian Bogdan

GUI-programmering. Gustav Taxén

Model View. View Controller. Model View Controller. Observer. GrIP-vt2010-GUI-programmering Cristian Bogdan

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

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

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

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

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

Lektion Händelsehanterare

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

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

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

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

Lösningar till tentamen i EDAF25

Java-concept och Swing. Swing low, sweet chariot

Lösningar till tentamen i EDAF25

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

Frames, menyer och GUI-program

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

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

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

MVC-mönstret. model-view-control i Swing

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

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

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

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

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

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

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna

Laboration 3 GUI-programmering

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

In- och utenheter. Händelsebaserad programmering i GLUT. Interrupt-baserad interaktion. Sampling / polling. Händelsebaserad interaktion (forts.

Lösningar för tenta 3 DAT043,

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

DAT043 - Föreläsning 7

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

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

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.

Informationsvisualisering

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

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

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 00 - juni - 17 Tentamen i Objektorientering och Java Skrivtid 5 h

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Objektorientering (OO)

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Grafiska komponenter.

Konstruktion av klasser med klasser

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Grafiska användargränssitt och händelsehantering

Händelsestyrda program

Designmönster/Design patterns

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

Laboration 15 Grafiskt användargränssnitt

Lösningsförslag till tentamen

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

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

Grafiska användargränssnitt i Java

Tentamen Programmering fortsättningskurs DIT950

Grafiska användargränssnitt i Java

Kort om klasser och objekt En introduktion till GUI-programmering i Java

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

OOP Objekt-orienterad programmering

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Tentamen i Objektorienterad modellering och diskreta strukturer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Grafiskt användargränssnitt (GUI-Graphical User Interface) intro Komponenter

Designmönster, introduktion. Vad är det? Varför skall man använda mönster?

Mer om grafiska komponenter. Händelsestyrda program

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers. Exempel: FlowLayout. Klassen FlowLayout

Tentamen i Objektorienterad modellering och design

DOA Konstruktion av gränssnitt 5 april 2004 av Björn Eiderbäck

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

Akronymer. CD5130 OOP, fk. Mjukvarumönster. Mjukvarumönster. Mjukvarumönster, forts. Mjukvarumönster, forts

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

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

TENTAMEN. Kurs: Applikationsutveckling i Java 5DV135. Ansvarig lärare: Johan Eliasson. HT12 Datum: Tid: kl

OOP Objekt-orienterad programmering

Design och konstruktion av grafiska gränssnitt

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Föreläsning 8. Designmönster

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och design Helsingborg

DAT043 - föreläsning 8

" «Observable» DataGenerator" betyder att klassen DataGenerator ärver från den abstrakta klassen Observable.

Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document

Projekt 2 XL. Observer-mönstret

Inkapsling (encapsulation)

Transkript:

Objektorientering och händelsebaserad programmering Gustav Taxén gustavt@nada.kth.se Fönstersystem Applikation Interaktionstoolkit Händelsehanterare och grafiktoolkit Operativsystem Hårdvara 1

Frameworks Erfarenheten visar att det kan vara knepigt att hantera toolkits. Om allt är "tillåtet" är det lätt att applikationer blir inkonsekventa eller ser "fula" fula" ut. Ett framework är en uppsättning klasser (abstrakta och vanliga) som "påtvingar" ett visst sätt att arbeta. Javas framework för fönsterhantering heter Swing. Microsofts motsvarighet heter MFC (som( nu är på väg att ersättas av.net). Frameworks Koda med klassbibliotek Koda med framework Min kod Framework Kod i klassbibliotek Min kod, brukar kallas för callbacks. 2

Frameworks Ett vanligt sätt att arbeta med frameworks är att man subklassar någon form av basklass med grundfunktionalitet.. Sedan överlagrar man de metoder som man intresserar sig för. import java.awt.*; import javax.swing.*; public class MyFrame extends JFrame { public void paint(graphics g) { g.drawstring("hello", 10, 50); public static void main(string[] args) { MyFrame f = new MyFrame(); Inmatningstyper Request Lämna över kontrollen till användaren ndaren och vänta på att något sker. Exempel: : terminal i Unix. Sampling / polling Läsa av värdet hos en enhet så ofta som möjligt. Exempel: Spela in ljud från ljudkort 3

Inmatningstyper: : Events Interrupt-subrutin Inenhet Eventkö Dispatcher Systemet placerar förändringar i en kö. Beta av kön vid lämpliga tillfällen llen. Skicka en s.k. event- instans med information om varje förändring till alla callbacks som är "intresserade". Callbacklista Callback Model View Controller En design pattern för användargr ndargränssnitt. Utvecklades under sent 70-tal, bl.a. för NeXT-datorn datorn. Exempel: Flygsimulator Model - simuleringsrutiner,, etc. Controller - joystick kopplad till datorn View - vy genom cockpitfönstret 4

Model View Controller Model Simulering etc. Ändra roder Controller Joystick med knappar Hämta data Modifiera vyn 3D-vy View Om gränssnitten mellan de tre komponenterna inte ändras kan vilken som helst av dem bytas ut! UML Både en mjukvarudesignprocess och en serie diagramtyper. Utvecklades av företaget Rational i mitten av 90-talet. Är idag standardiserat och används nds överallt i industrin. Ger dock mycket begränsad info om hur användargr ndargränssnittetnssnittet ska se ut! 5

UML: Use case diagrams En abstraktion av en eller flera processer, d.v.s. ett scenario. Visar aktörer och use cases, d.v.s. vad aktörerna gör. http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm UML: Klassdiagram http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm 6

UML: Interaktionsdiagram Visar hur meddealanden skickas mellan klassinstanser i systemet. Ger en översikt över processer i systemet. http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm UML: Tillståndsdiagram Visar hur systemet går mellan olika tillstånd nd. http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm 7

UML: Aktivitetsdiagram Liknar tillståndsdiagrammet men fokuserar på aktivitet istället llet. En aktivitet behöver inte vara detsamma som ett tillstånd nd. Kan motsvara funktioner som användaren ndaren aktiverar. http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm UML: Fysikdiagram Används nds för att visa relationen mellan hård- och mjukvara i systemet. Kan också användas ndas för att visa hur systemet är distribuerat över olika maskiner, t.ex.. i ett nätverk. http://pigseye.kennesaw.edu/~dbraun/csis4650/a&d/uml_tutorial/index.htm 8

Design patterns Utgår från arkitekten Alexanders arbete på 70- talet. Alexander försökte se mönster i hur man löst återkommande problem inom arkitektur och skrev en bok där han beskriver lösningarna. Idén togs upp på allvar inom systemdesign i mitten av 90-talet. Den mest kända boken är "Design Patterns: Elements of Reusable Object-Oriented Oriented Software" av Gamma, Helm, Johnson, och Vlissides. Design patterns Namn och generell typ Intent (vad( den gör) Also Known As Motivation Applicability Structure (ett( UML-diagram) 9

Design patterns Participants (beskr( beskr. av klasser som ingår) Collaborations (hur( klasserna arbetar tillsammans) Consequences (av( att använda nda mönstret) Implementation Sample code Known uses Related patterns Observer Ett av de vanligaste designmönstren nstren. Tillåter att ett objekt meddelas om det gjorts en förändring i ett annat objekt, utan att objekten görs starkt knutna till varandra. 10

Observer Observer 11

Observer i Java package java.util; public interface Observer { void update(observable o, Object arg); public class Observable { private Observer[] arr; public void addobserver(observer o) { arr.addelement(o); public void notify(object arg) { for (int i = 0; i < arr.size; i++) { arr[i].update(this, arg); Det här är inte hela sanningen, men principen är densamma i den riktiga javaimplementationen! Implementering av MVC Bygger på observer-mönstret nstret. Vy-instanserna registrerar sig hos modellen. När modellen ändras anropar den update() hos vyerna. 12

Problem med MVC Det kan vara svårt att separera kontroller och vy i moderna grafiksystem (ta t.ex.. en slider). Men det lönar sig i princip alltid att separera datamodellen från applikationsmodellen, d.v.s. att hantera data på ett sådant sätttt att data inte är beroende av presentationen eller uppdateringen. Events i Java Påminner mycket om observer-mönstret nstret, men de som "lyssnar" måste implementera mer än en metod. Varje metod motsvarar något som hänt hos enheten. 13

Events i Java Events i Java package MyTests; import java.awt.*; import java.awt.event.*; public class MyFrame1 extends Frame implements WindowListener{ public void windowopened(windowevent e) { public void windowclosing(windowevent e) { System.exit(0); public void windowclosed(windowevent e) { public void windowiconified(windowevent e) { public void windowdeiconified(windowevent e) { public void windowactivated(windowevent e) { public void windowdeactivated(windowevent e) { public static void main(string [] args) { MyFrame1 frame = new MyFrame1(); frame.addwindowlistener(frame); frame.setvisible(true); 14

...som inre klass package MyTests; import java.awt.*; import java.awt.event.*; class MyWindowListener implements WindowListener { public void windowopened(windowevent e) { public void windowclosing(windowevent e) { System.exit(0); public void windowclosed(windowevent e) { public void windowiconified(windowevent e) { public void windowdeiconified(windowevent e) { public void windowactivated(windowevent e) { public void windowdeactivated(windowevent e) { public class MyFrame2 extends Frame { public static void main(string [] args) { Frame frame = new MyFrame2(); frame.addwindowlistener(new MyWindowListener()); frame.setvisible(true); Adaptors Förenklar hanteringen av events. Varje adaptor implementerar ett Listener- interface, men alla metoderna är tomma. Om man subklassar en adaptor behöver man alltså bara skriva precis den kod som behövs vs. 15

Adaptors class MyWindowAdapter extends WindowAdapter { public void windowclosing(windowevent e) { System.exit(0); public class MyFrame3 extends Frame { public static void main(string [] args) { Frame frame = new MyFrame3(); frame.addwindowlistener(new MyWindowAdapter()); frame.setvisible(true);...eller med anonym subklass public class MyFrame4 extends Frame { public static void main(string [] args) { Frame frame = new MyFrame4(); frame.addwindowlistener(new WindowAdapter (){ public void windowclosing(windowevent e) { System.exit(0); ); frame.setvisible(true); 16

Java/Swing Gränssnitt i Java (och( de flesta andra GUI-system) är hierarkiska. Man börjar med en s.k. Top Level Container, och lägger till komponenter i den. Vissa komponenter är också containers och kan innehålla andra komponenter. Man specificerar dimensioner och position för varje komponent explicit eller via s.k. Layout Managers. Separable Model Architecture Varje komponent hanterar view/control. Själva utritningen är delegerad till ett s.k. UI object (för( att man ska kunna ändra look- and-feel, t.ex.)..). Varje komponent har en modell kopplad till sig. 17

Separable Model Architecture De flesta komponenters modell har enbart att göra med själva gränssnittet (t.ex. om en checkbutton är nedtryckt eller ej). Vissa komponenters innehåll kan dock bara definieras av applikationen (t.ex. innehållet i en lista). ). Några faller mitt emellan (t.ex.. sliders). Man ersätter en modell genom att subklassa defaultmodellen och sedan anropa setmodel() på komponenten. Separable Model Architecture Från Swings perspektiv är modellen alltså uppdelad på en mängd olika widgets. Det gör att den är svår att ersätta tta. De flesta program har en eller ett par klasser som innehåller ller hela modellen och skickar dessa värden till Swings widgets. Modellen finns alltså på två nivåer er: dels applikationsnivån, dels i varje widget. 18

Containers, Controls och Displays Top Level Containers: : Applet, Dialog, Frame. General-Purpose Containers: : Panel, Scroll Pane, Split Pane, Tabbed Pane, Tool Bar. Special-Purpose Containers: : Internal frame, Layered Pane, Root Pane. Basic Controls: : Buttons, Lists, Menus, etc. Uneditable Info Displays: : Label, Progress Bar, Tool Tip. Interactive Displays of Highly Formatted Information: : File Chooser, Color Chooser, etc. Top Level Containers Varje komponent kan bara befinna sig på en plats i hierarkin. Varje Top Level Component har en Content Pane som innehåller hierarkin. Man kan lägga till en menu bar (menyrad) ovanför sin content pane. 19

General Purpose Containers Special Purpose Containers 20

Basic Controls Uneditable Info Displays 21

Formatted Info Displays Layout Managers Det är oftast en nackdel att specificera position och dimension för komponenter explicit. Om användaren ndaren t.ex. ändrar fönstrets storlek kommer inte storleken på komponenterna att hänga med. Layout managers hjälper en att räknakna ut positioner och dimensioner dynamiskt! Man kan skapa egna layout managers. 22

Händelsehantering public class Beeper... implements ActionListener {...... // where initialization occurs: // create the button first, then: button.addactionlistener(this); public void actionperformed(actionevent e) { // Make a beep sound... 23