kl Tentainformation

Relevanta dokument
kl Tentaupplägg

kl Tentaupplägg

kl Tentainformation

kl Tentaupplägg

kl Tentaupplägg

2017-XX-XX.kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

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 Examination - Ada

DUGGA Tentaupplägg

DUGGA Tentaupplägg

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

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

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

kl Tentaupplägg

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

kl Tentaupplägg

Uppgift 1a (Aktiekurser utan poster)

Tentaupplägg denna gång

Laboration 1: Figurer i hierarki

Tentaupplägg denna gång

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

kl Tentaupplägg

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

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, EDAA10 Programmering i Java

kl Tentaupplägg

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

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

Tentaupplägg denna gång

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Kopiering av objekt i Java

Tentaupplägg denna gång

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

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

ID1004 Laboration 4, November 2012

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

kl Tentaupplägg

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

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

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

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

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

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

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

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

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

TDP Regler

HI1024 Programmering, grundkurs TEN

Teoretisk del. Facit Tentamen TDDC (6)

Objektorienterad programmering D2

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

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.

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

Objektorienterad programmering i Java

Tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

Tentaupplägg denna gång

TDDI TDDI22 Tentaregler

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

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

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

Laboration 3, uppgift En klass för en räknare

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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 TDP004 Objektorienterad Programmering Praktisk del

Agenda. Objektorienterad programmering Föreläsning 13

TDP Regler

Laboration A Objektsamlingar

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

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

Arrayer. results

TENTAMEN OOP

Tentamen OOP

HI1024 Programmering, grundkurs TEN

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

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

Uppgift 1 ( Betyg 3 uppgift )

Lösningar för tenta 2 DAT043,

Laboration 1 - Grunderna för OOP i Java

TDIU01 / 725G

TDIU20 (exempel) TDIU20 Tentaregler

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

OOP Objekt-orienterad programmering

Transkript:

Tentainformation 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. Är det något du absolut kommer att fastna på så kanske det är fel uppgift att ge sig på. Kolla ibland till kommunikationsfönstret. Det kan ha kommit information till alla utan att du skickat in en fråga. Om du 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. Din lösning rättas live under tentan. 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 klasshirarkier 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: Tid TDDE10/11 725G90/91 1 poäng 18:00 Betyg 3 Betyg G 3 poäng 17:00 Betyg 4 3 poäng 16:40 Betyg VG 3 poäng 16:20 Betyg 5 4 poäng 17:00 Betyg 5 4 poäng 17:20 Betyg VG Bonustid från avklarade laborationer tillkommer till dessa tidsgränser. Tiden för betyg 3/G överstiger dock aldrig 4 timmar. 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

Vampyrer Företaget PCGamez är tillbaka med en ny affärsidé, de skall göra ett skräckspel. Det mest lukrativa skräcktemat (enl. en marknadsundersökning) verkar vara vampyrer. I följande uppgifter används vampyrer som tema för uppgifterna. Här följer en kort förklaring om vad vampyrer är. Om du är bekant med vampyrer kan du hoppa direkt till uppgifterna. I boken Dracula av Bram Stoker, dyker karaktären Greve Dracula upp i en fiktiv del av Rumänien som kallas för Transsylvanien. Greven beskrivs som en lång, blek, underlig person. Det blir tydligt att det är något övernaturligt hos greven när det visar sig att han livnär sig själv på blodet från andra människor. Senare förklaras det att detta är vad som kallas för en vampyr. Vampyrer har även andra övernaturliga förmågor, t.ex. kan de förvandla sig (t.ex. till fladdermöss), de kan hypnotisera människor, och de kan glittra i solljus. Över åren har det gjorts många reimplementationer av Dracula och/eller vampyrer. Ofta blandas det in andra övernaturliga ting, så som varulvar (människovargar), trollkarlar o.s.v. Här är ett par termer som är bra att känna till angående vampyrer: Vitlök Kista Träpåle Krucifix Vampyrtänder Cape Vampyrjägare Stark krydda som vampyrer verkligen inte tycker om! Troligtvis efter grevens misslyckade matsemester i Frankrike. Vampyrer är mest aktiva på natten. Under dagen sover de, och då helst i begravningskistor. Även dessa avskyr vampyrer. Troligtvis är vampyrer mycket opponerade mot stafettlöpning och annan friidrott. Ett smycke som ser ut ungefär som ett kors. Vampyrer är mycket sekulära och gillar inte religiösa symboler och blir mycket obekväma ner sådana viftas. Vassa, långa tänder i mungipans kant som t.ex. kan användas för att bita upp trilskande plastförpackningar. Dracula (och andra vampyrer som ser upp till honom) har ofta en lång cape som är svart eller mörkblå på utsidan och blodröd på insidan. Capen går ofta upp över nacken. En person vars profession är att hitta och förgöra vampyrer. Greven själv som just klivit upp för natten. En känd vampyrjägare med stafettpinnen i högsta hugg. En snäll vampyr, härligt glittrande.

Uppgift 1 - Transsylvaniens varelser [1p] I denna uppgift skall du skapa några klasser som behövs för att representera olika varelser som finns i Transsylvanien. Det som några av varelserna har gemensamt är att de kan transformera sig mellan mänsklig och ickemänsklig form. Klassen Vampire finns redan i mappen given_files, men du skall utöka så att det är en hel klasshirarki enl. UML-diagrammet nedan (och beskrivningarna). SemiHumanCreature - ishuman : Boolean +ishumanoidform() Werewolf - name: String Vampire - age : int Lich Klassen SemiHumanCreature skall ha två metoder, transform() som anropas när varelsen går mellan sin människoform och sin monsterform och ishumanoidform(), som returnerar sant om varelsen är i sin människolika form och falskt annars. Alla SemiHumanCreatures håller alltså reda på varelsens nuvarande form. Den börjar alltid som människoform. Klassen Werewolf ärver från SemiHumanCreature. Alla varulvar har ett namn. När varulvar transformeras så skall det skrivas ut i terminalen antingen "The werewolf [namn] is now human again.", eller "[namn] transformed into a werewolf!". Klassen Vampire ärver från SemiHumanCreature. Alla vampyrer har en ålder. När vampyrer transformerar så skall det skrivas ut i terminalen antingen "The [ålder]-year-old vampire changed into a bat." eller "The bat changed back into a [ålder]-year-old vampire." Klassen Lich ärver från SemiHumanCreature. Det som är speciellt för lichar är att när de väl har transformerats från människa till sin lich-form så kan de inte längre transformera tillbaka. Första gången man kör transform() på en Lich skall det i terminalen stå "A human transformed into a lich". Efterkommande transform-anrop på en Lich skriver endast ut detta i terminalen "The lich can't become a human again, it's a lich forever!". Det finns ett färdigt testprogram, CreatureTest.java i given_files som visar på hur man skall kunna skapa instanser av klasserna och hur metoder kan anropas.

Uppgift 2 - Lyxkista [1p] Greven gillar självklart de gamla traditionella ekkistorna som sovplats på dagen men han måste tyvärr erkänna att de nyare, moderna varianterna har mer att erbjuda. Särskilt störande är låsmekanismen på de gamla kistorna, de var lite opålitliga och kunde gå i baklås. I denna uppgift skall du skapa en ny klass LuxuryCoffin som är en förbättring av den gamla klassen Coffin. Vi börjar med att beskriva Coffin-klassen. Coffin - occupant : Vampire - locked : Boolean +occupy(vampire) +getout() : Vampire +isoccupied() : Boolean +setlocked(boolean) 1 0..1 Vampire LuxuryCoffin - lining : String +setlocked(boolean) CoffinOccupiedException +getmessage() Klassen Vampire ligger i given_files och behöver inte ändras. Klassen Coffin ligger i given_files. En kista kan vara låst eller olåst från början, men har inte en vampyr i sig från början. Den har ett antal metoder: Med metoden occupy() kan man bestämma vilken vampyr som för tillfället ligger i kistan. isoccupied() returnerar sant om det ligger en vampyr däri. Med metoden getout() plockar man ut vampyren. Metoden lock() låser kistan. Du skall inte behöva ändra något på denna klass. Du skall i denna uppgift göra en ny version av kistan som heter LuxuryCoffin. En LuxuryCoffin är alltid upplåst från början, och är alltid fodrad med ett tyg (en sträng, t.ex. "satin"). Dessutom har låsmekanismen uppdaterats så att kistan inte längre kan gå i baklås. I det fall då man försöker låsa kistan, men det ligger en vampyr inuti så skall undantaget CoffinOccupiedException kastas. Du skall skapa undantagsklassen själv. När huvudprogrammet anropar getmessage() på ett fångat undantag av denna typ så skall man få ett tydligt felmeddelande (se kommentaren i testprogrammet exakt hur detta skall se ut). Det finns ett givet testprogram i given_files, CoffinTest.java, som bör gå att köra när du är klar med dina (två) klasser. Du skall inte behöva ändra på detta testprogram. TIPS: Fundera på om ditt undantag skall ärva från Exception eller RuntimeException.

Uppgift 3 - Tåg till Transsylvanien [2p] På en tågstation i Budapest har man börjat lasta tåg som skall gå till Transsylvanien. Som en del av deras datorsystem behövs en ny ADT för att representera själva tåget. Som given kod har du fått klassen Car som representerar en vagn. För tillfället kan man bara fylla vagnarna med vampyrer (varje Car kan ha en Vampire), men du skall senare göra Car-klassen, och hela ADT:n generisk så att man kan frakta vad som helst. Du skall i denna uppgift skapa ADT:n TransTrain med följande operationer: void addcargo(vampire cargo) Lägger till lasten i en ny vagn (en Car) längst bak i tåget (på plats 0). int noofcars() Returnerar hur många vagnar som är påkopplade på tåget. List<Car> removecars(int from, int to) Kopplar bort alla vagnar i intervallet [from, to] och returnerar dessa som en (java.util) lista. Vagnarna är numrerade från 0 (vagnen längst bak) och uppåt. Du kan utgå ifrån att parametrarna from och to inte har tokiga värden. Du skall nu göra TransTrain generisk så att den inte bara kan frakta vampyrer utan vilken datatyp som helst. Alltså behöver du byta typen Vampire mot eller lägga till en generisk parameter i beskrivningarna ovan. OBS: Man måste självklart hålla sig till en datatyp för hela tåget, som bestäms när tåget deklareras. Exempel på huvudprogram: TransTrain<String> stringtrain = new TransTrain<>(); stringtrain.addcargo("potatis"); stringtrain.addcargo("tomatjuice"); stringtrain.addcargo("selleri"); stringtrain.addcargo("livets Vatten"); List<Car<String>> cars = stringtrain.removecars(0, 2); System.out.println("Tågets nuvarande längd " + stringtrain.noofcars()); // Borde bli 1. for (Car<String> c : cars) { System.out.print(c.getCargo() + " "); } // Detta kommer ut i terminalen: Livets Vatten Selleri Tomatjuice // Om vi vill frakta vampyrer igen: TransTrain<Vampire> vamptrain = new TransTrain<>(); vamptrain.addcargo(new Vampire()); Motsvarande finns även i filen TransTrainTest.java i given_files.

Uppgift 4 - Antivampyrattiraljer [3p] I denna uppgift skall du implementera två klasshirarkier, en för olika typer av vampyrer och en för attiraljer som en vampyrjägare kan behöva för att bekämpa vampyrer. VampireHunter - vampires : Vampire[] 1 - objects: AntiVampObject[] 1 +add(vampire) +add(antivampobject) +tryall() 0..* 0..* AntiVampObject Vampire +beexposedto(antivampobject) : Boolean +getdescription() : String AristocraticVampire +beexposedto SeductiveVampire +beexposedto +getdescription() Garlic +isfrench(): Boolean +iseffectiveagainst(vampire) : Boolean +isfrench() : Boolean +isbeautiful() : Boolean +getdescription() : String Stake Crucifix +isbeautiful() Klassen VampireHunter finns i given_files, är redan färdigskriven och fungerar som testprogram. Vampire finns också i given_files, där skall du lägga till metoden beexposedto() som tar ett AntiVampObject som parameter och returnerar sant om antivampyrobjektet kan besegra denna vampyr och falskt annars. Det normala är att alla antivampyrobjekt kan besegra vampyrer. Frankrike har det nu framkommit en ny skara vampyrer som kallar sig för aristokratiska. Specifikt har dessa vampyrer utvecklat en resistens mot alla antivampyrobjekt som är franska (t.ex. vitlök). I Spanien har det framkommit en ny skara vampyrer som kallar sig för förföriska vampyrer (eng. seductive). Just dessa vampyrer är helt oberörda av antivampyrobjekt som är vackra (t.ex. krucifix). Metoderna getdescription() i vampyrklasserna returnerar endast namnet på klassen som en sträng, t.ex. "AristocraticVampire". Klassen AntiVampObject representerar antivampyrobjekt och har fyra metoder. Metoden iseffectiveagainst() tar en vampyr som parameter och returnerar sant om objektet kan besegra vampyren och falskt annars. Denna metod får inte överskuggas av subklasser (deklarera den som final). Observera även att för en vampyr v och för ett antivampyrobjekt o så borde anropen v.beexposedto(o) och o.iseffectiveagainst(v) ge samma resultat. De två metoderna isfrench() och isbeautiful() returnerar sant om objektet är franskt respektive vackert. Det normala är att antivampyrobjekt varken är franska eller vackra. Metoden getdescription() skall vara abstrakt. Klassen Garlic är ett antivampyrobjektet. Vitlök är en fransk krydda. Metoden getdescription() skall returnera strängen "Fresh garlic". Klassen Stake är ett antivampyrobjektet för att representerar träpålar. Metoden getdescription() skall returnera strängen "A wooden stick.". Klassen Crucifix representerar antivampyrobjektet krucifix. Kruficix är alltid vackra. Metoden getdescription() skall returnera strängen "A silvery cross.". Se testprogrammet i VampireHunter för hur klasserna skall instansieras och samarbeta. I testprogrammet finns det även kommentarer för hur det skall se ut i terminalen när man kör det.