• No results found

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

N/A
N/A
Protected

Academic year: 2022

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

Copied!
12
0
0

Loading.... (view fulltext now)

Full text

(1)

Tentamen

Programmeringsmetodik, KV: Java och OOP

17 januari 2004

Examinator: Johan Karlsson Skrivtid: 9-15

Hjälpmedel: 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

(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 9-13 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 kl. 11.00

Lycka till!

(2)

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 p)

Klassen Train nedan representerar ett tåg. Det finns en gräns för hur många passagerare tåget kan ta. Denna gräns anges vid skapandet av ett Train-objekt. Metoden

addPassenger lägger till en passagerare och kontrollerar att tåget inte är fullt. Tyvärr är felhanteringen för addPassenger inte så bra (se nedan). En metod som anropar

addPassenger får ingen indikation på att anropet har lyckats eller ej.

Ändra i addPassenger och visa hur man kan använda TrainFullException nedan för att via undantag hantera situationen att tåget är fullt. Skriv dessutom en annan klass som har en metod som skapar ett Train objekt och anropar addPassenger och fångar ett

TrainFullException.

public class Train {

private int maxPassengers;

private int current = 0;

public Train(int maxPassengers) {

this.maxPassengers = maxPassengers;

}

public void addPassenger() {

if (current < maxPassengers) { current++;

} else {

System.out.println("The train is empty!");

} } }

public class TrainFullException() extends Exception {

(3)

3

Uppgift 3 (60 p)

Fyll i källkoden som saknas för att implementera konstruktorerna i Employee klassen. Du får själv bestämma vad som skall vara standardvärden.

public class Person { private String name;

private int yearOfBirth;

/**

* Create a Person object with name n * and year of birth y

*/

public Person(String n, int y) { name = n;

yearOfBirth = y;

} }

public class Employee extends Person { private String room;

/**

* Create an Employee object with

* name n, year of birth y och room number room */

public Employee(String n, int y, String room) { // Source code missing

}

/**

* Create an Employee object with standard values for * name, year of birth och room number

*/

public Employee() {

// Source code missing, use the constructor above }

}

(4)

Uppgift 4 (100 p)

Illustrera med värden samtliga objekt, variabler och referenser som är allokerade vid de tillfällen kommentaren ”Illustrate objects, variables and references.” förekommer i koden nedan. Antag att du först skapar ett objekt av klassen MiniUniverse och anropar

metoden startConfusingStudents.

MiniUniverse m = new MiniUniverse();

m.startConfusingStudents();

Klasser:

public class Star { public double size;

public boolean planets;

public Star(double size, boolean planets) { this.size = size;

this.planets = planets;

} }

public class MiniUniverse { private Star firstStar;

public Star secondStar;

public void startConfusingStudents() { this.firstStar = new Star(4.3, false);

secondStar = firstStar;

// Illustrate objects, variables and references.

firstStar = strange(secondStar);

// Illustrate objects, variables and references.

}

private Star strange(Star s) { s.planets = true;

s = new Star(1.2, false);

// Illustrate objects, variables and references.

return s;

}

(5)

5

Uppgift 5 (120 p)

Hederlige Harry är ett företag som säljer begagnade fordon (bilar och lastbilar). De vill ha din hjälp med att konstruera ett system som ska hantera information om deras fordon.

Varje fordon har ett serienummer. Ett fordon kan vara endera en bil eller en lastbil.

Företaget vill hålla reda på vem som sålde fordonet (källa) samt vem som köpt fordonet (destination). Källa samt destination är kunder som identifieras av deras förnamn och efternamn samt bostadsort.

Innan ett fordon har sålts så har det en källa men ingen destination (ännu). Varje fordon köps för ett visst pris och säljs för ett visst pris.

Företaget säljer tre typer av bilar; sedan-, kombi- samt sportbilar.

För en sportbil vill företaget ha information om dess maximala hastighet samt tiden det tar att accelerera från 0 till 100 km/timmen. Normalt antar vi att ett fordon har fyra hjul men en lastbil kan ha fler hjul. För kombibilar är lastutrymmet viktigt att veta. För alla fordon måste bränsleförbrukningen lagras.

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. Gör en översiktlig klassdesign där du fokuserar på ansvarsområden för de olika klasserna samt hur de jobbar med varandra.

(6)

Uppgift 6 (60 p)

Vilka av operationerna 1-12 (angivna i kommentaren) i exemplet nedan är tillåtna att utföra?

public abstract class Fun {

private int attrib1 = 1;

private final int attrib2 = 2;

protected int attrib3 = 3;

public int attrib4 = 4;

public void method1() { int tmp;

tmp = attrib1; // Operation 1 tmp = attrib2; // Operation 2 tmp = attrib3; // Operation 3 tmp = attrib4; // Operation 4

attrib1 = 0; // Operation 5 attrib2 = 0; // Operation 6 attrib3 = 0; // Operation 7 attrib4 = 0; // Operation 8 }

}

public class Funnier extends Fun { public void method2() {

attrib1 = 1; // Operation 9 attrib2 = 1; // Operation 10 attrib3 = 1; // Operation 11 attrib4 = 1; // Operation 12 }

}

(7)

7

Uppgift 7 (70 + 30 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.

a)

Skriv en klass som representerar en mängd av heltal m.h.a. en array (vektor), dvs din klass ska ha en array som privat attribut. Din klass måste implementera gränssnittet Set nedan:

public interface Set {

// Adds the given element to the Set public void add(int elem);

// Checks if the given integer elem is in this set public boolean contains(int elem);

// Checks if the given set s is equal to this set public boolean equals(Set s);

// Returns the current length of the set (not the maximum length) public int length();

}

Du får anta en största storlek på mängden när du skapar din array.

Obs! använd ej klassen Vector i Java SDK utan använd en array.

b)

Vilken komplexitet (ordo) är det på din implementation av add, equals och contains? (för att du ska kunna få poäng på denna deluppgift så krävs det att implementationen av den operation du analyserar är korrekt).

(8)

Uppgift 8 (40 + 60 + 10 p)

Ett aritmetiskt uttryck såsom (7+2)×((12-4)/2)kan ordnas i ett binärt träd.

Varje nod som inte är ett löv är då en binär operator (+, -, ×, /), dvs en operator som har två operander (numeriska tal).

Obs! Denna uppgift består av tre delfrågor, se nästa sida a)

Studera det aritmetiska uttrycket ovan och dess representation som träd. I vilken ordning skulle du traversera (gå i) trädet för att kunna beräkna värdet av hela det aritmetiska uttrycket – preorder, inorder eller postorder? Tänk på att för att kunna evaluera en operator måste båda dess operander ha ett numeriskt värde.

(se nästa sida för deluppgift b och c)

×

+ /

7 - 2

12 2

4

(9)

9

b)

Antag att du håller på att implementera trädet i Java. Du har då bl.a. implementerat tre klasser, nämligen Nod, Operator samt Operand.

public abstract class Node { protected Node leftChild;

protected Node rightChild;

}

public class Operator extends Node {

private char operator; // teckenrepresentation av aktuell operator }

public class Operand extends Node {

private int value; // Värdet på operanden }

Du vill nu rekursivt kunna göra en strängrepresentation av trädet och implementerar därför toString() i Operand respektive Operator. Du vill att trädet ovan ska ge strängen

((7+2)×((12-4)/2)). Vi vill alltså kunna anropa toString() på rot-noden och sedan få hela strängrepresentationen tillbaka. Implementera de två toString()-metoder. Observera att alla operander är löv och att alla operatorer har två barn.

public String toString() { // Source code missing here }

c)

I vilken ordning traverseras trädet när vi likt b) gör en strängrepresentation av trädet- preorder, inorder eller postorder?

(10)

OBS! Uppgift 9-13 ska enbart lösas av dem som inte skrev duggan den 16 december.

Uppgift 9 (20 + 20 + 40 p)

a)

Ordna talen 31, 29, 5, 14, 7, 2, 47, 6, 43 i ett binärt sökträd. Bygg upp trädet i den ordning talen gavs, d.v.s. låt 31 vara root etc.

b)

Är trädet balanserat? Motivera.

c)

Besök trädet preorder. Ange varje nods värde när du besöker den.

(11)

11

Uppgift 10 (50 p)

Givet följande:

public class MyClass { private int a = 0;

private static int b = 7;

private String str = null;

public MyClass(int c) { a = c;

b = 3;

}

public MyClass(String d, int a) { a = a;

b = a;

str = d;

}

public void myMethod(String f) { f = new String(“php”);

} }

Om vi skapar följande objekt:

MyClass obj1 = new MyClass(2);

MyClass obj2 = new MyClass(“def”, 9);

String mystr = “xyz”;

Och sen anropar metoden myMethod på obj1:

obj1.myMethod(mystr);

Vilka värden har då attributen i objekten obj1 och obj2? Vad innehåller mystr? Illustrera.

(12)

Uppgift 11 (40 p)

Vad innebär begreppen cohesion och coupling? Varför är de egenskaperna viktiga?

Beskriv 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å).

Uppgift 12 (30 p)

Varför är det viktigt att i förväg göra en design av det system man tänker utveckla?

Uppgift 13 (40 + 40 p)

a)

Du har följande klasser som du vill ordna i en arvshierarki, där de ärver egenskaper av klasser högre upp i hierarkin.

Triangel

Figur

Kvadrat

Cirkel

Liksidig triangel

Rektangel

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

References

Related documents

i projektet med bilen där jag ville laga det människan ställt till med men på så sätt bidrog jag istället till mer oordning genom att använda näver från träden och därmed

Om det finns en propagandaapparat som trafikkontoret också använt sig av innebär det att Björn talar osanning, och om det inte finns en propagandaapparat ger Per uttryck för

När en människa faller från sig själv ner i en annan, och ringarna breder ut sig på vattenytan, är den första ringen alltid den som stelnar till guld på ditt finger. Den

Faris benämner drömmar i magisk realism som ett verktyg för att vilseleda läsaren: ”Magical realist scenes may seem dreamlike, but they are not dreams, and the text may both

In Australia for example, about 82% of the introductory programming instructors used an object-oriented language, but only about 37% taught their courses by using an

Om pedagoger i förskolan inte får en utbildning som innehåller utomhuspedagogik kan mycket kunskap och engagemang försvinna när denne kommer ut för att arbeta. Vi har i vår

Tentamen består av 6 uppgifter där den första uppgiften är uppdelad i 5 stycken deluppgifter, var och en värd 2 poäng och uppgifterna 26 är värda 6 poäng styck.. OBS: För att

Trädet har också fått uppleva hur omgiv- ningen förändrats från ett fårbetat kargt landskap till en igenvuxen snårig enbuskskog, när fåren togs bort från ön