kl Tentaupplägg

Relevanta dokument
kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentainformation

2017-XX-XX.kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentainformation

DUGGA Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

DUGGA Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

Tentaupplägg. Betygsgränser: 1 uppg 19:00 Betyg 3 2 uppg 18:00 Betyg 4 2 uppg 16:30 Betyg 5 3 uppg 18:00 Betyg 5

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg. TIPS 4: Du kan kompilera din kod med följande kommandon g++11, w++11 (för mer varningar)

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

kl Tentaupplägg

TENTA: TDDD11 & TDDC68. Tillåtna hjälpmedel. Starta Emacs, terminal och tentakommunikationsfönster. Skicka in frågor och uppgifter

kl Tentaupplägg

Tentaupplägg denna gång

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

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

Objektorienterad Programmering (TDDC77)

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

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

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet

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

kl Examination - Ada

Tentaupplägg denna gång

kl Tentaupplägg

Tentaupplägg denna gång

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Laboration 1: Figurer i hierarki

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Objektorienterad Programmering (TDDC77)

TDIU01 / 725G

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

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

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Chapter 4: Writing Classes/ Att skriva egna klasser.

Tentamen, EDAA10 Programmering i Java

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Tentaupplägg denna gång

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Tentamen i Objektorienterad modellering och design Helsingborg

TDDI14 Objektorienterad programmering

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

Tentamen OOP

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

kl Tentaupplägg

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.

Tentamen i Objektorienterad modellering och design

TDIU20 (exempel) TDIU20 Tentaregler

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

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

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

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

Teoretisk del. Facit Tentamen TDDC (6)

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

DAT043 Objektorienterad Programmering

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Föreläsning 10. ADT:er och datastrukturer

TENTAMEN OOP

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

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

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

Objektorienterad Programmering (TDDC77)

Föreläsning 11. ADT:er och datastrukturer

TDP Regler

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

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 Grundläggande programmering STS, åk 1 fredag

Uppgift 1a (Aktiekurser utan poster)

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Objektorienterad Programmering (TDDC77)

För alla uppgifter på tentan gäller: Man får använda både standard-c++ (som till exempel har pekare som anges med * och objekt som skapas med new) och

DELPROV 1 I DATAVETENSKAP

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tentamen TEN1 HI

Laboration 1 - Grunderna för OOP i Java

Transkript:

Tentaupplägg Allmänna Tips Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer att fastna på så kanske det är fel uppgift att ge sig på. Tiden du lägger på att noga läsa uppgifterna tjänar du in på att välja rätt uppgift. Kolla ibland till kommunikationsfönstret. Det kan ha kommit information till alla utan att ni skickat in en fråga. Om ni har problem med eclipse eller dylikt som INTE har med uppgifterna att göra, räck upp handen så kommer en assistent. Detsamma gäller om hur man kopierar givna filer. Frågor om själva uppgifterna tar vi i första hand via tentasystemet. Testa ditt program noga innan du skickar in. Om din lösning inte är korrekt kommer du få ett kompletteringsmeddelande och har möjlighet att rätta den och skicka in igen. Kompletteringar måste dock åtgärdas. Vi tolererar inte att ni spammar oss med samma lösning om och om igen. Kommando cp given_files/*. xdg open given_files/tenta.pdf eclipse & Effekt Kopierar alla givna filer till mappen du står Öppnar själva tentan. Blir läsbar då tentan startar. Startar eclipse. Generella krav (gäller för alla uppgifter om inget annat anges): Fullständiga uppräkningar och kodduplicering skall undvikas med klasshierarkier och polymorfi i de fall det inte går att generalisera på andra sätt (underprogram, loopar, etc.). Korrekt inkapsling krävs, d.v.s. rätt synlighet på instans/klassvariabler och metoder. Lämpliga konstruktorer skall finnas för alla klasser. Instansvariabler får inte användas som globala/lokala variabler (d.v.s. använd parametrar och lokala variabler i första hand). Korrekt användning av static krävs. Överanvändning av instanceof och typkonverteringar kan leda till komplettering. Betygsgränser: 1 poäng Tid 12:00 TDDE10/11 Betyg 3 3 poäng 3 poäng 3 poäng 11:00 10:40 10:20 Betyg 4 4 poäng 4 poäng 11:00 11:20 Betyg 5 725G90/91 Betyg G Betyg VG Betyg 5 Betyg VG OBS: Delpoäng delas inte ut på uppgifterna. För att få poäng på en uppgift måste man alltså lösa uppgiften helt (och enligt specifikation). M.v.h. /Torbjörn och Erik

Våffelhuset I USA finns en restaurangkedja som heter Waffle House som serverar frukost 24 timmar om dygnet, 365 dagar om året. Främst på menyn är så klart våfflor, men även pannkakor, fattiga riddare, bacon och mycket annat. Eftersom detta koncept är så populärt (det finns många varianter på Waffle House) så får vi i dessa uppgifter följa den aspirerande restaurangen Aweffle House som försöker uppnå samma klassiska upplevelse som besökarna på originalet får känna. Vi använder alltså frukostrestauranger som tema för denna tenta. Vi har därför skrivit ett antal termer som är bra att känna till nedan. Om du är bekant med detta kan du hoppa direkt till uppgifterna. Våffla Pannkaka Fattiga Riddare Meny En typ av stekt smet som tillagas i ett upphettat järn. Serveras ofta med tillbehör så som grädde, sylt, bär m.m. Finns i olika varianter, t.ex. belgisk, amerikansk. En annan typ av stekt smet som tillagas i en stekpanna eller på en stekyta. Serveras ofta med samma typ av tillbehör som våfflor. Den amerikanska varianten serveras dock traditionellt med lönnsirap och smör. Stekt vitt bröd som doppats i smet/ägg. Samma typ av tillbehör gäller, ofta med florsocker på också. En samling (ofta laminerade eller inbundna) papper som beskriver vad restaurangen har att erbjuda, och vad det kostar. Frukostrestaurangen Waffle House. Från insidan; mysigt! En belgisk våffla. En stack pannkakor.

Uppgift 1 - BreakfastBot [1p] För att snabbare kunna tillaga pannkakor och våfflor har man på Aweffle House nu installerat en robot som gör jobbet, the BreakfastBot 3000. Tyvärr är det fortfarande en liten bit av källkoden som saknas. Problemet är att man vill se till att roboten använder rätt tillagningsredskap för pannkakor resp. våfflor. Det finns en påbörjad klasshierarki för pannkakssmet och våffelsmet som du skall utöka så de dessa klasser kan tala om vilket tillagningsredskap som är rätt (stekpanna för pannkakssmet och våffeljärn för våffelsmet). Detta kanske inte är så logiskt, men det är praktiskt för roboten, som då helt enkelt kan fråga smeten vilket redskap som den vill tillagas med. BatterFood - name : String +getcooker() : BatterFoodCooker BatterFoodCooker +cook() WaffleMaker FryingPan +cook() skapar +cook() WaffleBatter +getcooker() : skapar PancakeBatter +getcooker() : Din uppgift är att lägga till metoden getcooker() i BatterFood, WaffleBatter och PancakeBatter så att det stämmer med UML-diagrammet ovan. Du behöver också skapa klasserna FryingPan, WaffleMaker och BatterFoodCooker. Både FryingPan och WaffleMaker ärver från BatterFoodCooker. Metoden cook() i FryingPan skriver ut "making a pancake" i terminalen. Metoden cook() i WaffleMaker skriver ut "making a waffle" i terminalen. Det finns ett testprogram i BreakfastBot.java som visar hur som visar på hur man skall kunna skapa instanser av klasserna och hur metoder kan anropas.

Uppgift 2 - Menyer [1p] Ägaren av Aweffle House har bestämt sig för att trycka upp nya menyer och vill självklart ha ett objektorienterat system för att hantera detta. Hennes tekniker har kommit en bit på väg och skapat tre klasser, AweffleMenu, AweffleFood, AweffleEveningMenu, som har metoder för att skriva ut menyn i terminalen. AweffleMenu AweffleFood 1 - items : AweffleFood[] Welcome to Aweffle House 0..* - name : String +printmenu() - price : double +addfood(awefflefood) ~ Evening Menu ~ #printspecialinfo() Cup of Coffee.$0.89 Grande Coffee.$1.69 Waffles (2)...$3.99 AweffleEveningMenu Pancakes (short stack)..$3.75 Pancakes (tall stack)..$4.45 #printspecialinfo() Night Time Snack..$5.59 Klassen AweffleMenu kan ha godtyckligt många AweffleFood-objekt (saker man kan beställa), som skrivs ut (i terminalen) i metoden printmenu() (se bilden till höger ovan). Innan AweffleFood-objekten kommer ut så anropas dock metoden printspecialinfo() som kan skriva ut en underrubrik (t.ex. "Evening Menu") under restaurangens namn. Med denna begynnande klasshierarki kommer alltså Aweffle House kunna skapa många olika menyer, vilket är bra eftersom detta ger känslan av variation från en restaurang som annars inte har mycket på menyn. Klasserna AweffleMenu, AweffleEveningMenu och AweffleFood är redan påbörjade. Ägaren vill även att restaurangens adress och öppettider skall skrivas ut på menyerna. Din uppgift är alltså att göra ett tillägg någonstans i den givna koden (tänk noga över var du lägger detta), så att detta skrivs ut. Tanken är också att denna information (adress, öppningstid, stängningstid) skall lagras i någon klass och kunna ändras med dessa metoder: setaddress(string), sätter en ny adress (praktiskt när restaurangen flyttar, eller öppnar en ny filial). setopeningtime(int), och setclosingtime(int). Vi utgår ifrån att det är samma öppettider varje dag i veckan. Welcome to Aweffle House 123 Breakfeast Blvd. Open 6 a.m. to 11 p.m. ~ Evening Menu ~ Cup of Coffee.$0.89 Grande Coffee.$1.69 Waffles (2)...$3.99 Pancakes (short stack)..$3.75 Pancakes (tall stack)..$4.45 Night Time Snack..$5.59 Det nya utseendet på menyn ses här till vänster. Ett specifikt önskemål är också att om adressen eller öppettider ändras så skall detta slå igenom för alla AweffleMenu-instanser som redan är skapade. Se testprogrammet AweffleMenuTest.java för att se ett exempel på detta. Du skall inte behöva ändra på det som redan finns i testprogrammet för att kunna köra ditt program när det är klart. Då får dock lägga till saker I testprogrammet för att kontrollera att du har gjort rätt (se kommentarerna i filen).

Uppgift 3 - Arbetsgrupper [2p] Personalen på Aweffle House delas in i olika grupper. Det finns den administrativa personalen, städpersonalen, servitörer och servitriser, och de som jobbar i köket. Ibland finns det dock överlapp mellan dessa grupper. Exempel: vi har tre personer, Frank, Emma och Dave. Frank och Emma kan servera, men både Emma och Dave har köksuppgifter. Du skall skapa ADT:n WorkGroup, d.v.s. en arbetsgrupp som representerar en uppsättning personer. ADT:n skall ha följande två operationer: void add(person p) Lägger till en person p till gruppen. void print() Skriver ut alla personer i gruppen (en per rad). WorkGroup intersect(workgroup other) Tar ut snittet av personerna i denna grupp och personerna i gruppen som kommer in som parameter. Med snittet menar vi alla personer som finns med i båda grupperna. Resultatet från metoden är en ny grupp där dessa personer ingår. Klassen Person är given och finns i mappen given_files. Exemplet ovan skulle kunna illustreras med följande kodsnutt: WorkGroup servers = new WorkGroup(); servers.add(new Person("Frank")); Person emma = new Person("Emma"); servers.add(emma); WorkGroup kitchen = new WorkGroup(); kitchen.add(emma); kitchen.add(new Person("Dave")); WorkGroup kitchenandserver = servers.inersect(kitchen); kitchenandserver.print() // nu skrivs bara Emma ut, eftersom // hon var med i båda grupperna. Du skall sedan göra din ADT generisk så att den kan lagra vilken datatyp som helst (inte bara Personer). Man måste givetvis bestämma sig för vilken datatyp som skall användas för hela gruppen när gruppen deklareras. T.ex. så här: WorkGroup<Person> servers = new WorkGroup<>(); Det finns ett testprogram i filen TestWorkGroup.java i mappen given_files. Där kan du se hur det är tänkt att klassen skall användas när den är helt färdig.

Uppgift 4 - Pannkaksstack [3p] På menyn på Aweffle House finns det som kallas för en pannkaksstack. Det är alltså en hög med pannkakor staplade ovanpå varandra. Som en specialbeställning kan man få olika tillbehör på varje pannkaka på stacken. T.ex. skulle man kunna ha en bananpannkaka, på den en pannkaka med strössel och chokladsirap och ovanpå den en pannkaka med lönnsirap. Priset på hela stacken beror självklart både på antalet pannkakor och vilka tillbehör de har. I denna uppgift skall du implementera stacken och klasshierarkin med tillbehör enligt UML-diagrammet nedan. Pancake Condiment 1 0..* - name : String PancakeStack 0..* - conds : Condiment[] 1 - pans : Pancake[] +add(condiment) - price : double +push(pancake) +getprice() : double +pop() : Pancake +isempty() : boolean Banana ChocoBits Syrup PancakeStackCalculator +calcprice(pancakestack) : double PancakeStack är en stack av pannkakor. Metoderna push, pop och isempty skall fungera som vanligt för stackar. Klassen PancakeStackCalculator har en metod som tar en stack som parameter. Metoden skall poppa varje pannkaka från stacken, anropa eat() för dessa och summera flyttalen som kommer från metoden getprice(), och returnera summan. Man skall aldrig behöva skapa en instans av PancakeStackCalculator. Klassen Pancake representerar en pannkaka och har ett antal tillbehör. Metoden add() lägger till ett tillbehör. Metoden getprice() returnerar $0.75 (det är vad själva pannkakan kostar) plus summan av alla tillbehörs kostnader. Metoden eat() skriver ut "Mmm, a pancake with:" och anropar sedan eat() för varje tillbehör. Om pannkakan inte har några tillbehör skriver den ut, "Hmm, a plain pancake.". Klassen Condiment representerar ett tillbehör. Ett tillbehör har ett namn och ett pris. Metoden eat() skall vara abstrakt. Klassen Banana representerar skivade bananer. Skivade bananer kostar $0.30. Metoden eat() skriver ut "banana slices". Klassen ChocoBits representerar chokladströssel, och kostar $0.45. Metoden eat() skriver ut "chocolate bits!". Klassen Syrup representerar sirap och kostar $0.20. Man skall kunna ange vilken typ av sirap (en sträng) när man instansierar Syrup-klassen (syns inte i diagrammet ovan). Metoden eat() skall (t.ex.) skrivas ut "maple syrup". Det finns ett testprogram i klassen TestPancakes.java som bygger upp en pannkaksstack och sedan använder PancakeStackCalculator för att beräkna hela kostnaden för pankakan.