Lösningar till tentamen i EDAF25

Relevanta dokument
Lösningar till tentamen i EDAF25

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

4.7 Observatörsmönstret

LÖSNINGSFÖRSLAG. Tentamen. Objektorienterad modellering och design. EDA665, 4 poäng

Lösningsförslag till tentamen

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

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

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design Helsingborg

Designmönster. Kapitel Kommandomönstret

Tentamen i Objektorienterad modellering och diskreta strukturer

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

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

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Tentamen i Objektorienterad modellering och design Helsingborg

Projekt 2 XL Schema designmöten

Tentamen i Objektorienterad modellering och design Helsingborg

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.

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

Konstruktion av klasser med klasser

Projekt 2 XL. Observer-mönstret

HT1 2015, FÖRELÄSNING 14 (INFÖR TENTAN)

Tentamen i Objektorienterad modellering och design

Information. Computer

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Projekt 2 XL Klassen Gui

Lösningsförslag till tentamen

Tentamen i Objektorienterad modellering och design Helsingborg

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

Föreläsning 13 Innehåll

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

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

Svaret kan ges i Javakod (eller i UML-klassdiagram). public class A { B minb;... } public class B { <B:s många variabler och metoder> } Lösning:

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

HT2 2015, FÖRELÄSNING 15 (XL-PROJEKTET)

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Tentamen i Objektorienterad modellering och diskreta strukturer

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Objektorienterad programutveckling, fk

Tentamen. DD2385 Programutvecklingsteknik vt 2015 Fredagen den 5 juni 2015 kl Hjälpmedel: penna, suddgummi, linjal

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

Föreläsning 12: Exempel och problemlösning

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

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

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

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

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

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Objektorienterad Programmering (TDDC77)

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Övningsuppgifter i Objektorienterad modellering och design (OMD) Helsingborg EDAF25

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

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

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

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

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

Tentamen LÖSNINGSFÖRSLAG

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

Lösningsförslag till exempeltenta 2

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

HT1 2013, FÖRELÄSNING 5

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

Lösningsförslag till tentamen

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Lösningsförslag till tentamen

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

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

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Lösningsförslag till tentamen

OOP Objekt-orienterad programmering

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Tentamen. Lösningsförslag

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

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

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

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

Lösningsförslag till tentamen i OOP, HI1027 Fredag 21 oktober 2011

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

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

TENTAMEN OOP

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

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

Förra föreläsningen. Dagens agenda. Command Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Föreläsning 7. Träd och binära sökträd

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

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

DAT043 - Föreläsning 7

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

OOP Objekt-orienterad programmering

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

Transkript:

Lösningar till tentamen i EDAF25 1 juni 2017 Lösning 1 Se figur 1. Figure 1: Tillståndsdiagram espressomaskin Lösning 2 (a) Kompositmönstret (b) Se figur 2 (c) Se figur 3 : Square : Drawing : Group : Circle Figure 2: Objektdiagram Drawinginstans :Drawing :Group :Circle :Square Actor Figure 3: Sekvensdiagram för anrop av 1

Lösning 3 /* FilteredList */ public class FilteredList extends ArrayList<String> { private Filter filter = new AllStrings(); public String tostring() { StringBuilder builder = new StringBuilder(); for (String string : this) { if (filter.accept(string)) { builder.append(string).append( \n ); return builder.tostring(); private void setfilter(filter filter) { this.filter = filter; public static void main(string[] args) { FilteredList list = new FilteredList(); list.add( good ); list.add( morning ); list.add( sir ); System.out.println(list); list.setfilter(new LongStrings()); System.out.println(list); public interface Filter { boolean accept(string string); public class LongStrings implements Filter { public boolean accept(string string) { return string.length() >= 4; public class AllStrings implements Filter { public boolean accept(string string) { return true; 2

Lösning 4 (a) I ramverket finns en klass DrawingEditor där sub-klasser till Shape skapas. Eftersom DrawingEditor inte känner till användarens specialiseringar av shape går inte det. (b) Med en abstrakt fabriksmetod create() som implementeras av användaren i en sub-klass till DrawingEditor kan problemet lösas, se klassdiagrammet i figur 4. (c) javakod... class myeditor extends DrawingEditor { Shape create(kind:string) { if (kind.equals ( Circle)) return new Circle(); else if (kind.equals ( Square)) return new Square(); else <felhantering...t ex return null> DrawingEditor create(kind:string): Shape 1 0..* Shape move(dx int,dy int) edit() Framework Supplied by user Circle Square MyEditor create(kind:string): Shape «creates» Figure 4: Ramverk DrawingEditor En abstrakt fabrik löser inte problemet om den konkreta fabriken måste instansieras i ramverket eftersom den är en del av användarens specialisering och därmed okänd för ramverket. Lösning 5 (a) Javakod för en MVC modellering mha observer-ramverket public class Switch extends Observable { private boolean on = false; public void toggle() { on =!on; setchanged(); notifyobservers(); public boolean ison() { return on; 3

public class Control implements ActionListener { private Switch switch_; public Control(Switch switch_, View view) { this.switch_ = switch_; view.addactionlistener(this); public void actionperformed(actionevent e) { switch_.toggle(); public class View extends JButton implements Observer { private Switch switch_; public View(Switch switch_) { super( OFF ); this.switch_ = switch_; switch_.addobserver(this); public void update(observable o, Object arg) { setlabel(switch_.ison()? ON : OFF ); public class Frame extends JFrame { public Frame() { Switch switch_ = new Switch(); View view = new View(switch_); Control control = new Control(switch_, view); add(view); setvisible(true); pack(); public static void main(string[] args) { new Frame(); (b) Klassdiagram i figur 5 Lösning 6 (a) Det maximala flödet i nätverket är 19 (b) och kan beräknas med hjälp av Ford-Fulkersons algoritm: 1) sök en utökande väg 2) öka flödet längs den vägen och beräkna residualgrafen 3) upprepa tills det inte längre finns någon utökande väg. (c) Matrisrepresentation av grafen Start A B C D Slut Start 0 10 0 10 0 0 A 0 0 4 2 8 0 B 0 0 0 0 0 10 C 0 0 0 0 9 0 D 0 0 6 0 0 10 Slut 0 0 0 0 0 0 4

Button setlabel(string) addactionlistener(actionlistener) «interface» ActionListener + actionperformed(actionevent) View +View(Switch) Control + Control(Switch, View) «interface» Observer + update(observable, Object): void Switch - on: boolean + toggle(): void + ison(): boolean Observable addobserver(observer) Figure 5: MVC Lösning 7 T1 E Klassen Slot är visserligen en abstrakt klass men de två metoderna är inte mallmetoder. En mallmetod implementeras i basklassen och utgör skelettet av en algoritm. Ett eller flera steg i algoritmen utelämnas och implementeras istället i subklasserna. T2 E Ingen av subklasserna i exemplet har någon referens till något objekt av typen Slot. T3 A En klass kan ha flera olika ansvar (brott mot SRP) utan att någon kod eller information dupliceras (DRY). På samma sätt kan samma kod ha olika ansvar i olika kontext. T4 C LSP handlar visserligen om arv (generalisering) men säger inte att det ska undvikas helt. LSP är snarare en försäkran att om arv tillämpas måste det göras korrekt. Är inte det möjligt är det bättre att överväga alternativa relationer och sätt att kapsla in beteenden i klasser. T5 A Att designen är stel (rigid) betyder att det är svårt att göra enkla förändringar eftersom det för med sig en rad ändringar i beroende moduler. T6 B Genom att använda kompositmönstret bryter man mot SRP eftersom komponentsinterfacet tillåts omfatta ansvar både för att hantera strukturen och det ursprungliga ansvarsområdet. T7 D eller E. Paketet ligger i zone of pain i A-I grafen vilket innebär att det är både stabilt och konkret. SAP säger att ett stabilt paket bör vara abstrakt och omvänt att ett konkret paket bör vara instabilt. Ett sätt att ta sig ur denna zon är att öka instabiliteten eller abstraktheten hos model-paketet. Med tanke på den relativt stora mängden klasser med beroenden till model vore det bättre att istället försöka öka abstraktheten i model (dvs lägga till abstrakta klasser och lyfta ut konkreta). Klasserna i exemplet är endast synliga i paketet model vilket innebär att antalet ingående beroenden är oförändrat efter att Slot lyfts ut (det fanns inga ingående beroenden till slot). Samtidigt ökar antalet utgående beroenden (subklasserna till Slot får beroende till ett annat paket) vilket innebär att paketet kanske blir mer instabilt (beroende på om subklasserna hade utgående beroenden innan förändringen). I och med att en abstrakt klass lyfts ut minskar abstraktheten. 5