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

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

Lösningar till tentamen i EDAF25

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

Kopiering av objekt i Java

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

Lösningar till tentamen i EDAF25

Lösningsförslag till tentamen

Tentamen LÖSNINGSFÖRSLAG

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

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

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Tentamen i Objektorienterad programmering

Laboration 4: Game of Life

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

TDDD78 Viktiga begrepp, del 2

Rita Egna Bilder, Timer

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

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

Tentamen i Objektorienterad programmering

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

LYCKA TILL!!! TENTAMEN I Programmeringsteknik F1. Var vänlig och läs detta: CTH TIN 211. DATAVETENSKAP Göteborg ( ) TENTAMEN

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

lgammal2.txt // Lösningar till gammal tentamen // Uppgift 1 a

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Generisk klass med typparameter Inre klass - ListIterator

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

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

Labbinstruktioner för Java/Swing

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

Lektion Händelsehanterare

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Objektorienterad Programmering (TDDC77)

HT1 2013, FÖRELÄSNING 5

Lösningar för tenta 3 DAT043,

OOP Objekt-orienterad programmering

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

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

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 13 Innehåll

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

Föreläsning 5-6 Innehåll

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

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Computer projekttid. Objektorienterad modellering och diskreta strukturer / design. Rapporter från verkligheten. EDAF10 i HT2

Tentamen i Objektorienterad programmering E

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

4.7 Observatörsmönstret

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

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

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

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

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

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

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

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen LÖSNINGSFÖRSLAG

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Konstruktion av klasser med klasser

Tentamen LÖSNINGSFÖRSLAG

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Lösningsförslag till tentamen

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

Malmö högskola 2008/2009 CTS

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Projekt 2 XL. Observer-mönstret

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

DAT043 - Föreläsning 7

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

Föreläsning 2 Innehåll

Tentamen i Objektorienterad programmering E

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

TENTAMEN OOP

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA550 DAG: TID: 8:30 12:30

OOP Objekt-orienterad programmering

Föreläsning 14: Grafik & mera händelsehantering

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP och DSV1:P2

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

Malmö högskola 2007/2008 Teknik och samhälle

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund

TENTAMEN OOP

Lösningsförslag övning 2.

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Transkript:

Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 8 Två designmönster, MVC och Observer/Observable. Designrekommendation för klasser. Efter rast kommer Joachim von Hacht och presenterar fortsättningskursen Föreläsning 8 Katarina Blom 1 2 MVC Allmän princip: Klasser ska vara löst kopplade. MVC: Modellen känner inte till vyn eller kontrollen (kontrollen och vyn känner till modellen). Vy Modell Kontroll Exempel MVC import java.awt.color; public class Modellen{ private Color färg; public void setstarttillstånd(){ public Color avlästillstånd(){ return färg; public void uppdateratillstånd(){ if(färg.equals(color.blue)) else färg = Color.blue; 3 4

Exempel (forts) MVC import java.awt.*; import java.util.*; public class Vy extends JPanel{ private Modellen mod; public Vy(Modellen m){ mod = m; setpreferredsize(new Dimension(50,50)); public void paintcomponent(graphics g){ super.paintcomponent(g); Color f = mod.avlästillstånd(); setbackground(f); Exempel (forts) MVC import java.awt.event.*; public class Kontroll extends JButton implements ActionListener{ private Modellen mod; private Vy vy; public Kontroll(Modellen m, Vy v){ mod = m; vy = v; addactionlistener(this); public void actionperformed(actionevent e) { mod.uppdateratillstånd(); vy.repaint(); 5 6 Exempel (forts) MVC import java.awt.*; public class Main{ public static void main(string[] args){ Modellen mod = new Modellen(); mod.setstarttillstånd(); Vy vy = new Vy(mod); Kontroll kontr = new Kontroll(mod,vy); JFrame f = new JFrame(); f.add(vy,"north"); f.add(kontr,"south"); f.pack(); f.setvisible(true); f.setdefaultcloseoperation(jframe.exit_on_close); (Överkurs) Men kanske bara modellen vet om vyn behöver uppdateras? Designmönstret Observer/Observable stöds av Java. Vy Observatör Modell Observerad Kontroll 7 8

(Överkurs) Vy-klassen i Observer/Observable Låt vyn vara observatör av modellen. Vyn registrerar sig som observatör genom att implementera interfacet java.util.observer, och anmäla sig som observatör till modellen. interface java.util.observer{ void update(observable o, Object arg); (Överkurs) Vy som observatör import javax.swing.jpanel; import java.awt.*; import java.util.*; public class Vy extends JPanel implements Observer{ Modellen mod; public Vy(Modellen m){ mod = m; setpreferredsize(new Dimension(50,50)); mod.addobserver(this); public void paintcomponent(graphics g){ super.paintcomponent(g); Color f = mod.avlästillståndet(); setbackground(f); public void update(observable o, Object arg){ repaint(); 9 10 (Överkurs) Modellen observeras Modellen skrivs som subklass till java.util.observable och kan därmed bli observerad: public class Observable{ public void addobserver(observer o){... public void setchanged(){... public void notifyobservers(object arg){... (Överkurs) Modellen import java.util.observable; import java.awt.color; public class Modellen extends Observable{ private Color färg; public void setstarttillstånd(){ setchanged(); notifyobservers(); public Color avlästillståndet(){ return färg; public void uppdateramodellen(){ if(färg.equals(color.blue)) else färg = Color.blue; setchanged(); notifyobservers(); När tillståndet ändrats uppdateras objekten som observerar 11 12

(Överkurs) Kontroll uppdaterar bara modellen import java.awt.event.*; public class Kontroll extends JButton implements ActionListener{ private Modellen mod; private Vy vy; public Kontroll(Modellen m){ mod = m; addactionlistener(this); Designmönster Ett sätt att utforma program är att lära sig från beprövade mönster för lösning av återkommande problem. Vi har nu sett två designmönster: MVC-arkitekturen Observer/Observable public void actionperformed(actionevent e) { mod.uppdateratillstånd(); 13 14 Det finns design-rekomendationer för hur man utformar en klass För publika klasser (som designas för en allmän användning) kan man följa nedastående rekommendation: Klassen bör ha en parameterlös konstruktor. De ärvda metoderna equals och hashcode bör omdefineras. Metoderna ärvs från Object. Det bör finnas en tostring metod. Klassen bör implementera interfacet Clonable. Klassen bör implementera interfacet Serializable. Obs, det finns många rekommendationer, detta är en 15 Parameterlös konstruktor Allmänt: Om man i en klass inte definierar någon konstruktor får man automatiskt en utan parametrar som inte gör någonting. Om man definierar minst en konstruktor får man inte någon parameterfri variant automatiskt. I konstruktorn för en subklass läggs ett anrop av superklassens parameterfria konstruktor till (ifall man inte har gjort ett anrop till någon annan konstruktor). java-systemet utgår från att det finns en parameterlös konstruktor. 16

Metoden equals() i klassen Object equals() finns definierad i Object (och ärvs alltså av alla andra klasser) o1.equals(o2) returnerar true oom o1 och o2 refererar till samma objekt. De flesta inbyggda klasser definierar därför sin egen equals()-metod. Att omdefinera equals()-metoden (Obs Överkurs) Följande kontrakt bör följas: Reflexivitet: x.equals(x) == true Symmetri: x.equals(y) == true <=> y.equals(x) == true Transivitet: (x.equals(y) == true och y.equals(z) == true ) => x.equals(z) == true Konsistens: Om tillstånden påxochyinte förändras ska anropet x.equals(y) alltid ge samma svar. Icke null: x.equals(null) är alltid false 17 18 Metoden hashcode() hashcode() finns definerad i Object (och ärvs alltså av alla andra klasser). hashcode() används av klasser som implementerar Hashtabeller (tex HashMap och Om man omdefinerar equals() bör man omdefinera hashcode(). Om x.equals(y) == true så ska x.hashcode() == y.hashcode() Att klona objekt (Överkurs) Metoden clone() returnerar en kopia av objektet. clone() finns definerad i klassen Object. Om en klass implementerar Cloneable då returnerar metoden clone() en Shallow copy av objekt av klassen. Om klassen inte implementerar Cloneable kastar metoden clone() ett CloneNotSupportedException Det gäller att (kontraktet för clone()): o.clone()!=o o och o.clone() måste vara instanser av samma klass. (o.clone()).equals(o) 19 20

Metoden tostring() Metoden tostring() finns definerad i klassen Object De flesta klasser omdefinierar tostring() Det finns metoder i standardklasser (tex println() som anropar klassens tostring()-metod Serialisering (Överkurs) Att transformera ett objekt till en byteström kallas serialisering. Serialiserade objekt kan sparas på filer, skickas iväg över näteverk. Klasser som implementerar Serializable kan serialiseras. Interfacet har inga metoder. Det räcker att bara skriva implements Serializable så implementeras interfacet. 21 22