Tentamen. Programmeringsmetodik, KV: Java och OOP. 20 januari 2005

Relevanta dokument
Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Tentamen i Algoritmer & Datastrukturer i Java

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen i Programmeringsteknik I

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

TENTAMEN OOP

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

Tentamen i Programmering

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

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

Objektorienterad programmering i Java

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

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

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 2007/2008 Teknik och samhälle

TENTAMEN OOP

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

Tentamen Datastrukturer, DAT037 (DAT036)

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

Malmö högskola 2008/2009 CTS

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

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

Tentamen, EDAA10 Programmering i Java

OOP Objekt-orienterad programmering

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

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: Exempel och problemlösning

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

DELPROV 1 I DATAVETENSKAP

Tentamen i Programmeringsteknik I, ES,

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Repetition av OOP- och Javabegrepp

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

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

Repetition av OOP- och Javabegrepp

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. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

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

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 Algoritmer & Datastrukturer i Java

PROGRAMMERINGSTEKNIK TIN212

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

Tentamen i Grundläggande programmering STS, åk

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

Kurskod D0010E Datum Skrivtid 5tim

OOP Tentamen

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

Föreläsning 9 Innehåll

OOP Objekt-orienterad programmering

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

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Tentamen OOP

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

Del A (obligatorisk för alla)

Objektorienterad programmering D2

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

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 EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

TENTAMEN OOP

Malmö högskola 2007/2008 Teknik och samhälle

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 3-4 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

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

DAT043 - föreläsning 8

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

Föreläsning 5-6 Innehåll

DAT043 Objektorienterad Programmering

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Laboration 13, Arrayer och objekt

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

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

TENTAMEN I DATAVETENSKAP

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

Tentamen, EDAA20/EDA501 Programmering

OOP Tenta

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

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

Föreläsning 7. Träd och binära sökträd

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

Tentamen i Programmeringsteknik I

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

Dugga Datastrukturer (DAT036)

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

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Transkript:

Tentamen Programmeringsmetodik, KV: Java och OOP 20 januari 2005 Examinator: Johan Karlsson Skrivtid: 16-22 Hjälpmedel: Maximalt en av följande böcker: Barnes & Kölling: Objects First With Java a practical introduction using BlueJ Lewis & Loftus: Java Software Solutions Holm: Objektorienterad programmering och Java Frank M. Carrano & Janet J. Prichard: Data Abstraction and Problem Solving with JAVA Franzen: Java från Grunden (eller motsvarande) Maxpoäng: 600 (plus 280 om du inte skrev duggan) För godkänt krävs normalt 500 poäng på kursen. Observera att uppgift 11-15 enbart ska lösas av de som inte skrev duggan! Betyg som ges är U, G och VG. Börja varje uppgift på ett nytt blad och skriv uppgiftsnummer längst uppe till höger. Skriv namn och personnummer på varje blad Uttryck dig mycket tydligt. Alla otydligheter tolkas till din nackdel. Om du är osäker på tolkningen av en fråga, skriv ner en rimlig tolkning av frågan och lös enligt den tolkningen. Är frågan uppdelad i flera deluppgifter kan man klara senare deluppgifter även om man inte klarat första. Försök därför lösa alla deluppgifter. Resultat kommer att tillkännages via webben. Lärare kommer förbi ca kl. 19.00 Lycka till!

Uppgift 1 (10 p) Skriv namn, personnummer och uppgiftsnummer på angiven plats på varje inlämnat blad. Inget får skrivas på baksidorna av bladen. Sortera bladen i rätt ordning. Börja varje ny uppgift på ett nytt blad. Uppgift 2 (40 + 20p) a) Givet följande vektor Beskriv relativt detaljerat hur vektorn sorteras om man använder följande algoritmer: b) 5 3 9 2 6 4 Bubblesort Mergesort Om antalet element i vektorn utökas, vilken algoritm går då snabbast? Är det alltid så? Motivera ditt svar. Uppgift 3 (30 p) Förklara vad ett interface har för uppgift och hur det kan användas. Ge exempel där interface är lämpligt att använda och motivera varför. 2

Uppgift 4 (50 p) Utgå från följande situation Class1 +Class1() +method() +method(int) Class2 +Class2() +method(int) +method(int, int) Class3 +Class3() +method() +method(int) (alltså, Class2 ärver från Class1 och Class3 ärver från Class2) och följande satser: Class1 c1 = new Class1(); Class2 c2 = new Class2(); Class3 c3 = new Class3(); Vilken version av method anropas efter satserna nedan? Skriv ej tillåten om raden ej är tillåten. Alla metoder är publika. Ange klassnamn samt motivering (använd radnumren nedan för att referera). Radnummer 1 c1.method(1); 2 c1.method(1, 2); 3 c1 = c2; 4 c1.method(); 5 c1.method(1); 6 c1.method(2, 1); 7 c1 = c3; 8 c1.method(); 9 c1.method(1); 10 c1.method(1, 3); 3

Uppgift 5 (60p) Ett polynom kan skrivas som tex. a 0 + a 1 x + a 2 x 2 + a 3 x 3 + + a n x n där a 0 a n är konstanter. Skriv en klass som ska representera ett polynom. Klassen ska ha en konstruktor som tar en array som parameter. Denna array ska innehålla de olika konstanterna som definierar polynomet. Förutom konstruktorn ska klassen innehålla två metoder till: evaluate som givet ett värde för x beräknar och returnerar polynomets värde (för just detta x). tostring som ska skapa och returnera en strängrepresentation av polynomet. Din klass ska fungera med nedanstående testprogram som skapar polynomet 1+2x+3x 2 och utför operationerna ovan på det. Din klass ska ge de utskrifter som anges i kommentarerna efter println satserna om den används tillsammans med testprogrammet. public class PolynomTest { public static void main(string[] args) { double[] a={1.0, 2.0, 3.0; Polynom poly=new Polynom(a); System.out.println(poly); //1.0+2.0x+3.0x^2 System.out.println(poly.evaluate(2.0)); //17.0 4

Uppgift 6 (80 p) Den nystartade tv-kanalen TV Java behöver din hjälp med att göra en klassdesign av informationssystemet för programmen som ska visas på kanalen. Kanalen visar tre olika typer av tv-program; dokumentärer, underhållningsprogram och nyheter. I framtiden funderar man på att också börja visa filmer men det är inte aktuellt just nu. Dock ska systemet du designar enkelt kunna byggas ut för att i framtiden visa information om även filmer (och andra typer av tv-program). Varje tv-program har en start-tid och en slut-tid. Till varje tv-program ska det också finnas en beskrivning av innehållet. För dokumentärer vill tv-kanalen också lagra uppgifter om regissör samt produktions-år. För underhållningsprogram anses det viktigt med kategori (t.ex. spel-program). Varje tv-program ska dessutom ha en sk. show-view siffer-kod (som kan användas för att på lättare sätt programmera inspelningar på en videoapparat). Det ska dessutom finnas en påminnelsefunktion där en användare av informationssystemet kan registrera sig för att få en påminnelse när programmet han/hon velat se börjar. Gör en objektorienterad modell för systemet. Hur det ska representeras grafiskt eller hur informationen i slutändan ska lagras (i en databas t.ex.) behöver du inte bry dig om. Du behöver ej heller bry dig om detaljerna för om hur en påminnelse ska ske (t.ex. genom att ett email skickas ut) däremot naturligtvis hur påminnelsefunktionen fungerar och hur den jobbar med andra klasser. Gör en översiktlig klassdesign där du fokuserar på ansvarsområden för de olika klasserna samt hur de jobbar med varandra. Tänk på att välja bra och tydliga namn på metoder, attribut och klasser och även att följa Java namngivningsstandarder. Lägg till förklaringar om det ej är helt uppenbart vad de har för uppgift. Uppgift 7 (30 p) Vad innebär begreppen cohesion och coupling? Varför är de egenskaperna viktiga? Ge exempel på klasser med hög cohesion och låg coupling (du behöver alltså inte skriva klasserna utan beskriv dem med lämplig detaljnivå). 5

Uppgift 8 (50 p) Givet nedanstående två klasser Counter samt MinKlass, vad skrivs ut om programmet körs? public class Counter { private int value = 0; public void incr() { value++; public String tostring() { return ""+value; public class MinKlass { public static void changevalues(int n, Counter c1, Counter c2) { n++; c1.incr(); c2 = new Counter(); c2.incr(); public static void main(string[] args) { int k=5; Counter a = new Counter(); Counter b = new Counter(); MinKlass.changeValues(k,a,b); System.out.println("k="+k); System.out.println("a="+a); System.out.println("b="+b); 6

Uppgift 9 (80 p) Skriv en klass Date vars objekt representerar datum. För att förenkla uppgiften antar vi att alla månader har exakt 30 dagar. Klassen ska ha två konstruktorer. Den ena konstruktorn ska ta två heltal där det första talet är numret på månaden och det andra talet är numret på dagen (i den månaden). Om de två talen är t.ex. 2 och 7 så kommer det objekt som skapas genom att anropa den konstruktorn att representera den 7 februari. Den andra konstruktorn ska ta endast ett heltal som representerar antalet dagar sen början av året. Om talet är t.ex. 43 så innebär det dag 43 under året (13 februari). Lämplig felkontroll ska ske på argumenten till konstruktorerna och om de ej är giltliga (t.ex. negativt nummer på månaden) så ska ett undantag av typen NoSuchDateException kastas från konstruktorn. Skriv också klassen NoSuchDateException. Klassen Date ska dessutom ha två ytterligare metoder; nextday som ändrar datumet som objektet representerar till nästa dag samt tostring som returnerar en strängrepresentation av typen [dag] [månadsnamn] vid anrop. T.ex. ska ett objekt av typen Date med 7 som värde för månaden och 2 som värde för dagen returnera strängen 2 juli vid anrop till dess tostring metod. Tänk också på att eventuella attribut i klassen ska skyddas. 7

Uppgift 10 (70 + 40 + 40 p) En mängd defineras som en samling element utan inbördes ordning och utan dubletter. Två mängder är t.ex. lika om de innehåller samma element oberoende av elementens inbördes ordning. Se interface Set nedan för ytterligare förklaringar. public interface Set { // Adds the given element to the Set public void add(int elem); // Returns true if the given integer elem is in this set, otherwise false public boolean contains(int elem); // Returns true if the given set s is equal to this set, otherwise false public boolean equals(set s); // Returns the current length of the set (not the maximum length) public int length(); Nedan finns en implementation av interfacet Set som endast tillåter heltal att ingå i mängden (vi antar dessutom en maxgräns på 20 heltal i mängden): public class TraditionalSet implements Set { private int [] a = new int[20]; private int currentfreeindex = 0; public boolean contains(int elem) { boolean containsit = false; for (int i = 0; i < length(); i++) { if (a[i] == elem) { containsit = true; break; return containsit; public void add(int elem) { if (!contains(elem)) a[currentfreeindex++] = elem; public boolean equals(set s) { boolean equal = length() == s.length(); for (int i = 0; i < length(); i++) { if (!s.contains(a[i])) { equal = false; break; return equal; public int length() { return currentfreeindex; 8

Uppgifter: Obs! Med array så menas inte klassen java.util.vector, så använd ej java.util.vector. a) Skriv en klass OrderedSet (som implementerar interfacet Set) där alla heltal sätts in i stigande storleksordning i en array. Tänk på att (om möjligt) skriva operationerna från Set på ett effektivare sätt i OrderedSet än hur de löses i TraditionalSet. Ni ska alltså inte i denna deluppgift använda er direkt av TraditionalSet utan skriva en helt ny klass (dock kan det ju säkert ge lite tips att studera den klassen). b) Om vi antar att vi lagrar talen i storleksordning (som vi gör i OrderedSet), hur påverkas komplexiteten för operationerna add, equals samt contains jämfört med implementationen av dessa i TraditionalSet? Gäller det alltid? Ge exempel. c) Skriv om interfacet Set samt den givna klassen TraditionalSet (alltså inte OrderedSet från a-uppgiften) och gör dom mer generella så att de kan innehålla referenser till Object istället för heltal. Döp den förändrade klassen till MyGeneralSet. 9

OBS! Uppgift 11-15 ska enbart lösas av dem som inte skrev duggan den 17 december 2004. Uppgift 11 (45 + 20 + 40 p) a) Ordna talen 19, 28, 5, 9, 27, 4, 7, 8 i ett binärt sökträd. Bygg upp trädet i den ordning talen gavs, d.v.s. låt 19 vara root etc. b) Är trädet balanserat? Motivera. c) Besök trädet postorder. Ange varje nods värde när du besöker den. Uppgift 12 (40 + 30 p) a) Arrangera följande klasser i en arvshierarki, där de ärver egenskaper av klasser högre upp i hierarkin. Anställd Person Lärare Student Administrativ personal Forskare Motivera hur du har tänkt (varför ärver de från varandra). b) Nämn utifrån den hierarki du har skapat i a), minst en ytterligare egenskap (attribut) hos varje klass som inte finns i den ärvda klassen. 10

Uppgift 13 (30 p) Antag att ni har en tom stack. Vad har stacken för utseende efter följande operationer? Tänk på att markera var toppen på er stack är. push(a) push(b) top() pop() isempty() pop() push(d) pop() push(e) push(f) top() push(g) Uppgift 14 (25 p) Vilka av följande kodexempel är syntaktiskt korrekta? Se på varje exempel separat och anta att eventuella variabler är korrekt deklarerade innan. Varje rätt svar ger 5 poäng. Använd numren för att referera. 1 int a = b = c = 0; 2 do { break; while(!finished) 3 private class MyClass { 4 while(this!= 9) { int b = 0; b++; 5 for(;;) 11

Uppgift 15 (50 p) Givet följande: public class MyClass { private int a = 0; private static int b = 7; private String str; public MyClass(int d, String f) { b = d; str = f; public void mymethod(int a, int d, String f) { a = 2; b = d; f = str; Om vi skapar följande objekt: MyClass obj1 = new MyClass(4, "jkl"); MyClass obj2 = new MyClass(6, "mno"); String mystr = "pqr"; Och sen anropar metoden mymethod på obj1: obj1.mymethod(1, -9, mystr); Vilka värden har då attributen i objekten obj1 och obj2 efter det anropet? Vad innehåller mystr? Illustrera objekten, variabler och referenser. 12