kl Tentaupplägg

Relevanta dokument
kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentainformation

kl Tentaupplägg

2017-XX-XX.kl Tentaupplägg

kl Tentainformation

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

DUGGA 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

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

DUGGA Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

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

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

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

kl Tentaupplägg

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

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

Tentaupplägg denna gång

Tentaupplägg denna gång

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

kl Tentaupplägg

Tentaupplägg denna gång

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

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

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

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

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

TUTORIAL: KLASSER & OBJEKT

Laboration 1: Figurer i hierarki

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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.

kl Tentaupplägg

Objektorienterad Programmering (TDDC77)

PROGRAMMERINGSTEKNIK TIN212

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

Uppgift 1 ( Betyg 3 uppgift )

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

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

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

DAT043 - föreläsning 8

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

Lab5 för prgmedcl04 Grafik

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Uppgift 1a (Aktiekurser utan poster)

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

Agenda. Objektorienterad programmering Föreläsning 13

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

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

Tentamen, EDAA10 Programmering i Java

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

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

TDIU01 / 725G

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

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

TUTORIAL: SAMLING & KONSOLL

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

Föreläsning 6: Introduktion av listor

ID1004 Laboration 4, November 2012

Objektorienterad programmering D2

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

Tentamen TEN1 HI

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

Konstruktion av klasser med klasser

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

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

Tentamen OOP

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

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

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

OOP Objekt-orienterad programmering

Föreläsning 5-6 Innehåll

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 för kursen Objektorienterad programvaruutveckling GU (DIT010)

TDDI14 Objektorienterad programmering

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

TDDC Terminologi Uppdaterad Fö #1

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

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: Tid TDDE10/11 725G90 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 Eventuell bonustid från laborationer appliceras på dessa tidsgränser. Totaltiden för tentan ö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

Kakbutiken När man går i ett shoppingcentrum ser man ibland kakbutiker. De är som små restauranger (fast de har sällan bord/stolar) som säljer nybakade kakor direkt över disken - mums! Uppgifterna i tentan använder sådana kakbutiker som tema. Om du redan är bekant med kakor, bakning etc. så kan du eventuellt hoppa över detta och gå rakt på uppgifterna. Nedan följer ett par termer som handlar om just kakbutiken. Kaka Ugn Glasdisk En godbit, tillagad av mjöl, smör, socker och ev. andra tillsatser. Gräddad i ugn. En elektrisk apparat som gräddar kakor. En stor avlång behållare var i man lägger kakor för att visa upp för kunderna. Stora amerikanska kakor. På amerikansk engelska är större synonymt med lyxig.

Uppgift 1 - Kakor över disk [1p] I kakbutiken har man lagt fram olika kakor under en glasdisk. På detta sätt kan besökare se kakorna, peka på den de vill ha, säga t.ex. "jag vill ha en nummer 3" och sedan bakar butiken en ny sådan kaka. Du skall i denna uppgift skapa klasser som motsvarar UML-diagrammet nedan. Cookie - cookiesbaked : int - size : int 0..* - gluten : boolean - String : name +describeyourself() 1 GlassCounter - ondisplay : Cookie[] +bakenew(int i) : Cookie ChocolateChip FrostedCookie PlainCookie Klassen Cookie och GlassCounter är påbörjade. Du behöver modifiera dessa och lägga till de specifika Cookie-subklasserna. Själva Cookie-klassen skall hålla reda på varje kakas storlek, namn och huruvida den har gluten i sig. Klassen skall även hålla reda på hur många kakor som har skapats. Detta eftersom huvudprogrammet vill uppmärksamma vart 10:e kakbak med en extra fin hälsning. Utöver eventuella getters och setters skall klassen ha två metoder: describeyourself som skriver ut kakans namn, storlek och huruvida den innehåller gluten (se testprogrammet för formatet) och en metod bakenew() som returnerar en likadan kaka (ett nytt objekt, av samma klass, med samma värden på instansvariablerna). Det är meningen att bakenew() skall överskuggas av subklasserna. Klassen ChocolateChip representerar kakor med chockladbitar i. Sådana kakor kan ha olika storlekar (den som skapar objektet får bestämma) men har gluten i sig. Klassen FrostedCookie representerar kakor med glasyr. Sådana kakor kan ha olika storlekar och har inte gluten i sig. Klassen PlainCookie representerar en torr, tråkig kaka. Den har alltid storlek 5 och har inte gluten i sig. Det finns ett huvudprogram CookieShop.java som visar på hur klasserna är tänkt att användas och instansieras. Du kommer behöva implementera klart klasserna för att programmet skall gå att kompilera.

Uppgift 2 - Säker bakugn [1p] I kakbutiken används en ugn av modellen SafetyOven2000. Ugnen har en massa olika funktioner som gör att den är "säker". Företaget som utvecklat mjukvaran till ugnen har dock gjort en ganska kritisk miss: det går att ställa in temperaturen på ugnen till vilket heltal som helst! Detta är ett problem eftersom temperaturer över 400 grader får ugnen att börja brinna (ugnen kastar då undantaget OvenOnFireException). Om gradtalet sätts till något negativt kan ugnen få kortslutning och detta är naturligtvis inte bra heller. Du skall: skapa en ny klass SuperSafetyOven som förbättrar klassen SafetyOven, som är en wrapper till den gamla klassen. D.v.s. SuperSafetyOven har en referens till ett objekt av typen SafetyOven. (Främst för att slippa implementera allt igen i SafetyOven). Alla operationer som görs på SuperSafetyOven delegeras till SafetyOven. Den nya klassen skall fungera precis som tidigare, men i de fall som någon försöker anropa metoden settemperature() med ett för stort eller för litet värde så skall din klass istället kasta undantaget InvalidTemperature. Undantaget InvalidTemperature skall lagra det temperaturvärde som var ogiltigt. Dessutom skall metoden getmessage() överskuggas så att den skriver ut ett meddelande om vilket temperaturvärde som var ogiltigt. Byt SafetyOven mot SuperSafetyOven i huvudprogrammet. Lägg till hantering av ditt kastade undantag i huvudprogrammet så att användaren ser att den har gjort fel. Det skall inte vara tillåtet att anropa settemperature() på SuperSafetyOven utan att också fånga undantaget InvalidTemperature. Om man försöker detta skall man få ett kompileringsfel. SafetyOven - current : int - target : int +settemperature(int target) 1 SuperSafetyOven 1 InvalidTemperature - inner : InfoStore - int : temp +getmessage() +settemperature(int target) OvenOnFireException +getmessage() Det finns ett givet huvudprogram SafetyOvenMain.java som använder den gamla klassen. Du skall ändra huvudprogrammet enligt kraven ovan. Du skall inte ändra på klasserna SafetyOven eller OvenOnFireException. TIPS: Fundera noga över huruvida ditt nya undantag skall ärva från Exception, eller RuntimeException. OBS: Efter att du har gjort klart ditt program skall huvudprogrammet fortfarande kunna fånga OvenOnFireException (det kan kastas trots att man gör förbättringarna som är beskrivna ovan).

Uppgift 3 - Rullande Schema [2p] För att representera kakbutikens personalschema skall du implementera ADT:n RollingSchedule. Man kan se det som en cirkulär struktur där vi kan stoppa in personer (klassen Employee) och få fram vem som är näst på tur att jobba i butiken. När en RollingSchedule skapas så måste en första Employee anges till konstruktorn. Det rullande schemat har alltså storlek 1 från början men skall kunna vara godtyckligt stort och växa efter behov. Följande operationer skall finnas för ADT:n RollingSchedule: add(employee e) Lägger till en person i schemat. Personen läggs alltid till direkt innan den person som jobbar för nuvarande (den som sist returnerades från next). Om ingen har börjat jobba än (next har aldrig anropas) läggs personen bara till sist i strukturen. Employee next() Returnerar vem som skall jobba härnäst. Första gången vi anropar next() så får vi personen som skickades med då ADT:n instansierades. Andra gången får vi nästa person som står på tur, om det inte finns fler personer i strukturen så får vi den första igen, o.s.v. Du skall sedan göra din ADT generisk så att den kan lagra vilken datatyp som helst (inte bara Employee). Man måste givetvis bestämma sig för vilken datatyp som skall användas för hela ADT:n när den deklareras. T.ex. så här: RollingSchedule<String> rolling = new RollingSchedule<>(); Det finns ett testprogram i filen TestRollingSchedule.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. Du skall inte ändra på den givna koden, men du får (bör) lägga till egna testfall så att du ser att din ADT fungerar som den skall

Uppgift 4 - Klicka Kakor [3p] För att marknadsföra sina kakor har kakbutiken bestämt sig för att släppa en app. Den är ganska simpel, det går ut på att klicka på en kaka - många gånger. De har skapat klassen CookieClicker som är en JFrame, för att rita ut själva fönstret. I fönstret har de en egenskapad komponent som de har kallat för CookieClickerDrawer som kan rita ut en kaka, få den att rotera och som även lyssnar på musklickar. De har även skapat ett interface ClickListener som deklarerar metoden clickhappened(). CookieClickerDrawer-objektet håller reda på en lista med ClickListener-objekt och anropar clickhappened() på dessa då användaren klickar på kakan. JComponent CookieClickerDrawer - listeners : ClickListener[] 1 <<interface>> ClickListener +clickhappened() 0..* ClickTimer - last: long - fastest : long +clickhappened() #paintcomponent(... ClickCounter - count : int +clickhappened() #paintcomponent(... Nu är det upp till dig att slutföra projektet. Det som saknas är de två textkomponenterna i övre delen av fönstret. Den ena håller reda på hur många gånger användaren har klickat. Den andra håller reda på minsta tiden mellan två klickar som användaren har uppnått (snabbaste dubbelklicken). Du skall göra egna komponenter för dessa två, klasserna ClickCounter och ClickTimer. Båda dessa skall ärva från JComponent och implementera ClickListener. Din implementation skall följa UML-diagrammet ovan. Lägg till dina komponenter till det grafiska gränssnittet i CookieClicker-klassens konstruktor. Det finns en utkommenterad komponent som är tänkt att användas som panel för dina nya komponenter, använd den om du vill. Använd en lämplig layouthanterare. Glöm inte att lägga till dina komponenter till den lista som skickas in till CookieClickerDrawer-komponenten, annars får de aldrig reda på när klickar skett. TIPS: Oroa dig inte om dina komponenter inte ser exakt ut som i exemplet ovan. Man kan rita ut text med metoden g.drawstring(). Tänk på att texten ritas ut från nedre vänstra hörnet. För att mäta tid finns en metod som heter System.getCurrentTimeMillis(). Den returnerar nuvarande tid i datorn som ett antal millisekunder. Datatypen för detta är en long, vilket fungerar precis som en int, fast den klarar av större tal.