-------------------------------------------------------------------- Tentamen Objektorienterad programmering med Java, 090530, 9-14 Lärare: Sven-Olof Nyström Email: svenolof@it.uu.se, svenolof.nystrom@bredband.net (reserv) Telefon: 0703 - 42 42 32, 018 - 471 76 91 Instruktioner: - Skrivtid 5 timmar. - Under de första timmarna (i alla fall till 12) finns jag tillgänglig för frågor via email. - Oläsbara eller otydliga lösningar ger noll poäng per uppgift. - Om tvetydigheter uppstår, gör intelligenta antaganden och ange dem. - Några av frågorna handlar om ett program som du laddar ner här: . Kontrollera att du kommer åt programmet. - Du får söka information på nätet och i böcker. Du får *inte* ta hjälp från andra människor. - Svar *måste* motiveras. Detta är viktigt. Det blir mycket svårt för mig att ge poäng på lösryckta förklaringar eller program som lika gärna kunde vara tagna från webben. - Om stora bitar av ditt svar har plockats från någon källa, tala om det. - Vid skrivtidens slut, skicka dina svar som en textfil till min emailadress. - Om dina svar är uppdelade i flera filer, skicka dem packade som en tar- zip- eller rar-fil. Läs igenom hela tentan innan du börjar. Om du fastnar på en uppgift, gå vidare till nästa---uppgifterna är inte nödvändigtvis ordnade i svårighetsgrad. Om en uppgift består av flera deluppgifter och du fastnar på en av dem, gå vidare till nästa deluppgift---det kan hända att efterföljande deluppgifter kan lösas utan det fullständiga svaret på tidigare uppgifter. Maxpoäng: 100. =============================== Frågorna ============================= * 1. Referenssemantik (10) Förklara begreppet referenssemantik med egna ord. Beskriv en situation där ett objekt inte längre kan refereras och kommer att avallokeras. Beskriv en situation där ett objekt refereras av två eller flera objekt. Beskriv en situation där ett objekt kopieras. * 2. Auktion (15) Din uppgift är att beskriva en implementation av ett auktionsprogram. Modellen är en internet-auktion där auktioner för flera varor kan pågå samtidigt. Varje vara har en beskrivning i form av en sträng. Det finns också information om vem som bjudit högst och vad han (eller hon) bjöd. För varje person som kan lägga bud finns information om personens namn. Auktionen har ett antal varor till salu. Det går att lista varorna, samt se beskrivningarna och vem som bjudit och hur mycket. Det är även möjligt att lägga till fler varor. - Ge en skiss på en lösning. Beskriv klasserna, vilken information de lagrar och deras viktigaste metoder. Om du kan se olika sätt att organisera lösningen, diskutera de olika alternativen och motivera ditt val. Ge gärna ett UML-diagram. - Beskriv i detalj implementationen. Det är inget krav på ett körbart program, men det kan vara enklast att presentera implementationen som javakod. * 3. Ord (15) Anta att vi har en fil med ord. Varje rad i filen innehåller flera ord. Vi säger att två ord är *grannar* om det finns en rad i filen där båda orden förekommer. Din uppgift är att implementera en datastruktur som håller reda på vilka ord som finns i filen och vilka som är grannar. Följande metoder ska implementeras, med rimlig effektivitet: - void addLine(List l) - Set neighbours(String s) - Set words() - boolean areNeighbours(String s1, String s2) addLine adderar en ny rad med ord från filen. neigbours returnerar en samling av de ord som är grannar till ett givet ord. (Om två ord är grannar behöver du *ej* hålla reda på i hur många rader båda förekommer--det räcker med att veta att de delar minst en rad.) words returnerar mängden av alla ord i filen. areNeighbours berättar om två ord är grannar. * Budd's solitaire Frågorna nedan handlar om ett program som du kan ladda ner här: Notera att en pdf-fil som beskriver programmet ingår. * 4. Budd's solitaire i stora drag (15) Beskriv programmet med egna ord. Beskriv klasserna och deras ansvar, och hur olika klasser är relaterade. Vilka klasser är beroende av vilka? Vad tycker du om organisationen av programmet? Påpeka bättre och sämre aspekter av lösningen. * 5. Statiska variabler (15) Det finns ett antal statiska variabler i klassen Solitaire. Vad representerar de? Kan du tänka dig någon orsak till att Budd valde att göra dem statiska? Skissa på hur en lösning *utan* statiska variabler skulle se ut? Finns det några fördelar eller nackdelar med en sådan lösning? * 6. Select. (15) Select i TablePile, CardPile samt DiscardPile innehåller en del likartad kod. Beskriv den duplicerade koden och vad den representerar. Hur skulle man kunna eliminera den duplicerade koden? Skissa på en lösning--eventuellt kan det vara lämpligt att introducera någon ny metod. * 7. Animering (15) Låt oss anta att man vill lägga till animerade förflyttningar av kort--användaren håller ner musknappen över ett kort och drar det till en lämplig hög. Om flytten är acceptabel enligt spelreglerna flyttas kortet, annars åker det tillbaka till sin gamla plats. Vilka klasser och metoder måste modifieras? Vad måste läggas till? Skissa på hur programmet skulle ändras. ============================= Lycka Till! ============================