• No results found

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

N/A
N/A
Protected

Academic year: 2022

Share "CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer"

Copied!
9
0
0

Loading.... (view fulltext now)

Full text

(1)

T E N T A M E N

KURSNAMN

Objektorienterad programmering, 7.5p

PROGRAM:

DAI 2 (TIDAL-2)

2018/2019, lp 1

KURSBETECKNING

DAT050

EXAMINATOR

Uno Holmer

TID FÖR TENTAMEN

Onsdagen den 28/8 2019, 08.30– 12.30

HJÄLPMEDEL

Java API (delas ut av skrivningsvakten)

ANSV LÄRARE

Uno Holmer

tel. 772 5730

besöker tentamen ca kl. 9.30 samt ca 11.15

DATUM FÖR ANSLAG

Senast den 16/9 2019

datum för granskning meddelas senare

ÖVRIG INFORM.

Betygsgränser: 3 - 24p, 4 - 36p, 5 – 48p. (max 60p)

(2)

Version: 2019-08-23 Objektorienterad programmering, DAT050, DAI 2, 18/19, lp 2 Nr 13a

TENTAMEN: Objektorienterad programmering

Läs detta!

 Uppgifterna är inte ordnade efter svårighetsgrad.

 Börja varje uppgift på ett nytt blad.

 Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

 Skriv rent dina svar. Oläsliga svar r ä t t a s e j!

 Programkod som finns i tentamenstesen behöver ej upprepas.

 Programkod skall skrivas i Java 5 eller senare och vara indenterad och renskriven.

 Onödigt komplicerade lösningar ger poängavdrag.

 Givna deklarationer, parameterlistor etc. får ej ändras.

 Läs igenom tentamenstesen och förbered ev. frågor.

Lycka till!

I en uppgift som består av flera delar får du använda dig av funktioner klasser etc. från tidigare deluppgifter, även om du inte löst dessa.

(3)

Version: 2019-08-23 Objektorienterad programmering, DAT050, DAI 2, 18/19, lp 2 Nr 13a

Uppgift 1

Välj ett alternativ för varje fråga! Garderingar ger noll poäng. Inga motiveringar krävs. Varje korrekt svar ger två poäng.

1. Givet klassen

public class Counter { private int i = 0;

public Counter(int initialValue) { i = initialValue; } public Counter next1() { ++i; return this; }

public Counter next2() { return new Counter(i+1); } }

och kodavsnitten 1-3

List<Counter> list = new ArrayList<Counter>();

// 1

for ( Counter x : list ) x = x.next1();

// 2

for ( Counter x : list ) x = x.next2();

// 3

for ( Counter x : list ) x.next1();

Vilket påstående är sant om vi antar att list inte är tom?

a. kodavsnitt 1 ändrar inga element i list, men 2 och 3 gör det.

b. kodavsnitt 2 ändrar inga element i list, men 1 och 3 gör det.

c. kodavsnitt 3 ändrar inga element i list, men 1 och 2 gör det.

d. inget av kodavsnitten ändrar något element i list. 2. Vilket påstående är falskt?

a. testning kan påvisa förekomsten av fel i ett program.

b. avlusning kan avslöja orsaken till fel i ett program.

c. testning och avlusning är samma sak.

d. regresionstestning bör utföras efter refaktorering.

3. Antag att man vill överskugga metoden equals i klassen Circle i laboration 5. Vilken deklaration av parametern är korrekt?

public boolean equals(Circle obj) // 1 public boolean equals(Shape obj) // 2 public boolean equals(Object obj) // 3

a. bara 1 b. bara 2 c. 2 och 3 d. bara 3

(4)

Version: 2019-08-23 Objektorienterad programmering, DAT050, DAI 2, 18/19, lp 2 Nr 13a

Låt Ci (v1, … ,vn) beteckna att variablerna v1, … ,vn är synliga i klassen Ci. Vilket av alternativen beskriver synligheten hos variablerna x, y och z i klasserna ovan?

a. C1 (x,y,z), C2(y,z), C3(z), C4(y,z), C5(z) b. C1 (x,y,z), C2(y,z), C3(z), C4(z), C5(z) c. C1 (x,y,z), C2(y,z), C3(y,z), C4(z), C5(z) d. C1 (x,y,z), C2(y,z), C3(y,z), C4(y,z), C5(z)

5. Följande kodavsnitt avser att beräkna totala antalet heltal i en tabell av listor.

Map<String,List<Integer>> m =

new HashMap<String,List<Integer>>();

...

int count = 0;

for ( String key : m.keySet() ) { List<Integer> l = m.get(key);

count += l.size();

}

System.out.println(count);

a. koden är inte säker, ett exekveringsfel kan uppkomma b. deklarationen på första raden är inte typkorrekt

c. koden är felfri så långt man kan se av vad som visas ovan

(10 p)

package module1;

public class C1 { private int x;

protected int y;

public int z;

}

public class C2 extends C1 { ... } public class C3 { ... }

package module2;

import module1.*;

public class C4 extends C1 { ... } public class C5 { ... }

(5)

Version: 2019-08-23 Objektorienterad programmering, DAT050, DAI 2, 18/19, lp 2 Nr 13a

Uppgift 2

I ett lagerhanteringssystem hos företaget X sker med ojämna mellanrum uppdatering av lagerlistor med nya priser. I lagerlistan finns för varje artikel uppgift om artikelnummer, pris, samt antal artiklar i lager. Prislistan med aktuella priser innehåller för varje artikel uppgift om artikelnummer och pris. Exempel: Om lagerlistan till vänster uppdateras med de nya priserna till höger

Artikelnr Pris Lagersaldo

12345 100 23

78901 200 8

76563 300 1034 27276 400 199

99213 500 0

så skall lagerlistan ha följande innehåll efter uppdateringen:

Artikelnr Pris Lagersaldo

12345 120 23

78901 200 8

76563 1270 1034 27276 400 199

99213 596 0

I uppgiften finns tre klasser som skall kompletteras: Item (prisuppgift i prislistan), StoreItem (information om en vara i lagerlistan), samt Store (lagerlistan). Se kodskelett på nästa sida.

a) Implementera metoden equals i Item så att den returnerar sant om två objekt innehåller likadana artikelnummer, och falskt annars. Metoden skall ej vara överskuggningsbar vid arv.

(4 p) b) Implementera metoden hashCode i Item.

(1 p) c) Implementera metoden toString i Item. (se även uppgift g)

(1 p) d) Definiera konstruktorn i StoreItem. Konstruktorn skall ha inparametrar motsvarande

samtliga instansvariabler.

(1 p) e) Implementera metoden toString i StoreItem. (se även uppgift g)

(1 p) f) Implementera metoden add i Store som adderar ett nytt artikelobjekt till lagerlistan.

Metoden skall bara lägga till objektet om det inte redan finns i listan. Returvärdet skall avspegla om objektet adderades eller ej.

(1 p) g) Implementera metoden update i Store. Metoden skall uppdatera priset på alla artiklar i

lagerlistan som finns i listan som ges som inparameter.

(4 p) h) Implementera metoden print i Store. Varje rad i utskriften skall ha formen

artikelnr: pris (antal)

(1 p) Artikelnr Pris

99213 596 76563 1270 12345 120

(6)

Version: 2019-08-23 Objektorienterad programmering, DAT050, DAI 2, 18/19, lp 2 Nr 13a private String productId;

private int price;

public Item(String productId,int price) { this.productId = productId;

this.price = price;

} ...

public int getPrice() { return price; }

public void setPrice(int price) { this.price = price; } }

public class StoreItem extends Item {

private int storeLevel = 0; // Number of items in the store

...

public int getStoreLevel() { return storeLevel; }

public void addToStore(int noOfItems) { storeLevel += noOfItems;

} }

public class Store {

private List<StoreItem> items = new ArrayList<StoreItem>();

...

}

equals hashCode toString

konstruktor toString

add update

print

(7)

Version: 2019-08-23 Objektorienterad programmering, DAT050, DAI 2, 18/19, lp 2 Nr 13a

Uppgift 3

En klassisk fransk kortlek har fyra färger (suit) och 13 valörer (rank) av varje kort. Följande gränssnitt beskriver ett minimum av metoder:

public interface FrenchCard {

enum Suit {HEARTS,SPADES,CLUBS,DIAMONDS}

int getRank();

Suit getSuit();

}

Vidare finns följande klass, som vi inte beskriver närmare:

public class Card implements FrenchCard,Cloneable,Comparable<Card>

Uppgiften är nu att konstruera två metoder (se nedan) i klassen CardHand för att representera en hand av kort. En hand är en samling kort ur en eller flera kortlekar. Klassen har bl.a. följande metoder:

public void add(Card c) adderar kortet c till handen public int size() returnerar antalet kort i handen public Card look(int i) returnerar det i:te kortet i handen throws IndexOutOfBoundsException

public boolean discard(int i) tar bort det i:te korten ur handen throws IndexOutOfBoundsException

Dessutom skall klassen ha metoderna clone som returnerar en djup kopia av handen, samt equals som avgör om två händer är lika. Två händer är lika om de innehåller lika många kort, samt lika många av varje kort. Den interna ordningen bland korten spelar ingen roll för om två händer är lika eller ej.

Ex.

Card c1 = new Card(4,FrenchCard.Suit.DIAMONDS);

Card c2 = new Card(12,FrenchCard.Suit.SPADES);

Card c3 = new Card(9,FrenchCard.Suit.HEARTS);

CardHand h1 = new CardHand();

h1.add(c1); h1.add(c2); h1.add(c3);

CardHand h2 = new CardHand();

h2.add(c3); h2.add(c1); h2.add(c2);

System.out.println(h1.equals(h2)); // true System.out.println(h2.equals(h1)); // true

Du kan anta att handen är representerad som en lista av kort. Implementera metoderna clone och

equals. Ingen av metoderna får ändra kortens inbördes ordning. Tips: Utnyttja clone och

Collections.sort i equals!

(12 p)

(8)

Version: 2019-08-23 Objektorienterad programmering, DAT050, DAI 2, 18/19, lp 2 Nr 13a

Vilka av arven 1-7 är tillåtna i Java, vilka ger kompileringsfel? Motivera svaret!

a)

public interface I1 { ... }

1. public interface I2 extends I1 { ... }

2. public interface I3 extends I1 { ... }

3. public interface I4 extends I2, I3 { ... }

4. public class C1 implements I3 { ... }

5. public class C2 extends C1 implements I4 { ... }

6. public class C3 extends C1 { ... }

7. public class C4 extends C2, C3 { ... }

(7 p) b)

Vissa av klasserna nedan måste deklareras som abstrakta, vilka? Vilka klasser kan instansieras?

Motivera svaret!

public interface I1 { void f();

}

public interface I2 { void g();

}

public class C1 implements I1, I2 { public void f() { ... }

public void h() { ... } }

public class C2 implements I2 { public void g() { ... } abstract public void i();

}

public class C3 extends C1 { public void g() { ... } }

public class C4 extends C2 { public void i() { ... } }

(5p)

(9)

Version: 2019-08-23 Objektorienterad programmering, DAT050, DAI 2, 18/19, lp 2 Nr 13a

Uppgift 5

Följande klass kan användas för att lagra temperaturuppgifter i en liten enkel väderstation:

public class TemperatureDatabase {

private ...

public TemperatureDatabase() { ... }

public int update(String city,int newTemperature) { ... } }

Skriv färdigt klassen. Använd en lämplig samlingsklass för att associera stadsnamn med temperaturvärden. Metoden update skall byta ut det gamla temperaturvärdet mot det nya och returnera det gamla om ett sådant finns registrerat, annars sätts den nya staden och

temperaturvärdet in och -1 returneras.

(12 p)

References

Related documents

Kombinerat med 2500-tons- villkoret skapas också ett incitament att använda fossila bränslen i en bioanläggning motsvarande precis över 2500 ton, enbart för att komma in i systemet

Helsingborgs stad har mottagit remis av promemorian Ändring i förordningen om handel med utsläppsrätter för att undanta vissa mindre fjärrvärmeanläggningar från Europeiska unionens

Remiss av prome'morian Åndring i förordningen om handel med utsläppsrätter för att undanta vissa mindre. fjärrvärmeanläggningar från Europeiska unionens

Anders Johansson.

I föreliggande fall är emellertid utsläppen väldigt små i relation till helheten, de be- rörda anläggningarna svarar för 0,2 procent av Sveriges totala utsläpp, varför åtgärden

Föredragande har varit konkurrenssakkunnige Mårten Törnqvist..

Miljö- och energidepartementet Enheten för miljöprövning och vattenverksamhet Johan Hjerpe Direkt 010-22 50 286 johan.hjerpe@lansstyrelsen.se Regeringskansliet 103 33

Genom användning av surdegsteknik, fullkornsmjöl från råg och korn samt baljväxtfrön kan man baka näringsrika bröd med lågt GI- index?. Syftet med studien är att bestämma