Tentamen i Objektorienterad modellering och design Helsingborg

Relevanta dokument
Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design Helsingborg

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

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

Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och diskreta strukturer

Lösningar till tentamen i EDAF25

Lösningar till tentamen i EDAF25

Tentamen, Algoritmer och datastrukturer

Tentamen i Objektorienterad modellering och design Helsingborg

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

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

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

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

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

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

Information. Computer

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

Extentamen i 2D1359 Objektorinterad modellering programmering och analys Tisdag den 13 oktober 1998 kl

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

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

TENTAMEN I DATAVETENSKAP

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

4.7 Observatörsmönstret

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

Tentamen i Objektorienterad modellering och design (OMD) Helsingborg

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

Inkapsling (encapsulation)

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

Tentamen Datastrukturer (DAT037)

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

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

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

Föreläsning 5-6 Innehåll

TENTAMEN OOP

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

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

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

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

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

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

PROGRAMMERINGSTEKNIK TIN212

7,5 högskolepoäng. Objektorienterad systemutveckling I Provmoment: Ladokkod: 21OS1B Tentamen ges för: Lycka till! /Peter & Petter

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

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

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

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

Tentamen. DD2385 Programutvecklingsteknik vt Tisdagen den 26 maj 2009 kl Inga hjälpmedel utom penna, sudd och linjal

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

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Tentamen Programmering fortsättningskurs DIT950

Tentamen i Algoritmer & Datastrukturer i Java

Designmönster. Kapitel Kommandomönstret

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Tentamen Datastrukturer (DAT036)

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Introduktionsmöte Innehåll

Tentamen, EDA017, Programmeringsteknik för C, E, I och Pi

Tentamen, EDAA10 Programmering i Java

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

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

13 Prioritetsköer, heapar

Objektorienterad Systemutveckling 1 (7,5 hp)

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Malmö högskola 2008/2009 CTS

DAT043 Objektorienterad Programmering

Tentamen i Programmeringsteknik I

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

Tentamen Datastrukturer (DAT036)

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

Tentamen Datastrukturer (DAT036)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Objektorienterad Programmering (TDDC77)

Seminarium 13 Innehåll

TENTAMEN OOP

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

Kurskod D0010E Datum Skrivtid 5tim

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

Tentamen i Algoritmer & Datastrukturer i Java

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

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

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

Transkript:

Lunds Tekniska Högskola Datavetenskap Emelie Engström, Ulf Asklund Tentamen EDAF25 2016 06 03, 14:00 19:00 Tentamen i Objektorienterad modellering och design Helsingborg Tentamen består av en teoridel om totalt 5 poäng och en problemdel innehållande 4 uppgifter med totalt 25 poäng. För godkänt betyg kommer att krävas högst 16 poäng. Vid bedömningen kommer hänsyn att tas till lösningens kvalitet. UML-diagram skall ritas i enlighet med UMLhäftet. Man får förutsätta att det finns standardkonstruerare i alla klasser. De behöver ej redovisas i lösningar. Hjälpmedel: Koffman & Wolfgang: Data Structures Martin: Agile Software Development Andersson: UML syntax Holm: Java snabbreferens 1

Teorifrågor Denna del innehåller uppgifter med påståenden och anledningar. För varje uppgift svara med ett av följande alternativ: A Både påståendet och anledningen är korrekta uttalanden och anledningen förklarar påståendet på ett korrekt sätt. B Både påståendet och anledningen är korrekta uttalanden, men anledningen förklarar inte påståendet. C Påståendet är ett korrekt uttalande, men anledningen är falsk. D Påståendet är falskt, men anledningen är ett korrekt uttalande. E Både påståendet och anledningen är falska. Det går bra att svara direkt i formuläret. Glöm då inte att lämna in formuläret tillsammans med övriga lösningar. (5p) T1 T2 T3 T4 T5 Påstående Syftet med SRP är att hålla nere storleken på klasserna. Det enda sättet att följa OCP för en klass är genom att definiera subklasser för den. Brott mot LSP kan leda till bräcklig kod. Aggregering är att föredra framför komposition om objektet vars beteende man tänker använda har ett egenvärde utanför objektet som använder det. I observatörsmönstret är observatörer löst kopplade till ett observerbart objekt Anledning Genom att använda SRP sprider man ut funktionalitet över flera klasser. Subklasser kan utöka basklassens beteende utan att man behöver ändra i dess kod. LSP innebär att man ser till att man inte förändrar beteendet hos den basklass man utökar Vid aggregering instansieras det aggregerade objektet oftast i ägarens konstruktor. Det observerbara objektet vet inte något om observatörerna mer än att de implementerar observatörsinterfacet. Svar A,B,C, D,E 2

Problem Ett företag vill utveckla mjukvara för att styra en kaffeautomat som finns tillgänglig för studenter och lärare på Campus. Utvecklingsteamet som har tagit sig an uppgiften har påbörjat design och implementering. Längst bak i tentan finns en bilaga som innehåller: En kort beskrivning av funktionaliteten hos den tilltänkta kaffeautomaten En initial design i form av ett tillståndsdiagram (Fig 2) och ett klassdiagram (Fig 1) Javakod för en av de beskrivna klasserna. 1 Implementera klassen VendingMachine i control-paketet i enlighet med klassdiagrammet och tillståndsdiagrammet i bilagan. VendingMachine delegerar delar av logiken till klassen BeverageBuy som redan är skriven och given i bilagan. Lösningen redovisas med Java-kod. 2 Uppdragsgivaren i föregående uppgift vill ha en mer flexibel design och önskar dels öppna upp för möjligheten att lägga till fler drycker och dels för möjligheten byta ut hårdvaran, i båda fall utan att behöva ändra i control-paketet. Ändra designen så att control-paketet inte längre har beroenden till hardware-paketet. Låt vidare Beverage vara en strategi i klassen BeverageBuy istället för en enum-typ. a. Lösningen redovisas med ett fullständigt klassdiagram. För klasserna VendingMachine och BeverageBuy behöver inte metoder och attribut räknas upp. För övriga klasser gäller att all väsentlig information ska finnas med. b. Vilka metoder i klassen BeverageBuy (se java-kod i bilagan) behöver skrivas om med tanke på förändringen av Beverage? Svara med metodnamn. 3 Nu börjar utvecklingsteamet tänka vidare kring möjliga utvidgningar och får för sig att erbjuda tillbehör till dryckerna. De skissar på ett exempel där extra socker ökar priset på den valda drycken med 2kr och extra mjölk kostar 3kr. Tillbehören kan inte beställas separat utan endast som tillägg till någon av de tre ursprungliga dryckesvalen (kaffe, te eller choklad). Två mönster som kan kombineras för att lösa detta är dekoratör (decorator) och mallmetod (template method). Visa hur. Låt klassen BeverageDecorator vara en dekoratör av klassen Beverage (som då alltså inte kan vara en enum-typ längre). BeverageDecorator innehåller också mallmetoder för de konkreta klasserna Milk och Sugar. Ett objekt av typen Beverage ska kunna tillhandahålla sin totala kostnad cost() och en beskrivning av sig själv getdescription() (d.v.s. en lista över sitt innehåll). Skriv java-kod för klasserna i den beskrivna lösningen (Beverage, BeverageDecorator, Coffee, Tea, Chocolate, Milk och Sugar). (8p) (8p) (5p) 3

4 Skriv pseudokod för en algoritm som returnerar kortaste vägen från noden v till noden u i grafen G. Du ska använda Dijkstras algoritm och utnyttja en prioritetskö pq för att hålla reda på noder och deras beräknade avstånd till ursprungsnoden. Elementen i denna prioritetskö beskrivs på formen {nod, avstånd i din pseudokod. Du kan förutsätta att elementen i prioritetskön jämförs med avseende på avståndet. Eftersom prioritetskön inte har någon metod för att söka upp ett visst element i kön får du använda en map vertexmap för att hålla reda på nodernas hittills kortast beräknade avstånd från ursprungsnoden. I denna map kan nycklarna vara noder och deras tillhörande värde det avstånd som successivt uppdateras. Vidare behöver du ytterligare en datastruktur för att hålla reda på vilka noder som är helt klara. För detta kan du använda en mängd done där du kan lägga de noder som hämtats ur prioritetskön. (4p) 4

Bilaga - VendingMachine Spec: I automaten kan man köpa tre olika sorters varma drycker: kaffe, te eller varm choklad. Kaffet kostar 10kr, choklad kostar 8kr och te kostar 5kr. Automaten har 5 knappar (3 för dryckesval, en för att avbryta köpet och en för att verkställa köpet) Utöver dessa insignaler finns ett myntinkast som läser av värdet på instoppade mynt. Ett normalt köp går till som följer: 1) Kunden stoppar pengar i automaten. 2) Värdet av instoppade mynt visas i automatens display. 3) Kunden väljer dryck. 4) Kunden bekräftar köpet. 5) Drycken serveras. 6) Eventuell växel betalas tillbaks. Kunden kan också välja att avbryta köpet och ska då få alla instoppade pengar tillbaka. Design: Systemet består av två paket: ett paket control som innehåller logiken och ett paket hardware som utgör ett gränssnitt mot hårdvaran. I control-paketet ansvarar klassen VendingMachine för interaktionen med hårdvaran och delegerar till BeverageBuy att hålla reda på status för en påbörjad beställning. Alla insignaler till maskinen (d.v.s. knapptryckningar och myntinkast) hanteras av klassen Input i kontrollpaketet som i sin tur anropar de publika metoderna i klassen VendingMachine. control BeverageBuy -state: int +insert(double) +select(beverage) +buy() +abort() VendingMachine order -amount: double -selected: Beverage +BeverageBuy(double) +getamount():double +select(beverage) +selectedbeverage(): Beverage +increase(double): Double +buy():double +ispayed():boolean +abort(): Double hardware Display +set(string) BeverageDistributor +dispense(beverage) MoneyHandler +release(double) «enumeration» Beverage Coffee Tea Chocolate Input Figur 1: Klassdiagram kaffeautomat 5

buy[payed]/ dispense selected, release coins Idle abort/ release coins insertcoins(x)/ amount += x abort/ release coins insertcoins(x)/ amount = x select(beverage)/ selected=beverage Selecting do/display selection select(beverage)/ selected=beverage buy[not payed] Paying do/display amount insertcoins(x)/ amount += x Figur 2: Tillståndsdiagram kaffeautomat class BeverageBuy { private double amount ; private Beverage s e l e c t e d ; public BeverageBuy ( double amount ){ this. amount = amount ; public Double getamount ( ) { return amount ; public void s e l e c t ( Beverage bev ){ s e l e c t e d = bev ; public Beverage s e l e c t e d B e v e r a g e ( ) { return s e l e c t e d ; public Double i n c r e a s e ( Double amount ){ this. amount += amount ; return this. amount ; public Double buy ( ) { switch ( s e l e c t e d ){ case COFFEE: { amount = amount 1 0 ; case CHOCOLATE: { amount = amount 8 ; case TEA: { amount = amount 5 ; s e l e c t e d = null ; return amount ; 6

public boolean ispayed ( ) { double p r i c e = 0 ; switch ( s e l e c t e d ){ case COFFEE: { p r i c e = 1 0 ; case CHOCOLATE: { p r i c e = 8 ; case TEA: { p r i c e = 5 ; return amount >= p r i c e ; public Double abort ( ) { double r e l e a s e d = amount ; amount = 0 ; s e l e c t e d = null ; return r e l e a s e d ; 7