DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

Relevanta dokument
DAT043 Objektorienterad Programmering

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

Lösningar för tenta 3 DAT043,

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

TENTAMEN OOP

Tentamen, EDAA10 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

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

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 Datastrukturer, DAT037 (DAT036)

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 I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poä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

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

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

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

DAT043 - föreläsning 8

TENTAMEN OOP

OOP Omtenta

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

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.

Laboration A Objektsamlingar

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

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

OOP Tentamen

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

Tentamen ID1004 Objektorienterad programmering April 7, 2015

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

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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

Malmö högskola 2008/2009 CTS

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Tentamen i Programmeringsteknik I

Laboration 24 Databasen MySQL och java

Tentamen Programmering fortsättningskurs DIT950

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.

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

Tentamen Datastrukturer, DAT037 (DAT036)

OOP Tenta

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Tentamen Datastrukturer (DAT036)

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

TENTAMEN OOP

Tentamen, EDAA20/EDA501 Programmering

Tentamen TEN1 HI

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Tentamen, EDA501 Programmering M L TM W K V

Del A (obligatorisk för alla)

Algoritmer. Två gränssnitt

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

Tentamen Datastrukturer (DAT037)

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540)

OOP Tentamen

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

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

Tentamen i Grundläggande programmering STS, åk

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 vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen FYTA11 Javaprogrammering

Generisk klass med typparameter Inre klass - ListIterator

Tentamen OOP

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen i Grundläggande programmering STS, åk

Lösningsförslag tentamen FYTA11 Java

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

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

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Del A (obligatorisk för alla)

Den som bara har en hammare tror att alla problem är spikar

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

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

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Lösningsförslag till exempeltenta 2

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

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

Föreläsning 10. ADT:er och datastrukturer

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Tentamen i Programmering

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

MVC-mönstret. model-view-control i Swing

Tentamen TEN1 HI

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

PROGRAMMERINGSTEKNIK TIN212

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Transkript:

DAT043 Objektorienterad Programmering Tentamen 2018-03-10 Tid: 08.30-12.30 Ansvarig lärare: Moa Johansson Tfn: 031 772 10 78 Ansvarig lärare besöker tentamenssalarna ca klockan 9.30 samt 11.00. Tentamensregler Tentamen består av två delar. För att få godkänt på tentan (betyg 3) måste man lösa minst fem av sju uppgifter i Del 1 (frågor numrerade 1 7). För att får högre betyg krävs att man utöver detta även löser uppgifter i Del 2 (frågor 8 9). För att få betyg 4 ska, utöver godkänt på Del 1, även en fråga från Del 2 lösas. För betyg 5 skall, utöver godkänt på Del 1, dessutom båda frågorna i del 2 lösas. Förutsatt att man klarat Del 1 får man självklart testa att lösa båda uppgifterna i Del 2. Lyckas man inte med någon har man ändå säkrat betyg 3, lyckas man bara med den ena så får man betyg 4. Minuspoäng ges ej. Poäng på Del 2 kan eventuellt räknas mot godkänt om det skulle behövas (t.ex. fyra godkända lösningar på Del 1 och en godkänd lösning på Del 2 kan ge en trea i betyg), men det är osannolikt att man klarar frågorna i Del 2 om man inte samtidigt klarat Del 1. Tillåtna hjälpmedel: Den tresidiga lathund som finns tillgänglig på kurssidan och upptryckt i ett exemplar till varje student vid tentamen (man ska alltså inte ta med sig en egen kopia). Tentamensgranskning: Efter rättning finns tentamen tillgänglig på expeditionen på plan 4 i EDIT huset och kan granskas där. Önskar man diskutera rättningen kommer man kunna boka tid för detta genom att fylla i det formulär som kommer finnas länkat till från kurshemsidan efter att tentan är rättad. Notera att tentan i så fall ska lämnas kvar på expeditionen. Implementeringar ska skrivas i Java. Oväsentliga syntax- och namnfel eller liknande, betyder inte att lösningen underkänns. Det viktiga är att lösningar bedöms vara tillfredställande, d.v.s. att studenten med sitt svar tydligt visar förståelse för problemet i uppgiften och dess lösning. Skriv tydligt och välstrukturerat. Svårförståeliga lösningar kan underkännas. Lösningar som är onödigt krångliga eller inte följer god programmeringsstil, dels allmänt och dels med tanke på idéerna med objektorienterad programmering, kan underkännas. Om det inte uttryckligen står motsatsen i uppgiften kan du använda klasser och metoder i Java:s API. Om det inte uttryckligen står motsatsen i uppgiften får du definiera egna hjälpmetoder. Importeringar av klasser i Java:s API behöver inte skrivas ut. Lycka till!

Uppgift 1 Implementera en enkel klass SpaceShip som ska representera rymdskepp (i t.ex. ett spel). Klassen ska ha de instansvariabler och metoder som anges i UML-diagrammet nedan. Du ska inte lägga till några ytterligare metoder eller variabler. Lägg märke till vilken tillgänglighet (private eller public) instansvariabler och metoder ska ha. Konstruktorn ska ta ett argument som anger ett värde på styrkan hos skeppets sköld. Namnet behöver inte vara känt när ett SpaceShip-objekt skapas, och ska då vara en tom sträng. -shield : int -name : String SpaceShip «constructor» +SpaceShip(shield : int) +getshield() : int +getname() : String +setname(string) : void

Uppgift 2 En ordruta är en en ruta där samma ord kan läsas (i samma ordning) både horisontellt och verikalt. Ett exempel är denna ruta som innehåller orden ASK, SKO, KOL: A S K S K O K O L I Java kan vi representera en ordruta med hjälp av en tvådimensionell array innehållande chars. Skriv en metod: public static boolean ärordruta(char[][] ruta) som kontrollerar om en given ordruta verkligen innehåller ord som går att läsa både horisontellt och vertikalt. Du kan anta att ruta.length > 0 och att ruta.length == ruta[i].length för alla tillåtna i, samt att alla chars i rutan representerar stora bokstäver (VERSALER). Metoden ska dock fungera för ordrutor av godtycklig storlek, alltså inte bara för rutor av trebokstavsord som i exemplet. Tips: Fundera över vilka positioner i rutan som måste innehålla samma bokstav.

Uppgift 3 Vad skrivs ut av programmet nedan? Tänk efter noga! public class Uppgift3 { public static void minmetod(string[] p, String[] q, boolean r) { p[1] = "Xylofon"; q[1] = "Yrväder"; r = false; public static void main(string[] args) { boolean b = true; String[] x = {"Apa", "Björn", "Citron", "Docka", "Elefant"; String[] y = x; minmetod(x, y, b); System.out.println(b); System.out.println(x[1]); System.out.println(y[1]);

Uppgift 4 Koden i rutan hör till en enkel GUI-applikation (se nedan). Det är meningen att den ska skriva Löst uppgiften i terminalfönstret när man trycker på knappen. Men något saknas och knappen fungerar i nuläget inte som den ska. Skriv den saknade koden. Ange även var i klassen du skulle lägga in den (radnummer). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Uppgift4 implements Runnable { public static void main(string[] args) { SwingUtilities.invokeLater(new Uppgift4()); public void run() { JFrame frame = new JFrame("Uppgift 4"); frame.setdefaultcloseoperation(jframe.exit_on_close); JButton button = new JButton("Skriv Löst uppgiften!"); frame.setpreferredsize(new Dimension(300, 250)); frame.add(button, BorderLayout.SOUTH); frame.pack(); frame.setvisible(true);

Uppgift 5 Studera koden nedan noga. Vi har ett interface, Doable, samt klasserna MyClass och MyClass2. Ange samtliga rader (taggade med A-J) som antingen orsakar kompileringsfel eller som kan orsaka ett runtime-fel om programmet körs. Som svar räcker det att ange raden eller radernas bokstav. A. MyClass a = new MyClass(3); B. MyClass2 b = new MyClass2(2, "a good deed"); C. MyClass c = b; D. MyClass2 d = new MyClass(1); E. MyClass e = new MyClass2(1, "a tricky question"); F. MyClass2 f = (MyClass2) a; G. Doable g = e; H. Doable h = (() -> System.out.println(42+3)); I. MyClass2 i = (MyClass2) g; J. MyClass j = (MyClass) h; interface Doable { public void dosomething(); class MyClass implements Doable{ int number; public MyClass(int number){ this.number = number; public void dosomething(){ int i = number; while(i > 0){ System.out.println("I did something!"); i--; class MyClass2 extends MyClass{ String s; public MyClass2(int number, String s){ super(number); this.s = s; public void dosomething(){ int i = number; while(i > 0){ System.out.println("I did " + s + "!"); i--;

Uppgift 6 Studera klassen Uppgift6 i rutan nedan. Den ska ha en privat klassvariabel counter och en privat instansvariabel x. Dock har det skett ett misstag någonstans i klassens kod, och när vi försöker kompilera Uppgift6 får vi följande felmeddelande: Uppgift6.java:13: error: non-static variable x cannot be referenced from a static context x = newvalue; ^ 1 error Vad är misstaget? Ange även rättad kod i ditt svar. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class Uppgift6{ private static int counter = 0; private int x; public Uppgift6(){ x = counter; counter++; public static void setcounter(int newcounter){ counter = newcounter; public static void setvariable(int newvalue){ x = newvalue;

Uppgift 7 Skriv en generisk metod (en metod som använder sig av Java generics) med namnet byt som byter plats på två element i en array med element av godtycklig typ. Metoden ska vara statisk och ha tre argument: en array samt två argument av typ int som anger index för de två elementen som ska byta plats.

DEL 2 Du behöver bara svara på dessa frågor om du aspirerar på betyg 4 eller 5. Vill du ha fyra ska du lösa en uppgift (välj själv) och för femma ska du lösa båda uppgifterna i den här delen, utöver de uppgifter du löst i Del 1. Uppgift 8 Skriv en statisk metod filteredlistfromfile. Metoden ska: Läsa in en fil som innehåller ord separerade med blanksteg, där filnamnet ges som ett argument till metoden, av typen String. Om filen inte kan hittas ska metoden hantera det undantag som då kastas på ett lämpligt sätt (t.ex. skriva ut ett felmeddelande och returnera null eller en tom lista). Filtrera dessa ord efter ett godtyckligt villkor (tips: detta ska ges som ett argument till metoden). Metoden ska alltså kunna användas för att filtrera orden i inputfilen på många olika sätt. Metoden ska sedan returnera en lista av de strängar som uppfyller det givna villkoret som en List<String>. Skriv även ner hur du skulle anropa filteredlistfromfile för ett av de tre exemplen (valfritt) nedan (men kom ihåg att metoden även ska kunna filtrera efter andra villkor än de i exemplen nedan). Exempel på tänkt användning: Anta att vi har en textfil Uppgift8.txt som innehåller följande: apa bus citron docka ek fot gris häst is jos ko lo mys näsa oxe päron q ros snigel tåg uggla varg xylofon yngling zebra åsna ägg ö Exempel 1: Om villkoret är att vi vill ha alla strängar med längd==3, så ska filteredlistfromfile för filen Uppgift8.txt ovan producera en lista som innehåller orden: apa, bus, fot, jos, mys, oxe, ros, tåg, ägg Exempel 2: Om villkoret istället är att strängens första bokstav är a eller b så ska filteredlistfromfile för filen Uppgift8.txt ovan returnera en lista som innehåller orden: apa, bus Exempel 3: Om villkoret är att stängen har fem eller fler bokstäver så ska filteredlistfromfile för filen Uppgift8.txt ovan returnera en lista som innehåller orden: citron, docka, päron, snigel, uggla, xylofon, yngling, zebra Tips 1: Studera klassen Scanner som finns listad i Lathunden. Tips 2: Studera även interfacet Predicate<T> i Lathunden.

DEL 2 Du behöver bara svara på dessa frågor om du aspirerar på betyg 4 eller 5. Vill du ha fyra ska du lösa en uppgift (välj själv) och för femma ska du lösa båda uppgifterna i den här delen, utöver de uppgifter du löst i Del 1. Uppgift 9 En cirkulär länkad lista är en datastruktur som påminner om en vanlig länkad lista som vi sett under kursens gång, men med skillnaden att det sista länken länkar tillbaka till den första: 2 4 2 6 Listan ovan är ett exempel på en cirkulär lista som innehåller elementen [2,4,6]. Ditt jobb är att skriva en Javaklass CircularList. Klassen ska vara generisk. Du får inte använda någon biblioteksklass från Javas API i din lösning, du måste programmera datastrukturen för den cirkulära länkade listan själv. Klassen ska implementera följande metoder: public void add(e elem), som lägger till en länk med det nya elementet sist i listan. public E get(int index), som returnerar det värde som finns på givet index. Listans första element ska som vanligt antas ha index 0. Till skillnad från en vanlig lista kan vi dock göra antagandet att om index är större än längden på listan -1, så fortsätter vi helt enkelt ytterligare ett varv. Så i exemplet ovan ska get(0) == get(3) == get(6) osv, get(1) == get(4) == get(7) osv, get(2) == get(5) == get(8)osv. Tips 1: Fundera över hur du kan representera en länk i listan som en inre klass. Tips 2: Det räcker att hålla reda på den sista länken i listan, eftersom listan är cirkulär.