Tentamen i Objektorienterad modellering och design Helsingborg

Relevanta dokument
Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och diskreta strukturer

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

Tentamen i Objektorienterad modellering och design Helsingborg

Lösningar till tentamen i EDAF25

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design

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.

Tentamen i Objektorienterad modellering och diskreta strukturer

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

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

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

Klasshierarkier - repetition

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Objektorienterad Programmering (TDDC77)

4.7 Observatörsmönstret

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

Tentamen i Objektorienterad modellering och diskreta strukturer

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

OOP Objekt-orienterad programmering

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

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

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

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

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

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

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

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

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

Konstruktion av klasser med klasser

TENTAMEN I DATAVETENSKAP

Tentamen i Objektorienterad modellering och design (OMD) Helsingborg

Arv. Objektorienterad och komponentbaserad programmering

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

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

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

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

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

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

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

Tentamen för TTIT71 Programmering kl Institutionen för datavetenskap Linköpings universitet. Uppgift 1. (2 p)

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

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

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

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

TENTAMEN OOP

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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Lösningsförslag till exempeltenta 2

OOP Objekt-orienterad programmering

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

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

Designmönster. Kapitel Kommandomönstret

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Lösningsförslag till tentamen

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

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

Tentamen i Objektorienterad programmering

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Föreläsning 13 Innehåll

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

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.

Objektorienterad programutveckling, fk

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

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

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

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

Introduktion till arv

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

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

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

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

EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design. Vad är Objektorienterad modellering?

DAT043 - Föreläsning 7

Lösningsförslag till tentamen

Observera. Tentamen Programmeringsteknik II Skrivtid:

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 12. Länkade listor

Föreläsning 5. När skall man använda implementationsarv? När skall man använda implementationsarv?

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Föreläsning 15: Repetition DVGA02

Transkript:

Lunds Tekniska Högskola Datavetenskap Emelie Engström, Ulf Asklund Tentamen EDAF25 2016 06 03 Tentamen i Objektorienterad modellering och design Helsingborg Lösningar. 1. public class VendingMachine { f i n a l s t a t i c int IDLE = 0 ; f i n a l s t a t i c int PAYING = 1 ; f i n a l s t a t i c int SELECTING = 2 ; private int private BeverageBuy o r d e r ; private Display d i s p l a y = new Display ( ) ; private B e v e r a g e D i s t r i b u t o r d i s t r i b u t o r = new B e v e r a g e D i s t r i b u t o r ( ) ; private MoneyHandler moneyhandler = new MoneyHandler ( ) ; public void i n s e r t ( double amount ){ case (IDLE ) : { o r d e r = new BeverageBuy ( amount ) ; d i s p l a y. s e t ( o r d e r. getamount ( ). t o S t r i n g ( ) ) ; d i s p l a y. s e t ( o r d e r. i n c r e a s e ( amount ). t o S t r i n g ( ) ) ; d i s p l a y. s e t ( o r d e r. i n c r e a s e ( amount ). t o S t r i n g ( ) ) ; public void s e l e c t ( Beverage beverage ){ case (IDLE ) : { o r d e r. s e l e c t ( beverage ) ; s t a t e = SELECTING; d i s p l a y. s e t ( o r d e r. s e l e c t e d B e v e r a g e ( ). t o S t r i n g ( ) ) ; o r d e r. s e l e c t ( beverage ) ; s t a t e = SELECTING; d i s p l a y. s e t ( o r d e r. s e l e c t e d B e v e r a g e ( ). t o S t r i n g ( ) ) ; public void buy ( ) { case (IDLE ) : { i f ( o r d e r. ispayed ( ) ) { d i s t r i b u t o r. d i s p e n s e ( o r d e r. s e l e c t e d B e v e r a g e ( ) ) ; moneyhandler. r e l e a s e ( o r d e r. buy ( ) ) ; 1

else { d i s p l a y. s e t ( o r d e r. getamount ( ). t o S t r i n g ( ) ) ; public void abort ( ) { case (IDLE ) : { moneyhandler. r e l e a s e ( o r d e r. abort ( ) ) ; d i s p l a y. s e t ( p l e a s e i n s e r t c o i n ) ; moneyhandler. r e l e a s e ( o r d e r. abort ( ) ) ; d i s p l a y. s e t ( p l e a s e i n s e r t c o i n ) ; 2. a. se figur 1 b. Strategimönstret, ett sätt att kapsla in variationspunkter i det här fallet beräkningen av kostnaden för en dryck. c. Metoderna buy() och ispayed() behöver skrivas om. 3. public interface Beverage { public double c o s t ( ) ; public S t r i n g g e t D e s c r i p t i o n ( ) ; public abstract class BeverageDecorator implements Beverage { private Beverage beverage ; public BeverageDecorator ( Beverage bev ){ beverage = bev ; public double c o s t ( ) { return beverage. c o s t ( ) + a d d i t i o n a l C o s t ( ) ; public S t r i n g g e t D e s c r i p t i o n ( ) { return beverage. g e t D e s c r i p t i o n ( ) + + + e x t r a ( ) ; protected abstract double a d d i t i o n a l C o s t ( ) ; protected abstract S t r i n g e x t r a ( ) ; public class C o f f e e implements Beverage { public double c o s t ( ) { return 1 0 ; public S t r i n g g e t D e s c r i p t i o n ( ) { return c o f f e e ; 2

control +state: int +insert(double) +select(beverage) +buy() +abort() VendingMachine order -amount: double BeverageBuy +BeverageBuy(double) +getamount():double +select(beverage) +selectedbeverage(): Beverage +increase(double): Double +buy():double +ispayed():boolean +abort(): Double Display MoneyHandler BeverageDistributor Beverage +set(string) +release(double) +dispense(beverage) +cost():double hardware beverages ConcreteDisplay Tea Coffee ConcreteMoneyHandler Cocolate ConcreteBeverageDistributor Input Figur 1: Klassdiagram kaffeautomat // Klasserna Tea och Chocolate a n a l o g t public class Milk extends BeverageDecorator { public Milk ( Beverage beverage ){ super ( beverage ) ; protected double a d d i t i o n a l C o s t ( ) { return 3 ; protected S t r i n g e x t r a ( ) { return milk ; // Klassen Sugar a n a l o g t 4. Uppgiften är samma som i Laboration 4. pq = tom p r i o r i t e t s k ö vertexmap = tom map ( nod > avstand ) done = en tom mängd pq. o f f e r ({ v, 0 ) vertexmap. put ( v, 0 ) sa l ä nge i n t e pq ä r tom { actvertex, d i s t = minsta e l e m e n t e t i pq // som t a s ut ur kön om actvertex == malnoden u return d i s t 3

return om actvertex i n t e f i n n s i done done. add ( actvertex ) for v a r j e bage f r a n actvertex w = e. d e s t i n a t i o n ( ) newdist = d i s t + e. getvalue ( ) om (! vertexmap. containskey (w) ) ( newdist < vertexmap. get (w) ) pq. o f f e r ({w, newdist ) vertexmap. put (w, newdist ) null 4

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 utvidga 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, Motivering D,E SRP säger inget om storleken på ett ansvarsområde. Att tillämpa SRP innebär att man samlar funktionalitet kopplat till ett E gemensamt ansvar på ett ställe vilket i många fall kan innebära färre och större klasser. Delegation till ett interface som vid t.ex. strategimönstret är ett an- D nat sätt att uppnå OCP Att koden är bräcklig innebär att det är svårt att göra ändringar utan att introducera nya oväntade fel. Ofta beror det på att underliggande antaganden in- A te längre är sanna efter att man lagt till nya features. Brott mot LSP är ett sätt att förändra de ursprungliga förutsättningarna. C A Vid aggregering instansieras det aggregerade objektet oftast utanför det användande objektet. Lösa kopplingar handlar om avsaknad av kunskap. Beroende på hur man väljer att implementera observatörerna (med eller utan kunskap om det observerade objektet) kan man även åstadkomma lösa kopplingar i omvänd riktning. 5