Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

Samlingar Collection classes

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Samlingar Collection classes

DAT043 Objektorienterad Programmering

Länkade strukturer. (del 2)

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

Objektorienterad Programkonstruktion

Collection Classes. bjectorienterad programmering Sida 1

Collection classes. Interface, första exempel. Interface (forts) Men först

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

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

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

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

DAT043 - föreläsning 8

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

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

Tentamen i Programmeringsteknik I

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

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

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

Stackar, köer, iteratorer och paket

TENTAMEN OOP

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

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

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

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

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

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 {... }

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

Tentamen Programmering fortsättningskurs DIT950

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

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 ä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.

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

Arrayer. results

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

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

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

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

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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

Tentamen i Programmeringsteknik I

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

PROGRAMMERINGSTEKNIK TIN212

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

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

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 i Programmeringsteknik I, ES,

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

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

Del A (obligatorisk för alla)

TENTAMEN OOP

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

Att skriva till och läsa från terminalfönstret

Länkade strukturer, parametriserade typer och undantag

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

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Java, klasser, objekt (Skansholm: Kapitel 2)

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

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

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

TDDD78 Viktiga begrepp, del 2

Konstruktion av klasser med klasser

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Klasshierarkier. Klasser kan byggas på redan definierade klasser

LÖSNINGSFÖRSLAG TENTAMEN

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.

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

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

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

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

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

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

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

Föreläsning 2 Datastrukturer (DAT037)

TENTAMEN OOP

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

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 FYTA11 Javaprogrammering

Kurskod D0010E Datum Skrivtid 5tim

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

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

Outline. Objektorienterad Programmering (TDDC77) Lösningen heter Collection. Collection gränsnittet. Collection. Iterable. Ahmed Rezine.

LyckaTill önskar Anna

Transkript:

Tentamen 2006-05-06 Objekt-orienterad programmering i Java, 5p distanskurs Uppsala Universitet Instutitionen för informationsteknologi Avdelningen för datalogi Kursansvarig: Sven-Olof Nyström May 2, 2007 Läs igenom följande instruktioner noggrant: Skrivtiden är fem timmar. Inga extra hjälpmedel är tillåtna. Skriv endast en lösning per blad och skriv namn på varje blad. Skriv inte på baksidan av bladen. Hänvisa inte mellan uppgifterna. Använd inte rödpenna. Oläsbara eller otydliga lösningar ger noll poäng per uppgift. Om tvetydigheter uppstår, gör intelligenta antaganden och ange dem. Om du har svårt att komma ihåg exakt hur någon metod eller klass i Javas standardbibliotek ser ut och fungerar, ange noggrant ditt antagande. Maxpoäng är 40. För godkänd krävs vanligtvis 20 poäng och för väl godkänd 30 poäng. 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. 1

1. Frukt (6p) Citroner kostar 1,50 kronor per styck, bananer kostar 11 kronor per kilo. Bananer och citroner är frukter. (a) Skriv klasserna Citron, Banan och Frukt. Alla frukter ska ha en metod double pris() som returnerar fruktens pris, samt en metod double vikt() som returnerar fruktens vikt (gör ett rimligt antagande om vikten på citroner). Ingen av klasserna får innehålla instansvariabler, förutom Banan där det finns en instansvariabel som lagrar bananens vikt. Klassen Banan har en konstruktor där vikten på bananen anges. (b) Skriv en klass Påse som implementerar följande metoder: void läggtill(frukt b) placera en frukt i påsen pris() beräkna det sammanlagda priset på frukterna i påsen. totalvikt() beräkna den totala vikten av frukterna i påsen. (c) Skriv ett testprogram som skapar en påse, lägger frukter av olika slag i påsen, och beräknar påsenspris och vikt. Ge en lösning som använder arv och polymorfi. 2. Referenssemantik (5p) (a) Betrakta följande program: public class Box { String contents; Box (String s1) { contents = s1; public void setcontents(string s1) { contents = s1; public String getcontents() { return contents; Vad definierar klassen? Vad gör de olika metoderna? (b) Med definitionen ovan, betrakta följande klass: public class A { public static void main(string args[]) { Box y = new Box("hund"); Box z = new Box("katt"); // (1) y = z; // (2) y.setcontents("giraff"); // (3) 2

Vilka värden har variablerna y och z vid positionerna (1), (2) och (3)? (c) Med samma definition av klassen Box som ovan, betrakta följande klassdefinition: public class B { public static void main(string args[]) { Box y = new Box("ko"); Box z = new Box("kalv"); // (4) Box w = m(y, z); // (5) public static Box m(box r1, Box r2) { r1 = new Box ("elefant"); r2.setcontents("en "+ r2.getcontents() + " i lådan"); // (6) return r2; Vilka värden har variablerna y, z och w vid positionerna (4), (5) och (6)? Vilka värden har r1 och r2 vid position (6)? 3. Arv (5p) Vi har tre klassdefinitioner: class A { class B extends A { class C extends A { Anta att variablerna a, b och c är initialiserade enligt: A a = new A(); B b = new B(); C c = new C(); Ange för var och en av följande satser om satsen a) kompilerar och exekverar korrekt, b) kompilerar utan fel men ger felmeddelande vid körning, eller c) ger fel vid kompilering. Motivera! (a) a = b; (b) b = c; (c) b = (B)c; (d) b = (B)a; (e) a = (A)b; Tips. Det kan hjälpa om du ersätter klasserna A, B och C med klasser där arvshierarkin är mera naturlig. 3

4. Primitiva typer, undantag, (5p) (a) Java har ett antal primitiva datatyper (Skansholm kallar dem inbyggda enkla typer) som inte definieras av någon klass. Ge några exempel på primitiva datatyper. (b) På vilka sätt skiljer sig de värden av de primitiva datatyperna från andra objekt? (c) Hur definieras nya typer av undantag (exceptions) i Java? (d) Vissa undantag måste alltid fångas eller deklareras. Vilka är dom? Ge exempel. (e) Betrakta följande kodfragment (du behöver inte bry dig om hur koden mellan try och första catch-klausulen fungerar). try { String os = System.getProperty("os.name"); if(os!= null && os.startswith("windows")) { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); catch(nullpointerexception anullpointerexception) { catch(exception e) { Vad är resultatet av att man kapslar in koden med en try-catch sats på det här sättet? Vad händer om koden kastar (tex) en NullPointerException eller en IOException? 5. Figurer (7p) Givet följande gränssnitt: interface GraphicsObject { public double area(); public void translate(double dx, double dy); public boolean inside( double x, double y); Du ska implementera två grafiska objekt (figurer), Square och Group. (Ett mera realistisk exempel skulle förstås ha fler typer av grafiska objekt.) Objekt av klassen Group innehåller en mängd grafiska objekt. Du behöver inte definiera metoder för att addera grafiska objekt till en grupp, men det ska förstås vara möjligt att skriva såna metoder. Du bör använda collection classes ur standardbiblioteket, och utnyttja polymorfi där det är lämpligt. Metoden translate() ska förflytta figuren med dx i x-led och dy i y-led. Metoden inside() ska returnera sant om punkten (x, y) ligger inne i figuren, falskt annars. För en grupp av figurer gäller det att kolla om punkten ligger inom någon av de figurer som ingår i gruppen. (a) Skriv klasserna Square och Group som ska implementera GraphicsObject. (b) Skriv en klass GraphicsWindow som ska innehålla ett antal grafiska objekt (Square och Group). Skriv metoderna 4

läggtill(graphicsobject go);// lägg in go i fönstret tabort(int x, int y); // ta bort alla figurer som innehåller // (x,y) enligt metoden inside() double area(); // returnera summan av alla figurers yta translate(int dx, int dy); // förflytta alla figurer Metoden area() ska helt enkelt summera alla figurers yta (dvs ni behöver inte ta hänsyn till att figurer eventuellt överlappar varandra). 6. På bio (7p) Anta att en biograf lagrar en databas över filmvisningar. Varje filmvisning innehåller information om vilken film som visades och vilka personer som såg filmen. (a) Beskriv en lämplig representation av databasen (helst med collection classes). Du bör förstås beskriva de olika klasserna som ingår. (b) Skriv en metod som givet en samling (collection) av personer och en samling av filmer returnerar de filmer som inte setts av någon av personerna. (c) Antag att man vill veta vilken eller vilka filmer som setts av flest människor (det räknas inte om någon sett samma film flera gånger). Skriv en metod som givet en databas (enligt ovan) tar fram en lista (dvs en collection) av de filmer som setts av flest personer. Du bör skriva metoden så att den bara går igenom filmvisningarna en gång, oavsett hur många filmer eller personer det finns i databasen. I det fall flera filmer har setts av lika många människor returnerar du alltså flera filmer, annars bara en. 7. Utvecklingsmodeller (5p) Beskriv de olika utvecklingsmodellerna vattenfallsmodellen, rational unified process (iterativ utveckling) och extreme programming. Nämn några önskemål man kan ha på en utvecklingsprocess (det finns ett antal ganska självklara) och diskutera hur de olika utvecklingsmodellera uppfyller dem. LYCKA TILL! Sven-Olof 5

Appendix: något om samlingar och iteratorer Metoder i gränssnittet Collection: add(obj): lägg in obj addall(coll): lägg in alla objekt i coll clear(): tar bort samtliga objekt contains(obj): returnerar sant om obj finns i samlingen containsall(coll): returnerar sant om alla objekt i coll finns i samlingen equals(coll): returnerar sant om coll och aktuell samling är lika. isempty(): returnerar sant om samlingen är tom iterator(): returnerar en Iterator som kan användas för att loopa genom samlingen remove(obj): tar bort obj ur samlingen removeall(coll): tar bort objekten i coll ur samlingen retainall(coll): tar bort alla objekt utom de som finns i coll ur samlingen size(): returnerar antal element i samlingen toarray(): returnerar en array med alla element i samlingen Klasser som implementerar Collection: ArrayList (implementerar List) LinkedList (implementerar List) Vector (implementerar List) TreeSet (sorterad mängd, implementerar SortedSet) HashSet (mängd, implementerar Set) Metoder i iteratorer: hasnext(): returnerar sant om det finns fler element next(): returnerar nästa element, flyttar pekaren remove(): tar bort aktuellt element Exempel på hur man använder iteratorer: static void loop (Collection c) { for(iterator i = c.iterator(); i.hasnext(); ) { Object obj = i.next(); System.out.println( obj ); Metoder i gränsnittet Map (som implementeras av HashMap och TreeMap): int size() - returnerar antal (nyckel-värde)-par. void clear() - tar bort alla par i avbildningen. Object put(object nyckel, Object värde) - lägger in (nyckel,värde)-paret, ersätter det gamla (det med samma nyckel) om det finns. Object get( Object nyckel) - returnerar värdet för nyckeln nyckel eller null om nyckel ej finns. Set entryset() - returnerar ett Set med varje (nyckel-värde)-par i form av ett Map.Entry-element (se vidare nedan i loop-exemplet). Set keyset() - returnerar ett Set med bara nycklarna. Collection values() returnerar en samling med bara värdena. Loop genom avbildning (mappen i exemplet) med utskrift av nyckel och värde: Set mapasset = mappen.entryset(); for (Iterator i = mapasset.iterator(); i.hasnext();) { Map.Entry me = (Map.Entry) i.next(); System.out.println(me.getKey() + ": " + me.getvalue()); 6