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

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och diskreta strukturer

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

Designmönster. Kapitel Kommandomönstret

Lösningsförslag till tentamen

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design

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

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

Föreläsning 13 Innehåll

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

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

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

Tentamen i Objektorienterad modellering och design (OMD) Helsingborg

Klasshierarkier - repetition

Tentamen i Objektorienterad modellering och design Helsingborg

DAT043 - Föreläsning 7

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

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 design Helsingborg

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

Projekt 2 XL. Observer-mönstret

Lösningsförslag till tentamen

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

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

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

Kursombud. Objektorienterad modellering och diskreta strukturer / design. Agile? Designprinciper EDAF10 EDA061. Lennart Andersson. Grupper för projekt

Objektorienterad Programmering (TDDC77)

Tentamen i Objektorienterad modellering och diskreta strukturer

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

Konstruktion av klasser med klasser

Lektion Händelsehanterare

OOP Objekt-orienterad programmering

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

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

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

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

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

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

Projekt 2 XL Schema designmöten

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

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

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

JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Information. Computer

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

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

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.

Programmering för språkteknologer II, HT2014. Rum

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

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.

Tentamen LÖSNINGSFÖRSLAG

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

OOP Objekt-orienterad programmering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

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

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

HT1 2015, FÖRELÄSNING

LÖSNINGSFÖRSLAG

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

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

Föreläsningsbilder EDAF10/EDA061 Ht 2015 HT1 2015, FÖRELÄSNING 3

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

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:

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

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

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

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

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

Projekt 2 XL Klassen Gui

HT1 2015, FÖRELÄSNING

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

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

TENTAMEN OOP

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

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

Objektorienterad programutveckling, fk

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

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

12 Metaprogrammering i Java

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Transkript:

Lösningar till tentamen i EDAF25 21 aug 2017 Lösning 1 Javaklasser (många varianter finns naturligtvis): class Client { private Invoker invoker; public void newcommand(string cmdtext) { Command cmd; if (cmdtext.equals ( X)) cmd = new XCommand(); else if (cmdtext.equals ( Y)) cmd = new YCommand(); else cmd = new ZCommand(); invoker.store(cmd); cmd.execute(); public interface Command { public abstract void execute(); class XCommand implements Command { public void execute() { class YCommand implements Command { public void execute() { class ZCommand implements Command { public void execute() { class Invoker { private ArrayList<Command> mycommand = new ArrayList<Command>(); public void store(command cmd) { mycommand.add(cmd); public void docommand(int nbr) { mycommand.get(mycommand.size()-nbr).execute(); Lösning 2 (a) Javakod för en MVC modellering mha observer-ramverket 1

public class Model extends Observable { private boolean on = false; public void toggle() { on =!on; setchanged(); notifyobservers(); public boolean ison() { return on; public class Control implements ActionListener { private Model switch_; public Control(Model switch_, View view) { this.switch_ = switch_; view.addactionlistener(this); public void actionperformed(actionevent e) { switch_.toggle(); public class View extends JButton implements Observer { private Model switch_; public View(Model switch_) { super( OFF ); this.switch_ = switch_; switch_.addobserver(this); public void update(observable o, Object arg) { setlabel(switch_.ison()? ON : OFF ); (b) Klassdiagram i figur 1 Lösning 3 class NullSoundCard extends SoundCard { String getversion() { return Sound card not available! ; void playfile(string filename) { / / Do nothing SoundCard card = Hardware.getSoundCard(); if (card == null) { card = new NullSoundCard(); 2

JButton setlabel(string) addactionlistener(actionlistener) «interface» ActionListener + actionperformed(actionevent) View +View(Model) Control + Control(Model, View) «interface» Observer + update(observable, Object): void Model - on: boolean + toggle(): void + ison(): boolean Observable addobserver(observer) Figure 1: MVC System.out.println(card.getVersion()); card.playfile( mysoundfile.snd ); Lösning 4 (a) Det maximala flödet i nätverket är 11 (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 Lösning 5 (a) Klassdiagram: Start A B C D Slut Start 0 7 0 4 0 0 A 0 0 9 0 6 0 B 0 0 0 0 3 4 C 0 3 2 0 0 0 D 0 0 0 0 0 8 Slut 0 0 0 0 0 0 Window {abstract BasicWindow WindowDecorator {abstract BorderDecorator ScrollBarDecorator (b) Objektdiagram: 3

:BorderDecorator :ScrollBarDecorator :BasicWindow Lösning 6 T1 D, Användaren bestämmer själv när en ny utgåva av ett paket ska integreras men användaren ska inte behöva titta på implementeringen eller göra ändringar i paketet. Om användaren behöver ta ansvar för detta betraktas inte paketet som återanvändningsbart. T2 E, Att tillämpa Mallmetod-mönstret är tvärtom ett sätt att eliminera duplicerad kod genom att det som är gemensamt för subklasserna läggs i mallmetoder i basklassen och subklasserna endast implementerar det som skiljer dem åt. T3 C, Fabriksmetod-mönstret innebär att man använder arv för skapandet av objekt (påminner om mallmetodmönstret) och hjälper i det här fallet eftersom användaren då kan implementera sin egen editor-variant med en egen implementering av fabriksmetoden create som känner till och kan instansiera de olika Shapeobjekten som användaren väljer. En fabriksmetod kan men behöver inte finnas i en abstrakt fabriksklass. I det här fallet skulle det bara flytta problemet eftersom ramverket fortfarande behöver en instans av fabriken (och därmed känna till vilka typer av objekt som ska skapas) för att kunna delegera till denna. T4 D, Eftersom Figure är en lista av Object är det möjligt att lägga till vilken typ av komponenter som helst till en figur. Dock kommer inte metoden draw att rita ut något annat än cirklar och kvadrater om den inte uppdateras. T5 B eller D, SRP innebär att en klass bara får ha en anledning att förändras vilket i sin tur beror på kontexten (hur och var klassen används). En nyckel för att kunna avgöra om en klass följer SRP är att dess ansvar beskrivs (genom dess namn och dokumentation). Namnet i exemplet antyder att klassens ansvar är att hålla reda på en figurs uppbyggnad och en anledning till förändring kan t.ex. vara att man vill ändra konceptet figur (t.ex. precisera vilka typer av komponenter som får lov att ingå i en figur). Metoden draw skulle dock kunna behöva ändras av andra orsaker (som att man vill ändra teknik för själva bildskapandet). SRP kan alltså innebära att ansvaret för att rita dessa komponenter bör delegeras till någon annan klass. Vi har dock för lite information för att kunna avgöra det. Object är en superklass med flera ansvar som t.ex. att leverera en strängrepresentation av sig själv eller en hashkod. Figure skulle kunna ha ett tydligt ansvar (och följa SRP) även om dess komponenter inte har det. T6 A T7 B Macro visar exempel på både kommando- och kompositmönstret. Kommandomönstret handlar om att kapsla in ett anrop av ett kommando medan kompositmönstret i det här fallet handlar om att strukturera dessa anrop hierarkiskt. T8 A T9 D, LSP säger att metoder som använder referenser till basklasser måste kunna använda instanser av dess sub-klasser utan att känna till det. Således kan arv/generalisering om man inte är försiktig leda till brott mot LSP. Samtidigt är arv/generalisering ett verktyg för att undvika brott mot andra viktiga principer som t.ex. OCP och DRY. LSP säger således snarare något om hur arv ska tillämpas än att det ska undvikas. 4

T10 A, Tillståndsmönstret används precis som strategimönstret för att kapsla in varianter av beteenden för ett objekt och växla mellan dessa via metodanrop specificerade i ett interface och implenterade i olika subklasser. I tillståndsmönstret definieras dessa varianter utifrån objektets interna tillstånd. 5