Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Relevanta dokument
TENTAMEN. Objektorienterade applikationer CHALMERS. 2018/2019, lp 3 DAT055. Uno Holmer

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (9) Tentamen

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 7 (7) Tentamen

DAI2 (TIDAL) + I2 (TKIEK)

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

CHALMERS TENTAMEN. 2012/2013, lp 1 DAT042. Uno Holmer. Java API (utdelas av skrivningsvakten) Erland Holmström tel besöker tentamen

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad.

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

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

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

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

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

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

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: Objektorienterad programmering. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

PROGRAMMERINGSTEKNIK TIN212

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

Kopiering av objekt i Java

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

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. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

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

Tentamen i Objektorienterad programmering

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

Objektsamlingar i Java

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

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

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Laboration 1 - Grunderna för OOP i Java

DAT043 Objektorienterad Programmering

Arv och polymorfism i Java

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

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

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: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Tentamen i Objektorienterad programmering

Lab5 för prgmedcl04 Grafik

Övningsuppgift. Repeterbara citat. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

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

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

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540)

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Grundläggande programmering med C# 7,5 högskolepoäng

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 Helsingborg

Tentamen. DD2385 Programutvecklingsteknik vt 2011 Tisdagen den 24 maj 2011 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Tentamen. DD2385 Programutvecklingsteknik vt Torsdagen den 27 maj 2010 kl Hjälpmedel: penna, suddgummi, linjal

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsning 2. Länkad lista och iterator

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.

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.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tänk på följande: 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 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Tentamen i Grundläggande programmering STS, åk 1 fredag

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

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

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

Tentamen OOP

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

CHALMERS TENTAMEN. 2013/2014, lp 2 DAT050. Uno Holmer. Java API (bifogas tesen) Uno Holmer tel besöker tentamen ca kl samt ca 11.

Objekt, Klasser, Paket m. m.

Transkript:

1 (7) TENTAMEN: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem). Skriv rent dina svar. Oläsliga svar r ä t t a s e j! Programmen skall skrivas i Java 5, eller senare version, vara indenterade, renskrivna och i övrigt vara utformade enligt de principer som lärts ut i kursen. Onödigt komplicerade lösningar ger poängavdrag. Programkod som finns i tentamenstesen behöver ej upprepas. Givna deklarationer, parameterlistor, etc. får ej ändras, såvida inte annat sägs i uppgiften. Läs igenom tentamenstesen och förbered ev. frågor. I en uppgift som består av flera delar får du använda dig av funktioner klasser etc. från tidigare deluppgifter, även om du inte löst dessa. Lycka till!

2 (7) Uppgift 1 a) Rita ett UML-diagram som motsvarar följande Java-kod: public interface Squeezeable {... public class Sponge implements Squeezeable {... public class Jellyfish implements Squeezeable {... public class Snow implements Squeezeable {... public class Hand { private Squeezeable sq; public Hand(Squeezeable x) { sq = x; public class Human { private Hand left,right; public Human(Squeezeable x) { left = new Hand(x); right = new Hand(x); b) Rita ett klassdiagram som beskriver designmönstret Decorator. (5 p) (5 p). Skriv ej här

3 (7) Uppgift 2 Spelet tre i rad (tic-tac-toe) spelas av två personer på en kvadratisk spelplan med 3 x 3 rutor. Spelarna turas om att sätta ett kryss (X) resp. en ring (O) i en ledig ruta. Den spelare som först lyckas få tre markeringar i rad, vågrätt, lodrätt eller diagonalt vinner. Vi vill förstås ha en datorbaserad version av spelet. Det finns en påbörjad implementering av följande design, och uppgiften är bl.a. att konstruera GUI-klasserna inom den streckade rutan: Färdiga klasser Klasserna Cell, GameLogic och GameController är färdiga. Klasserna beskrivs kortfattat nedan. Endast de konstruktorer och metoder som behövs för att lösa uppgiften är medtagna. public class Cell extends Observable (färdig) Motsvarar en ruta på spelplanen. Håller reda på om rutan skall innehålla ett kryss, en ring eller vara tom. När objektet ändras uppdateras en observatör med en av tre strängar:, X eller O. public class GameLogic (färdig) Lagrar information om spelplanen. Har ett antal Cell-objekt. Klassen kan även räkna ut om någon spelare vunnit. Kontruktor public GameLogic(int size) size anger spelets dimension (3 i exemplet ovan). Metoder public int getsize() returnerar spelets dimension. public void addcellobserver(int row,int col,observer obs) adderar obs som observatör på Cell-objektet i position row, col.

4 (7) public class GameController (färdig) Styr spelets kontrollflöde och turordningen mellan spelarna. Samarbetar med GameLogic för att registrera spelarnas drag, kontrollera om någon vunnit, samt skapa ny spelomgång. Kontruktor public GameController(GameLogic model) Metoder public void select(int row,int col) Uppgifter Rapporterar ett kryss eller ring för position row, col till modellen, beroende på vilken spelares tur det är. Spelets fönster skall se ut som följande exempel visar, här ett 3 x 3-spel efter fem drag: CellView Observera att klassdiagrammet ovan kan ge värdefull information som inte nämns här. a) Implementera klassen CellView. Objekt av klassen skall kunna vara komponenter i ett fönster och visa en text. Klassen skall vara observatör enligt designmönstret Observer. (3 p) b) Implementera klassen Gui. Kontruktor public Gui(GameLogic model,gamecontroller controller) Visar ett fönster enligt exemplet ovan. Samarbetar med GameLogic och GameController. Lagrar ett antal CellView-komponenter. När användaren trycker på en sådan komponent skall positionen rapporteras till GameController. (10 p) c) Skriv en main-metod som skapar och sätter ihop objekt av GameLogic, GameController samt Gui till ett fungerande program. När main exekveras skall alltså fönstret visas. (3 p)

5 (7) Uppgift 3 Information om licensnycklar för en viss programvara lagras på en server i en textfil med kolonseparerade rader av följande format: IP-adress:lösenord:licensnyckel Exempel: 139.4.2.7:qwerty:DONT-TRYT-OCRA-CKME-YOUF-OOLI-SHHA-CKER En licensnyckel gäller för en programinstallation på den dator som anges av IP-adressen. Om man glömt sin nyckel skall man kunna få den skickad till den dator som nyckeln gäller för. license key password Server Man begär att få en nyckel genom att skicka ett datagram innehållande lösenordet till servern. Servern kontrollerar om det inkommande datagrammets avsändaradress och lösenord finns i licensnyckelfilen. Om så är fallet returneras ett datagram innehållande den matchande licensnyckeln till avsändaren. I annat fall returneras ett datagram innehållande texten Authorisation failure. Avsändarens adress och port kan erhållas ur datagrammet med metodanrop. a) Implementera klassen Database som hanterar textfilen med licensnycklarna. Klassens konstruktorn skall ta namnet på licensnyckelfilen som inparameter. Dessutom skall den ha metoden public String lookup(string host,string pwd) throws IOException lookup skall söka i filen efter rader som matchar host och pwd. Om sökningen lyckas returneras det matchande licensnumret, annars null. Ex. lookup( 139.4.2.7, qwerty ) returnerar DONT-TRYT-OCRA-CKME-YOUF-OOLI-SHHA-CKER. Tips: Använd split för att analysera textraderna. b) Implementera klassen Server. Klassen skall ha en konstruktor public Server(int port,database db) som tar portnumret för inkomande datagram, samt licensdatabasen som inparametrar. Det skall också finnas en metod som startar servern. Metoden skall oupphörligt vara beredd på att ta emot datagram med lösenord, vilket beskrevs ovan. Sökning skall göras i databasen, samt lämpligt svar i form av ett datagram skickas till avsändaren. Avsändarens adress och portnummer kan fås med lämpliga metodanrop, se API. (10 p) (4 p)

6 (7) Uppgift 4 Ett klassiskt problem i datalogi är följande: Fem filosofer sitter kring ett runt bord. Mellan varje filosof ligger en gaffel. Mitt på bordet står en tallrik spagetti. För att få äta måste en filosof ta upp både gaffeln till vänster och gaffeln till höger. Gafflarna läggs därefter tillbaka på sina platser. Om vi betraktar filosoferna som processer blir problemet att visa att alla blir mätta, d.v.s. att schemaläggningen av processerna sker rättvist. (ursäkta grafiken) Eftersom det här är en tillämpad utbildning ersätter vi filosoferna med programmerare. Uppgiften är att konstruera en simulator för problemet ovan. Programmerare och gafflar modelleras som objekt. Ett gaffelobjekt får bara användas av ett programmerarobjekt i taget. a) Konstruera gaffelklassen Fork. Klassen skall ha två void-metoder: grab() och drop(). grab anropas av en tråd som vill äga ett gaffelobjekt, och drop för att lämna tillbaka det. Om flera trådar anropar grab för samma objekt skall bara en i taget ges äganderätt, de andra får vänta på sin tur. Utnyttja Javas mekanismer för synkronisering på lämpligt sätt. (4 p) b) Konstruera klassen Programmer. Varje objekt av klassen skall exekvera i en egen tråd. En konstruktor skall ta två gaffelobjekt samt programmerarens namn som inparametrar. Tråden skall utföra en oändlig cykel av: tag gafflar, ät, lämna tillbaka gafflar. Ätandet motsvaras av en utskriftsrad enligt exemplet nedan. Talet inom parenteser är antalet gånger processen ätit. (4 p) c) Konstruera klassen Simulator. Klassen skall skapa en ring av fem programmerartrådar med mellanliggande gaffelobjekt (enligt figuren ovan), samt starta trådarna. Antalet programmerare (och gafflar) skall hanteras generellt så att man enkelt kan variera antalet. (4 p)... Programmer 4 eats (22179) Programmer 1 eats (22117) Programmer 2 eats (22152) Programmer 3 eats (22161) Programmer 1 eats (22118) Programmer 0 eats (22175) Programmer 2 eats (22153)... Här framgår att schemaläggningen av trådarna varit någorlunda rättvis.

7 (7) Uppgift 5 Vi har ju lärt oss att instansvariabler bör deklareras som privata i klasser för att skydda variablerna från felaktig användning. Vill man bara läsa av en variabel kan man deklarera en accessmetod. Men är det så enkelt? Vad händer om instansvariabeln innehåller en objektreferens till exempelvis en lista? Studera följande klass: public class MyClass { public ArrayList<String> names; private ArrayList<Boolean> truths; private ArrayList<Integer> numbers; public ArrayList<Boolean> gettruths() { return truths; public Iterator<Integer> getnumbers() { return numbers.iterator(); En användare av klassen har obegränsad access till names. Accessmetoden gettruths ger access till den andra listan och möjliggör såväl tillägg av nya element som borttagning av element. Det går dock inte att ta bort eller byta ut själva listan. Ett tredje sätt är att returnera en iterator till listan vilket görs i den sista metoden. Det kan t.ex. utnyttjas så här: MyClass obj = new MyClass(); Iterator<Integer> it = obj.getnumbers(); while ( it.hasnext() ) { int i = it.next(); if ( i % 2 == 1 ) it.remove(); Just det, iteratorn har en remove-metod med vilken listan kan muteras! Vad göra? Uppgiften är att konstruera filterklassen ReadOnlyIterator som givet en vanlig iterator ger en iterator utan en fungerande remove-metod. Metoden getnumbers kan då istället skrivas public Iterator<Integer> getnumbers() { return new ReadOnlyIterator<Integer>(numbers.iterator()); Om nu remove anropas, som ovan, skall undantaget UnsupportedOperationException kastas. Om argumentet till konstruktorn är null skall undantaget IllegalArgumentException kastas. Tips: Av ovanstående kod kan du dra vissa slutsatser om vilka typer som är inblandade. Gränssnittet Iterator finns i API. (8 p)