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

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

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

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

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

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

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

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

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

TENTAMEN OOP

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

OOP Objekt-orienterad programmering

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

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 OOP

public boolean containskey(string key) { return search(key, head)!= null; }

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

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 9 Innehåll

Föreläsning 9 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

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

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

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 MOMENT 2 - JAVA, 4P

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Tentamen i Algoritmer & Datastrukturer i Java

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

Tentamen, Algoritmer och datastrukturer

Den som bara har en hammare tror att alla problem är spikar

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

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Repetition av OOP- och Javabegrepp

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

TENTAMEN I DATAVETENSKAP

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

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

Repetition av OOP- och Javabegrepp

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

Typecasting - primitiva typer. Innehåll. DoME klasser

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

OOP Tenta

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Trädstrukturer och grafer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

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

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

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

PROGRAMMERING-Java Omtentamina

Tentamen, EDAA10 Programmering i Java

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

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

PROGRAMMERINGSTEKNIK TIN212

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

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

Klasshierarkier - repetition

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

Algoritmer och datastrukturer 2012, föreläsning 6

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

Programmering A. Johan Eliasson

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Observera. Tentamen Programmeringsteknik II Skrivtid:

OOP Objekt-orienterad programmering

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

TENTAMEN OOP

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

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

Tentamen i Objektorienterad modellering och design Helsingborg

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

Laboration 1: Figurer i hierarki

OOP Tentamen

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

OOP Tentamen

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Föreläsning 2 Datastrukturer (DAT037)

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

Tentamen i Programmeringsteknik I

Lösningsförslag till tentamen Datastrukturer, DAT037,

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

Kurskod D0010E Datum Skrivtid 5tim

Länkade strukturer, parametriserade typer och undantag

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

Tentamen i Programmeringsteknik I, ES,

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

LULEÅ TEKNISKA UNIVERSITET

Konstruktion av klasser med klasser

Classes och Interfaces, Objects och References, Initialization

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Transkript:

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!

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 { public TrainFullException() { super(); 2

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 3

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. Klasser: MiniUniverse m = new MiniUniverse(); m.startconfusingstudents(); 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; 4

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

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 6

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

Uppgift 8 (40 + 60 + 10 p) Ett aritmetiskt uttryck såsom (7+2) ((12-4)/2) kan ordnas i ett binärt träd. + / 7 2-2 12 4 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) 8

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ädetpreorder, inorder eller postorder? 9

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

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

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