Lunds Tekniska Högskola Datavetenskap Ulf Asklund, Sven Gestegård Robertz Tentamen EDAF10 2016 06 03, 14:00 19:00 Tentamen i Objektorienterad modellering och diskreta strukturer Tentamen består av en teoridel om totalt 5 poäng och en problemdel innehållande 7 uppgifter med totalt 33 poäng. Vid bedömningen kommer hänsyn att tas till lösningens kvalitet. UMLdiagram skall ritas i enlighet med UML-häftet. Man får förutsätta att det finns standardkonstruerare i alla klasser. De behöver ej redovisas i lösningar. I härledningar får endast de regler som ges på sidan Härledningsregler användas utan bevis. Hjälpmedel: Martin: Agile Software Development Andersson: Diskreta strukturer 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. Välj också ett lämpligt mönster som löser problemet med dryckerna. Låt Beverage vara en del av detta mönster istället för en enumtyp. 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. Namnge och motivera ditt val av mönster. c. 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) (7p) (6p) 3
4 a. Två personer är kusiner om en av den enes föräldrar är syskon till en av den andres föräldrar. Formulera ett predikatlogiskt uttryck för predikatet kusin(x, y) som är sant om (och endast om) två personer, x och y, är kusiner. Använd predikaten S(x, y) : x och y är syskon F (x, y) : x är förälder till y, b. Låt K p beteckna mängden kusiner till en person p. Använd predikatet kusin(x, y) för att formulera ett mängdbyggar-uttryck som definierar mängden K p. c. Predikatet kusin(x, y) definierar en relation på mängden människor. Vilka av egenskaperna symmetrisk, reflexiv och transitiv har denna relation? Motivera ditt svar. Egenskaperna definieras som följer: Låt ρ vara en binär relation på A. ρ är reflexiv om x A. x ρ x ρ är symmetrisk om x, y A. (x ρ y y ρ x) ρ är transitiv om x, y, z A. (x ρ y y ρ z x ρ z) 5 a. Visa, med naturlig härledning, att ( P ) ( P ). Ange vilken härledningsregel som används i varje led. Ledning: Använd I för att härleda implikationerna, och ta hjälp av motsägelsebevis för att visa ( P ) P. b. Gör en härledning som visar {p q r, q s, r s p s Ange vilken inferensregel som använts i varje steg. Ledning: Du kan utgå från följande skelett till bevisträd: p q r s s (4p) 6 I kursen har vi definierat sammansättning av binära relationer (ρ 1 ; ρ 2 ) som ρ 1 ; ρ 2 = {(x, z) A C y B. (x, y) ρ1 (y, z) ρ 2 där ρ 1 är en relation från A till B och ρ 2 en relation från B till C. I matematiken skrivs sammansättningen av funktionerna f och g som f g. Vi har konstaterat att funktioner är relationer, och att vi därför kan utrycka sammansättning av funktioner både med ; och men att ordningen skiljer så att f g = g ; f. Låt f och g vara funktioner på mängden N 10 = {0,..., 9 så att f = {(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)(5, 6), (6, 7), (7, 8), (8, 9) g = {(0, 0), (1, 2), (2, 4), (3, 6), (4, 8) Ange sammansättningen f g på N 10. Svara med en mängd. 7 a. Ange ett reguljärt uttryck för alla decimala heltal, utan onödiga inledande nollor, som innehåller minst en femma (t ex 153, 65535, 5005). b. Ange de strängar med längden 3 tecken som genereras av det reguljära uttrycket a b + c (4p) (2p) (2p) 4
Härledningsregler Regler för P [ I ] P P [ E1 ] P P [ E2 ] Regler för [ I ] P P P [ E ] Regler för P [ I1 ] P [ I2 ] P P R R [] R [ E ] Regler för R P R [ I ] R R [ I ] P P [ E ] P Regler för P x. P [ I ] x. P [ E ] P [x\t] Regler för P [x\t] [ I ] x. P x. P [P [x\y]] [ E ] i en regel betyder att man har gjort ett (hypotetiskt) antagande P för att härleda och att antagandet upphävs (strykes) när man använder regeln. Det hypotetiska antagandet får finnas noll eller flera gånger i beviset av. När man använder I så får beviset av P inte innehålla några icke upphävda antaganden om x. [P [x\y]] I E får y inte vara en fri variabel i eller förekomma i ett icke upphävt antagande i 5
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 Vending- Machine. 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 6
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 c l a s s BeverageBuy { p r i v a t e double amount ; p r i v a t e Beverage s e l e c t e d ; p u b l i c BeverageBuy ( double amount ){ t h i s. amount = amount ; p u b l i c Double getamount ( ) { r e t u r n amount ; p u b l i c v o i d s e l e c t ( Beverage bev ) { s e l e c t e d = bev ; p u b l i c Beverage s e l e c t e d B e v e r a g e ( ) { r e t u r n s e l e c t e d ; p u b l i c Double i n c r e a s e ( Double amount ){ t h i s. amount += amount ; r e t u r n t h i s. amount ; p u b l i c Double buy ( ) { s w i t c h ( s e l e c t e d ) { c a s e COFFEE: { amount = amount 1 0 ; c a s e CHOCOLATE: { amount = amount 8 ; c a s e TEA: { amount = amount 5 ; s e l e c t e d = n u l l ; r e t u r n amount ; 7
p u b l i c b o o l e a n i s P a y e d ( ) { double p r i c e = 0 ; s w i t c h ( s e l e c t e d ) { c a s e COFFEE: { p r i c e = 1 0 ; c a s e CHOCOLATE: { p r i c e = 8 ; c a s e TEA: { p r i c e = 5 ; r e t u r n amount >= p r i c e ; p u b l i c Double a b o r t ( ) { double r e l e a s e d = amount ; amount = 0 ; s e l e c t e d = n u l l ; r e t u r n r e l e a s e d ; 8