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

Relevanta dokument
Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Samlingar Collection classes

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

Samlingar Collection classes

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Collection Classes. bjectorienterad programmering Sida 1

Objektorienterad Programkonstruktion

DAT043 Objektorienterad Programmering

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

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

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

Länkade strukturer. (del 2)

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

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

TENTAMEN OOP

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

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

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

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

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

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

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

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

TENTAMEN OOP

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

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

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

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

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

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

Generisk klass med typparameter Inre klass - ListIterator

Stackar, köer, iteratorer och paket

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

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

Tentamen i Programmeringsteknik I

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Laboration 13, Arrayer och objekt

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

Kurskod D0010E Datum Skrivtid 5tim

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

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.

OOP Objekt-orienterad programmering

TENTAMEN OOP

LÖSNINGSFÖRSLAG TENTAMEN

Interfacen Set och Map, hashtabeller

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

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

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

Tentamen i Programmering

DAT043 - föreläsning 8

Laboration A Objektsamlingar

Tentamen i Grundläggande programmering STS, åk 1 lördag

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

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

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

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

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

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

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

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

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

Arrayer. results

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

Föreläsning 8: Exempel och problemlösning

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

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

Objektorienterad Programmering (TDDC77)

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

Programuppbyggnad från komponenter (en liten orientering)

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

I18N språkoberoende. ResourceBundle. Ikoner. Färg. Javadoc. Meny

Lösningar för tenta 3 DAT043,

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

Omentamen FYTA11 Javaprogrammering

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Laboration 1 - Grunderna för OOP i Java

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

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

Tentamen i Objektorienterad programmering

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

Tentamen Datastrukturer (DAT037)

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

TENTAMEN I. OBJEKTORIENTERAD PROGRAMMERING för Z1. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poä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, EDAA10 Programmering i Java

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

OOP Tentamen

Del A (obligatorisk för alla)

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

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

TENTAMEN I DATAVETENSKAP

Transkript:

Tentamen 2006-0823 Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och 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. Godis (8p) Anta att godisaffären säljer fem slag av godis: lösgodis för 4kr per hekto, fint lösgodis för 8kr per hekto, inte så fint lösgodis för 1.5kr per hekto, påse med gelehallon för 11 kr per styck och enstaka lakritssnören för 0.9 kronor per styck. (a) Definiera en abstrakt klass Godis. Den ska ha abstrakta metoder pris() och vikt(). (b) Definiera lämpliga klasser för de olika typerna av godis. De ska ärva klassen Godis och definiera metoderna pris() och vikt(). (Ge bilar och bilpåsar lämplig vikt.) Tänk noggrant igenom hur de olika klassernas konstruktorer ska se ut. (c) Skriv klassen Godispåse. Den ska definiera följande metoder: void add( Godis g) placera godis i påsen double vikt() returnera totalvikt double pris() returnera sammanlagt pris Vikt och pris ska beräknas vid metodanropet. (d) Din implementation bör vara skriven så att det går att lägga till en ny typ av godis utan att göra ingrepp i den kod som du skrivit. Beskriv hur detta ska göras. (e) Ge ett testprogram som provkör klassdefinitionen ovan genom att skapa en godispåse, fylla den med olika typer av godis och beräkna totalvikt och pris. Om du vill får du anta att en godispåse inte kan lagra mer än ett visst antal objekt. 2. Referenser (6p) Betrakta följande program import java.util.*; class Test { public static void main(string args[]) { int val; List<String> x, y; val = 10; x = new ArrayList<String>(); x.add("äpplen"); y = new ArrayList<String>(); y.add("päron"); System.out.println("val = " + val); System.out.println("x = " + x); System.out.println("y = " + y); System.out.println(""); System.out.println("anropar m1"); 2

m1(val, x, y); System.out.println("återvänt från m1"); System.out.println(""); System.out.println("val = " + val); System.out.println("x = " + x); System.out.println("y = " + y); public static void m1(int a, List<String> r1, List<String> r2) { System.out.println("i metoden m1..."); a = 0; r1 = null; //1 r2.add(" smakar bra"); System.out.println("a = " + a); System.out.println("r1 = " + r1); System.out.println("r2 = " + r2); (a) Beskriv i stora drag vad programmet gör. (b) Beskriv vad programmet gör i detalj och vad det skriver ut. (Tips: Om variabeln l är bunden till ett objekt av typen ArrayList som innehåller strängarna "Hej" och "Hopp" ger System.out.println(l) utskriften [Hej, Hopp]). (c) Vad händer om en metod returnerar ett objekt? (d) Finns det någon situation när ett objekt kopieras? 3. Hej hopp (6p) Anta att vi har följande klassdefinitioner. class Nisse { void go () { System.out.println("Hej"); class Kalle extends Nisse { void go () { System.out.println("Hopp"); class Olle extends Nisse { void go () { System.out.println("Hit"); void stop () { System.out.println("Dit"); 3

Betrakta följande kodfragment. Vilka accepteras av kompilatorn? Vilka ger fel vid körning? Vilka kan både kompileras och köras utan problem? Dina svar ska motiveras (kort). (a) Nisse a = new Kalle(); a.go(); (b) Olle a = new Nisse(); a.go(); (c) Olle a = new Kalle(); a.go(); (d) Nisse a = (Nisse)new Olle(); a.stop(); (e) Olle a = (Olle)(Nisse)new Kalle(); a.stop() 4. OOP (8p) Hur ska ett välskrivet objektorienterat program se ut? Utgå från följande punkter. (a) Val av klasser. (b) Utformning av klassdefinitioner. (c) Utformning av enskilda metoder. (d) Användning av arv. (e) Duplicerad kod. (f) Utformning av programmet i stort. Kan du komma på någon aspekt som ej täcks av punkterna ovan? 5. Samlingar (6p) Skriv en metod som tar ett antal samlingar av strängar och skriver en lista av de strängar som förekommer i två eller tre av samlingarna. Du bör använda collection classes, men oavsett vilken datastruktur du väljer för att representera indata, ange hur samlingarna representeras. Ange också hur metoden är tänkt att anropas. 6. Scribble (6p) (a) Betrakta programmet på nästa sida. Vad gör det? (b) En brist hos programmet är att bilden inte är beständig. Hur kommer det sig? Skissa på hur programmet kan modifieras så att bilden ej försvinner om fönstret tillfälligt döljs. (c) Anta att man vill lägga till möjlighet att rita andra figurer. Skissa på hur programmet måste ändras för att tillåta detta. (d) Anta att man vill kunna redigera en bild genom att ta bort utritade linjer. Skissa på hur programmet måste ändras för att tillåta detta. 4

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.eventlistener; public class Scribble extends JFrame { class ScribbleCanvasListener implements MouseListener, MouseMotionListener { public ScribbleCanvasListener(ScribbleCanvas canvas) { this.canvas = canvas; 5 public Scribble() { settitle("scribble Pad"); canvas = new ScribbleCanvas(); canvas.setbackground(color.white); getcontentpane().setlayout(new BorderLayout()); getcontentpane().add(canvas, BorderLayout.CENTER); addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); ); public static void main(string[] args) { int width = 600; int height = 400; JFrame frame = new Scribble(); frame.setsize(width, height); Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize(); frame.setlocation(screensize.width/2 width/2, screensize.height/2 height/2); frame.show(); protected ScribbleCanvas canvas; public void mousepressed(mouseevent e) { Point p = e.getpoint(); canvas.mousebuttondown = true; canvas.x = p.x; canvas.y = p.y; public void mousereleased(mouseevent e) { canvas.mousebuttondown = false; public void mousedragged(mouseevent e) { Point p = e.getpoint(); if (canvas.mousebuttondown) { canvas.getgraphics().drawline(canvas.x, canvas.y, p.x, p.y); canvas.x = p.x; canvas.y = p.y; public void mouseclicked(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { public void mousemoved(mouseevent e) { protected ScribbleCanvas canvas; class ScribbleCanvas extends JPanel { public ScribbleCanvas() { listener = new ScribbleCanvasListener(this); addmouselistener((mouselistener) listener); addmousemotionlistener((mousemotionlistener) listener); protected EventListener listener; protected boolean mousebuttondown = false; protected int x, y;

LYCKA TILL! Sven-Olof 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: 6

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.Entryelement (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()); 7