Tentamen ID1004 Objektorienterad programmering December 15, 2012

Relevanta dokument
Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Tentamen ID1004 Objektorienterad programmering April 7, 2015

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

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

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

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 OOP

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

DAT043 - Föreläsning 7

Föreläsning 3-4 Innehåll

F4. programmeringsteknik och Matlab

Tentamen OOP

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

TENTAMEN OOP

Objektorienterad programmering i Java

SMD 134 Objektorienterad programmering

OOP Objekt-orienterad programmering

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Föreläsning 2, vecka 8: Repetition

Typkonvertering. Java versus C

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

2D1342 Programkonstruktion för F1, ht 2006

Programmeringsteknik I

TDDC77 Objektorienterad Programmering

Föreläsning REPETITION & EXTENTA

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

OOP Objekt-orienterad programmering

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

DAT043 - föreläsning 8

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Classes och Interfaces, Objects och References, Initialization

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

Laboration 1 - Grunderna för OOP i Java

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

TENTAMEN OOP

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

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

F7 - Arrayer. ID1004 Objektorienterad programmering Fredrik Kilander

LÖSNINGSFÖRSLAG TENTAMEN

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

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

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

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 (fält)

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

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

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

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

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Föreläsning 3: Booleans, if, switch

2D1339 Programkonstruktion för F1, ht 2003

Parameteröverföring. Exempel. Exempel. Metodkropp

TDIU01 - Programmering i C++, grundkurs

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

Del A (obligatorisk för alla)

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

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

tentaplugg.nu av studenter för studenter

Klasshierarkier - repetition

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Objekt och klasser - Introduktion

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

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

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Skriftlig tentamen för kursen DV017A. Inledande programmering i Java A

Föreläsning 6: Metoder och fält (arrays)

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

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

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

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

JAVA Mer om klasser och objektorientering

Arrayer. results

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

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

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

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

Föreläsning 4. Polymorfism. Polymorfism Dynamisk bindning Inkapsling Information hiding Access-metoder och mutator-metoder

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

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

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

2D1339 Programkonstruktion för F1, ht 2003

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Transkript:

Ordinarie tentamen för ID1004 Objektorienterad programmering, 15 december 2012, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner. För ett godkänt betyg på hela tentamen måste varje sektion ha minst ett godkänt svar. Tentamensbetyget A-F bestäms i huvudsak av den ackumulerade poängsumman (korrekt besvarade frågor) enligt tabellen nedan. Examinator förbehåller sig möjligheten att vid gränsfall justera tentamensbetyget med hänsyn till en bedömning av helhetsintrycket. Poäng 0-11 12-15 16-19 20-25 26-29 30-33 Tentamensbetyg F E D C B A Läs noga igenom alla frågorna först och planera tiden. Lycka till! Grundläggande syntaktiska konstruktioner och begrepp 1. (3p) Inspektera deklarationerna nedan och anmärk på hittade fel. (a) private lång jättestorttal = 999887765439L (b) final double PI = 3,141 592 653 589 793; (c) protected getelement(int index) { (a) Namnet lång är inte en numerisk primitiv datatyp i Java. Deklarationen avslutas inte med semikolon. (b) Det ska vara decimalpunkt istället för komma. Det går inte att dela upp en numerisk konstant med mellanslag. (c) Metoden saknar returtyp. 2. (3p) Inspektera följande tre kodfragment och anmärk på konkreta och möjliga problem. (a) if (n = 99) n = 0; listisempty = true; (b) for(i = 0; i < 10; i++) for(j = 0; j < 10; i++) mx[i][j] = -1; (c) public class Pony { private final int strength; public Pony (int strong) { strength = strong; public boolean isstrongerthan(pony otherpony) { int strength = otherpony.getstrength(); 1

return strength > strength; (a) If-satsen saknar explicit satsblock { vilket gör det svårt att veta om kodraden listisempty = true är tänkt att vara beroende av villkoret eller inte. Indenteringen tyder på att så kan vara fallet. Dessutom är villkorsuttrycket en tilldelning av en numerisk typ vilket kommer att leda till kompileringsfel. Operatorn borde vara ==. (b) For-looparna saknar satsblock (vilket dock inte krävs men är bra för ökad tydlighet). Den inre loopen ökar också på variabeln i (det ser ut som om det borde vara j) vilket kommer att få effekten att den inre loopen rusar iväg med mx[0][0], mx[1][0] ända tills den orsakar en ArrayIndexOutOfBoundsException med mx[i][0]. (c) I metoden isstrongerthan så skapas en lokal variabel strength fast det redan finns en klassvariabel med samma namn. Skuggningen av klassvariabeln gör att returvillkoret alltid kommer att vara falskt, och alla ponnyer verkar vara precis lika starka. Dessutom så finns ingen implementation av metoden getstrength så klassen kommer inte ens att kompilera. 3. (2p) Vilken eller vilka av variablerna i klassen X_Files går att läsa (från vilket package som helst) utan att först skapa en instans av klassen? public class X_Files { private int secret = 0; public static long hidden = 0; String denial = null; public int getsecret() { return secret; protected final short proof = 0; private static final double bluff = 0; Variabeln hidden är public och static och därför åtkomlig utan en instans av X_Files. De andra variablerna är skyddade. Åtkomstmetoden getsecret() räknas inte heller eftersom den kräver en instans att anropa metoden i. 4. (2p) Vilken eller vilka av följande metoder går att använda som parameter i ett metodanrop eller på den högra sidan om = i en variabeltilldelning? (a) public int setvalue(int value) (b) private short maxsampleinrange(int lower, int higher) (c) public void apply(lambda ell, List lst) (d) int unterminate(string s) (e) protected void calculatesums(int [] ar) För att kunna användas till höger om tilldelningsoperatorn (=) eller i en parameteröverföring så måste metoden returnera ett värde. (a), (b),(d) ovan gör detta men inte (c) och (e) för de är deklarerade som void, dvs ingen returtyp. Grundläggande datalogiska begrepp och relationer 5. (3p) I tabellen nedan finns tre separata och ömsesidigt oberoende exempel på sekvenser av programsatser. För varje sekvens: (a) Har programsatsernas ordningsföljd någon betydelse? (b) Motivera svaret på (a) 2

Variablerna i sekvenserna kan antas vara deklarerade av typen int, om inte annat anges. Sekvens 1 Sekvens 2 Sekvens 3 a = a + b; a += c; a++; d = d + e; f += d; d++; String s; s = Nummer: + i; n = s.size(); I sekvens 1 spelar ordningen ingen roll. Sekvensen går att skriva om som: a = a + b + c + 1 och eftersom ordningen inte spelar någon roll för addition så kan satserna utföras i godtycklig följd. I sekvens 2 spelar ordningen roll eftersom f tilldelas värdet av d efter att d har uppdaterats med e, men innan d har ökats med 1. Om raden f += d placeras först så kommer f att ha ett lägre värde (f + d), och om den placeras sist så kommer f att ha ett högre värde (f + d + e + 1). I sekvens 3 spelar ordningen roll eftersom variabeln s måste deklareras innan den tilldelas, och därefter tilldelas ett strängobjekt innan man kan referera till objektets metod size. 6. (5p) Nedan presenteras ett antal exempel på programmeringssituationer som brukar lösas med iteration. För varje situation, vilken typ av iterationssats ( loop statement ) anser du passar i just den situationen och varför då? (a) I en array av String så ska elementet med index n tas bort och alla element med större index än n flyttas ett steg åt vänster (mot n). (b) En metod ska anropas och dess returvärde inspekteras. Detta ska upprepas tills dess att returvärdet är noll. (c) Alla element i en ArrayList ska skrivas ut. (d) Så länge en List innehåller minst ett element så ska första elementet tas ut och bort från listan och behandlas. (e) Vartannat element i en array ska skrivas ut. (a) En for-loop med initiering, villkor och uppdatering. Detta eftersom man kommer att behöva ett index i arrayen. (b) Om inspektionen av returvärdet inskränker sig till att kontrollera mot noll, så räcker det med: while(method()!= 0); men det kan ju vara en mer ingående kontroll och saker som ska göras. I så fall är det kanske bättre med en do-loop: 3

int rtn = 0; do { rtn = method(); if (rtn ) /* Gör komplicerade saker */ ; while (rtn!= 0); (c) En for-each loop, till exempel: for (T e : ArrayList<T>) { System.out.println(e); // T står för en klass eftersom den sortens loop är speciellt lämpad att gå igenom alla element i en datasamling. (d) En while-loop, till exempel: while (!mylist.isempty()) { behandla (mylist.remove(0)); eftersom vi börjar med att testa om det finns något element i listan. (e) Här behöver vi återigen ett index, så då är en for-loop med initiering, villkor och uppdatering bäst. Till exempel: for (int i = 0; i < ar.length; i += 2) { System.out.println(ar[i]); 7. (3p) Konstruera boolska uttryck (villkor) för följande specifikationer: (a) Veckonumret v är utanför perioden vecka 22 35. (b) Vattentemperaturen t är 40 80 grader samtidigt som trycket p är mindre än 9.6 men minst 3.3. (c) Värdet b är någonstans mellan a och c men vi vet inte vilken som är störst av a och c. Exempel: Snödjupet h är djupare än 20 cm Svar: (20 < h) (a) ((v < 22) (35 < v)) alt.!((22 <= v) && (v <= 35)) (b) ((40 <= t) && (t <= 80) && (3.3 <= p) && (p < 9.6)) (c) ((a <= b) && (b<= c)) ((c <= b) && (b <= a)) 8. (2p) Skriv om de två oberoende programsatserna nedan med hjälp av if- eller if-else-satser: Metoden int java.lang.math.min(int a, int b) returnerar det mindre av två värden. Metoden int java.lang.math.max(int a, int b) returnerar det större av två värden. (a) y = Math.min(size.height - 12, y); (b) x = Math.max(0, Math.min(x, 100)); (a) if (size.height 12 < y) { y = size.height 12; 4

(b) if (x < 0) { x = 0; else if (100 < x) { x = 100; Grundläggande objektorienteringsbegrepp och komplexitet 9. (3p) Vad är polymorfism och vilka mekanismer kan man använda för att åstadkomma det? Polymorfism (flerformighet) är ett sätt att styra exekveringen till olika kod beroende på objektens typ, snarare än genom switch- och if-satser. Den främsta mekanismen är att vid arv åsidosätta (override) vissa ärvda metoder med implementationer som är specifika för den egna typen (klassen). Detta gör att ett metodanrop till en metod deklarerad i en superklass kan styras ner i en underklass för särskild behandling. En snarlik mekanism är implementation av interface varvid varje implementerande klass är tvungen att implementera alla metoder i interface-deklarationen. Detta medför att alla klasser som implementerar ett visst interface kan behandlas uniformt i termer av interfacet, men ändå ha ett eget beteende i sina implementationer (t ex interfacet java.util.list och dess implementationer i ArrayList, LinkedList osv). 10. (2p) Vilken nytta ger överlagrade (overloaded) metoder? En överlagrad metod är en metod i en klass som finns i flera versioner med samma namn men med olika parametrar. Det gör att parameterlistan bestämmer vilken metod som kommer att anropas. Överlagring är en lokal form av polymorfism, i och med att data bestämmer vilken kod som skall exekveras. Den främsta fördelen är dock att det går att erbjuda den som skriver den kod som skall anropa metoden flera alternativ och att slippa tänka på vad metoden heter för en viss parametertyp. Ett bra exempel är metoderna System.out.print och System.out.println som finns i varianter för alla primitiva datatyper och objekt. 11. (3p) Inkapsling är ett viktigt begrepp. Besvara följande frågor: (a) Vad är det som kapslas in? (b) Hur kapslas det in, och i vad? (c) Hur kommer man åt det som är inkapslat när man behöver göra det? (a) Det är variabler (data) som kapslas in. Detta görs för att skydda variablerna från oönskad (okontrollerad) manipulation, som visserligen inte behöver vara fientlig, men som kan vara oavsiktlig och därför leda till buggar som är svåra att hitta. (b) Variablernas åtkomst i en klass regleras av deklarationerna public, (default), protected och private. Konstanter deklareras med ordet final och går inte att ändra efter sin första tilldelning. Data placeras i klassvariabler och lever inuti en eller (oftast) flera instanser av sin klass. 5

(c) Åtkomst till data sker genom metoder. Så kallade accessor-metoder ger tillgång till informationen (läsning) och så kallade mutator-metoder ger möjlighet att uppdatera deras värden. 12. (2p) En array av int är sorterad i stigande ordning. En metod ska skriva ut alla element som är mindre än ett visst element, det s k gränselementet. Man vet inte var i arrayen gränselementet ligger. Vilket av följande alternativ är mest effektivt, och varför då? (a) Gå igenom arrayen från slutet till början och börja skriva ut element så snart gränselementet har passerats. (b) Sök efter gränselementet, ta dess index och skriv ut alla element mellan 0 och index-1. (c) Gå igenom arrayen från början mot slutet och skriv ut element. Avbryt när gränselementet har hittats. Alternativ (a) måste gå igenom hela arrayen varje gång. Alternativ (b) måste först göra en sökning vilket betyder läsningar i arrayen utöver dem som behövs för själva utskriften. Alternativ (c) går bara igenom de element som eftersöks och gör inte mer arbete än så. Därför är (c) den mest effektiva. Visserligen är det så att (c) måste jämföra storleken på varje element för att se om det är dags att sluta, medan en binärsökning i (b) behöver långt färre jämförelser. Dock kräver sökningen ytterligare administration i form av metodanrop, iteration och variabler vilket blir en konstant kostnad. Det krävs därför ett väldigt stort antal element innan man tar igen det minskade antalet jämförelser och (b) blir mer effektiv. Ett så stort antal är det osannolikt att man vill skriva ut. Lycka till! 6