kl Tentainformation

Relevanta dokument
kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentainformation

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

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

DUGGA Tentaupplägg

kl Tentaupplägg

DUGGA 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

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

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

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

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

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

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

Laboration A Objektsamlingar

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.

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

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

kl Tentaupplägg

Laboration 1: Figurer i hierarki

Tentaupplägg denna gång

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

Tentaupplägg denna gång

Tentamen, EDAA10 Programmering i Java

kl Tentaupplägg

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

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

Tentaupplägg denna gång

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

Tentaupplägg denna gång

Objektorienterad programmering D2

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

Objektorienterad Programmering (TDDC77)

Tentaupplägg denna gång

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

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

Uppgift 1 ( Betyg 3 uppgift )

DAT043 Objektorienterad Programmering

Malmö högskola 2008/2009 CTS

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

TUTORIAL: KLASSER & OBJEKT

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

Uppgift 1a (Aktiekurser utan poster)

OOP Objekt-orienterad programmering

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

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

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.

Tentamen OOP

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

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

ID1004 Laboration 4, November 2012

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Arrayer. results

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

Teoretisk del. Facit Tentamen TDDC (6)

Tentamen i Grundläggande Programvaruutveckling, TDA548

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

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

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

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

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

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

TENTAMEN OOP

Java, klasser, objekt (Skansholm: Kapitel 2)

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

TENTAMEN OOP

Del A (obligatorisk för alla)

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

Tentamen Grundläggande programmering

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

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

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

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 12:00 Betyg 3 Betyg G 3 poäng 11:00 Betyg 4 3 poäng 10:40 Betyg VG 3 poäng 10:20 Betyg 5 4 poäng 11:00 Betyg 5 4 poäng 11: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

Badhus I följande uppgifter används badhus och simhallar som tema. Nedan följer en beskrivning och en lista på definitioner. Om du är bekant med badhus och/eller simhallar kan då hoppa direkt till uppgifterna. En simhall är ett hus som har simbassänger. Ofta är dessa kopplade till gym eller andra friskvårdsanläggningar. Ett badhus är ungefär som en simhall, men fokuset ligger kanske snarare på att "bada", d.v.s. simning i underhållningssyfte än simning i träningssyfte. Simmare Simbassäng Badkläder Pool Bubbelpool Omklädningsrum En person som frivilligt kliver ner i vatten för att simma. Ett stort kaklat utrymme som kan fyllas med vatten och därefter simmas eller badas i, ofta dekorerade med långa T:n. Kläder som påtas inför simning eller bad. Finns olika typer, t.ex. shorts, heldräkt, traditionell (se bild). Se simbassäng. En simbassäng som är ganska liten. Det blir inte så mycket simmande i denna utan snarare sittande. Poolen är ofta varm och har många bubblor. Utrymme där badkläder tas på och av. Vanligtvis separerat för män och kvinnor. Fräsch simhall med långa T:n. Tre badande karlar, iklädda badkläder. T.v. shorts-varianten. T.h. Traditionell variant. Inbjudande omklädningsrum.

Uppgift 1 - Simmare [1p] I denna uppgift skall du skapa några klasser som behövs för att representera olika simmare på simhallen. Det som simmare har gemensamt är att de alla har ett namn, kan ha någon form av badkläder och kan simma. Du skall i denna uppgift skapa/skriva klart klasserna som visas i UMLdiagrammet nedan. Swimmer - name : String BathingSuit - suit : BathingSuit 1 0..1 +swim() +setsuit(bathingsuit) ProfessionalSwimmer +setsuit(bathingsuit) YoungSwimmer - tired : boolean +swim() Klassen BathingSuit finns redan i given_files och behöver inte ändras. Klassen Swimmer finns redan påbörjad i mappen given_files men behöver utökas. Den skall ha två metoder, swim() och setsuit(). Metoden swim() anropas vid varje tillfälle som simmaren simmar och skriver ut texten "Splish splash - it's so fun in the bath!". Metoden setsuit() kan användas för att ta på, ta av eller byta badkläder. Vi representerar avsaknad av badkläder med värdet null. Simmare har alltid ett namn, men har inte nödvändigtvis badkläder på sig. Man skall därför kunna instansiera Swimmer antingen med eller utan badkläder (se testprogrammet för exempel på detta), men alltid med ett namn. Klassen ProfessionalSwimmer representerar någon som tävlingssimmar. Det som skiljer en proffssimmare från vanliga simmare är att de måste ha badkläder på sig vid alla tillfällen (annars får de amerikanska TV-bolagen spader). Man skall alltså inte kunna instansiera ProfessionalSwimmer utan badkläder (det finns en utkommenterad sådan rad i testprogrammet, om du avkommenterar den så borde du få ett kompileringsfel där). Man skall inte senare i programmet kunna ta av simmaren sina badkläder (d.v.s. om man gör setsuit(null) så kommer inget att hända.). Klassen YoungSwimmer representerar ett barn som simmar/leker i bassängen. Det som skiljer barnsimmare från vanliga simmare är att de blir trötta fort. Efter första anropet till swim() så skall inte längre texten ovan skrivas ut, utan "I'm so tired - time to get out." skall skrivas ut istället. Det finns ett testprogram, SwimmerTest.java i given_files, som visar på hur man skall kunna skapa instanser av klasserna och hur metoder kan anropas.

Uppgift 2 - Bubbelpool [1p] På badet har man sedan en tid tillbaka haft en bubbelpool, och den är populär. Bubbelpoolen representeras internt i datorsystemet med klassen BubblePool. Det finns dock lite problem med denna bubbelpool. Det första problemet är att den ganska snabbt blir smutsig (av någon anledning), BubblePool-objektet kastar då ett exception som kraschar hela programmet. I den här uppgiften skall du göra en ny klass, SafeBubblePool, som förbättrar den givna klassen. BubblePool - max : int - people : Swimmer[] - dirt : int +getin(swimmer) +getout(swimmer) +clean() 1 0..* Swimmer SafeBubblePool - notification : String +getin(swimmer) +getout(swimmer) Klassen Swimmer finns i given_files och behöver inte ändras. Klassen BubblePool finns i given_files och skall inte ändras. När man instansierar en BubblePool så måste man ange ett värde max som anger hur smutsig poolen kan vara innan den kastar exception. I övrigt har klassen tre metoder. Metoden getin() lägger till en simmare i poolen och ökar dirt med 1. Metoden getout() tar en simmare som parameter och tar bort just den simmaren från poolen, sedan ökas dirt med 1. Både getin() och getout() kastar PoolDirtyException om smutsighetsgraden (dirt) har kommit upp i nivån som angavs av max. Dirt börjar alltid på 0. Metoden clean() tar bort alla simmare från poolen och städar poolen. Även klassen PoolDirtyException är given och skall inte ändras. Din uppgift är att skapa en ny klass SafeBubblePool som förbättrar BubblePool. Från SafeBubblePool skall det inte längre vara möjligt att PoolDirtyException kastas. Om poolen skulle bli för smutsig då någon kliver i eller kliver ur så gör poolen rent sig själv automatiskt efter att första ha bett alla simmare att avlägsna sig. När detta sker skall även en notifiering skickas till systemteknikern så att den ser att detta har skett (det kommer ut i terminalen). Notifieringen är en sträng t.ex. "SafeBubblePool cleaned itself automatically!" som anges när SafeBubblePool instansieras. Det finns ett givet testprogram BubblePoolTest.java i given_files som bör gå att köra när du är klar med din klass. Du skall inte behöva ändra på detta testprogram (om du inte har gjort uppgift 1 också, då kan du behöva ge simmarna i testprogrammet namn vid instansieringen).

Uppgift 3 - Skåp i simhallen [2p] Som en del av datorsystemet på en simhall nära dig behövs en ADT för att representera vilka skåp som finns i omklädningsrummen. Du skall därför skapa ADT:n LockerRoom som representerar detta. Till din hjälp har du fått en klass Locker (ligger i given_files) som representerar ett skåp. Skåpen kan i nuläget bara lagra badkläder (ett objekt av klassen BathingSuit, också i given_files), men du skall senare göra Locker, och hela ADT:n till generisk så att man även kan lagra vad som helst. LockerRoom skall ha följande operationer: void add(int, Locker) En metod för att lägga till ett skåp, med ett visst id-nummer, till omklädningsrummet. Locker find(int) En metod för att, givet ett id-nummer, hitta motsvarande skåp. boolean hasthing(bathingsuit) En metod som returnerar sant om badkläder-objektet finns i något skåp i omklädningsrummet. Du skall nu göra LockerRoom generisk så att den inte bara kan lagra badkläder utan vilken datatyp som helst. Alltså behöver du byta typen BathingSuit 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 omklädningsrummet, som bestäms när omklädningsrummet deklareras. Exempel på huvudprogram: LockerRoom<String> stringlockers = new LockerRoom<>(); stringlockers.add(1, new Locker<String>("junk")); stringlockers.add(3, new Locker<String>("towel")); stringlockers.add(4, new Locker<String>("goggles")); stringlockers.add(190, new Locker<String>("snorkle")); Locker<String> locker = stringlockers.find(3); System.out.println(locker.getContents()); // Vi borde fått ut "towel" i terminalen if (stringlockers.hasthing("goggles")) { System.out.println("We found goggles in a locker!"); // borde komma ut } if (stringlockers.hasthing("sandwich")) { System.out.println("We found a sandwich, ugh!"); // borde INTE komma ut } Motsvarande finns även i filen LockerRoomTest.java i given_files.

Uppgift 4 - Poolparty [3p] Simhallen har börjat anordna poolpartyn. Man kan då abonnera hela simhallen för en privat fest. Du skall i denna uppgift skapa klasser så att man på ett enkelt sätt kan bjuda in personer till festen och att man kan skicka ut information till alla inbjudna om någon information om festen har ändrats. När man ändrar så kan dock vissa personer tacka nej, om ändringarna inte passar. PoolParty - starttime : int 1 0..* - host : Person - suitrequired : boolean - ivitees : Person[] +invite(person) - updateallinvitees() Person - name : String +update(poolparty) DoubtfulPerson CommittedPerson +update(poolparty) #willdecline(poolparty) : boolean #getreason() : String +update(poolparty) TimeConstraintPerson PrudePerson - cantbefore : int +willdecline(poolparty) : boolean +willdecline(poolparty) : boolean +getreason() : String +getreason() : String Klassen PoolParty skall instansieras med starttid (t.ex. 19), en värd (förhoppningsvis en CommittedPerson), och en boolean som talar om huruvida man måste ha badkläder med på festen. Klassen behöver (förutom lämpliga getters och setters) följande två metoder. Metoden invite() tar en Person som parameter och lägger till den till de inbjudna personerna. Metoden updateallinvitees() är privat, skall anropas då något av PoolPartyts attribut ändras, och går igenom alla inbjudna personer och anropar dess update()-metod. Alla personer har ett namn (anges vid instansieringen). Metoden update() skall ta en PoolParty-parameter och vara abstrakt. En CommittedPerson är en person som är helt bestämt att gå på festen. Oavsett vad som ändras så kommer en CommittedPerson aldrig tacka nej till festen. En DoubtfulPerson är en person som kanske kommer tacka nej. Metoden update() skall anropa den abstrakta metoden willdecline() för att se om personen har bestämt sig för att inte gå. I sådana fall skall personens namn och strängen som fås av den abstrakta metoden getreason() skrivas ut i terminalen. Observera att personer faktiskt inte tas bort från PoolPartyts mängd inbjudna personer. Personer som tackar nej kommer därför upprepa sin ursäkt varje gång de anropas med update(). En TimeConstraintPerson kan inte komma till festen innan ett visst klockslag. Om tiden på festen skulle ändras till tidigare än denna tid kommer TimeConstraintPersons willdecline()-metod att returnera sant. Metoden getreason() skall returnera "I can't make it before [klockslag]". En PrudePerson vill inte riskera att gå till ett poolparty där folk inte har badkläder. Om suitrequired ändras till false så kommer PrudePersons willdecline()-metod att returnera sant. Metoden getreason() skall returnera "Oh, I have a dentist appointment at the same time...". Se testprogrammet PoolPartyTest i given_files 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.