Tentamen för TTIT71 Programmering kl Institutionen för datavetenskap Linköpings universitet. Uppgift 1. (2 p)

Relevanta dokument
Tentamen för TTIT71 Programmering kl Institutionen för datavetenskap Linköpings universitet. Uppgift 1. (2 p)

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

TENTAMEN OOP

TENTAMEN OOP

Laboration 13, Arrayer och objekt

TENTAMEN OOP

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning REPETITION & EXTENTA

Kopiering av objekt i Java

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

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

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

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

Repetition av OOP- och Javabegrepp

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Tentamen. Lösningsförslag

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Repetition av OOP- och Javabegrepp

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

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

Tentamen OOP

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

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

LÖSNINGSFÖRSLAG TENTAMEN

Objektorienterad Programmering (TDDC77)

DELPROV 1 I DATAVETENSKAP

Objektorienterad Programmering (TDDC77)

Tentamen, EDAA10 Programmering i Java

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

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

Del A (obligatorisk för alla)

OOP Objekt-orienterad programmering

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

OOP Objekt-orienterad programmering

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Tentamen i Algoritmer & Datastrukturer i Java

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

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

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

DAT043 - Föreläsning 7

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

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

DAT043 - föreläsning 8

OOP Objekt-orienterad programmering

OOP Tentamen

Arrayer (fält)

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

Tentamen i Programmering

OOP Tenta

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

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

Lösningsförslag till exempeltenta 2

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

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

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

Objektorienterad Programmering (TDDC77)

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Tentamen i Objektorienterad programmering

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

PROGRAMMERINGSTEKNIK TIN212

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

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

OOP Omtenta

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

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

Laboration A Objektsamlingar

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

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

Föreläsning 13 Innehåll

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

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

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

Konstruktion av klasser med klasser

Sortering. Om du följt dessa steg korrekt så ska böckerna nu vara sorterade.

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

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

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Malmö högskola 2008/2009 CTS

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

Transkript:

Tentamen för TTIT71 Programmering 2006-10-16 kl. 14-18 Institutionen för datavetenskap Linköpings universitet Antal uppgifter: 6 Max: 32 poäng Betyg: 3:a 16 poäng, 4:a 24 poäng, 5:a 28 poäng Hjälpmedel: Inga Jourhavande lärare: John Wilander, ank. 2463 Anvisningar Såvida inget annat anges skall Javakod användas för att lösa uppgifterna. Inga kraftfullare språkkonstruktioner än vad som finns att tillgå i språket Java får användas. Radvis in- och utmatning till fil, tangentbord, skärm etc. antas finnas. Syntaktiska fel ger inga avdrag såvida felen inte leder till oklarheter eller om uppgiften är av syntaktisk natur. Alla icke uppenbara antaganden skall redovisas i lösningen. Jourhavande kommer förbi lokalen vid ett tillfälle: kl. 15.30. Uppgift 1. (2 p) Vad kommer att skrivas ut när man kör nedanstående program? public class Adder { private int addition(int a) { return a + b; public static void main(string[] args) { Adder adder = new Adder(); int b = 35; b = adder.addition(b); b = adder.addition(b); System.out.println(b); private int b = 34; 1

Uppgift 2. (4 p) Sorteringsalgoritmen Bubble sort sorterar en heltalsarray genom att gå igenom den osorterade arrayen från och med lägsta index till högsta. Låt oss kalla det element som finns på det index algoritmen just nu behandlar för det aktuella elementet. Det första aktuella elementet blir alltså det första elementet i den osorterade arrayen. Om det aktuella elementet är större än elementet på nästa, högre index så byter de två elementen plats. Detta fortsätter tills det aktuella elementet har jämförts med alla högre index. På det sättet bubblar det aktuella elementet upp till sin rätta position i arrayen. Algoritmen fortsätter sedan med nästa element. Resultatet blir en sorterad array. Ett exempel: Innan sortering: Osorterad array 2 9 1 5 3 Sortering (alla heltal i fetstil har bytt plats): 1:a elementet, 2, bubblar upp. Resultat: 1 9 2 5 3 2:a elementet, 9, bubblar upp. Resultat: 1 2 5 3 9 3:e elementet, 5, bubblar upp. Resultat: 1 2 3 5 9 4:e elementet, 5, bubblar upp. Resultat: 1 2 3 5 9 Nedanstående klass är inte färdigskriven metoden sort() måste implementeras. Eftersom klassen heter BubbleSorter så ska sorteringsalgoritmen vara den så kallade Bubble sort (beskriven ovan). Skriv klart metoden sort() så att BubbleSorter sorterar korrekt. Din sort() ska anropa metoden swap(). public class BubbleSorter { public int[] sort(int[] unsorted) { // Din kod här private void swap(int a, int b, int[] array) { if(a < 0 b < 0 a >= array.length b >= array.length) { throw new IllegalArgumentException(); else { int temp = array[a]; array[a] = array[b]; array[b] = temp; 2

Uppgift 3. (±3 p) Ange sant eller falskt för nedanstående påståenden. Ett korrekt svar ger 0,5 poäng, ett felaktigt svar ger 0, 5 poäng och ett blankt svar ger 0 poäng. Uppgiften kan alltså ge negativ poäng totalt. (a) Ett catch-block som inleds med catch(exception e) fångar alla undantag, även så kallade runtime-undantag. (b) Alla objekt kan klonas eftersom de ärver metoden clone() från Object (så kallad grund kloning). (c) En variabel som är deklarerad private är bara synlig inom det egna objektet. (d) Verktyget JavaDoc används för att dokumentera Javakod i så kallade diagram. (e) Inkapsling skapar en svagare koppling mellan två objekt och kan vara ett alternativ till arv om en svagare koppling önskas. (f) I Java kan alltid en superklass substitueras av en av sina subklasser. Uppgift 4. (4 p) Förklara begreppen med 2 3 meningar vardera (0,5 p för varje korrekt förklaring): (a) attribut (b) accessmodifierare (c) interface (d) instans (e) primitiv typ (f) statisk metod (g) generisk typ (h) singelton Uppgift 5. (3 p) Förklara nedanstående tre sorters implementationsarv av metoder (ange Javas nyckelord för de eventuella koncept som ingår i din förklaring): 1. 2. Åsidosättningsbar med default Åsidosättningsbar utan default 3. Icke-åsidosättningsbar med default Uppgift 6. (16 p) Efter att tidigare ha byggt och programmerat sin egen kaffeautomat så bestämmer sig Fiffiga Fia och Sunkige Sune för att söka en egenutvecklad lösning även i fallet personaldatabas. I sitt företag har de tillsvidareanställda som antingen är heltids- eller deltidsanställda. I databasen ska de hålla reda på namn, personnummer, anställningsform och lön. Till den här uppgiften hör källkod för klasserna Personaldatabas, Personnummer, Lön, Pengar, Heltidsanställd och Deltidsanställd. Därtill hör källkod för den abstrakta klassen Tillsvidareanställd och interface:et Anställd. Koden är mestadels på svenska trots att god programmeringssed säger att man bör skriva på engelska. Skälet till att klassnamn m.m. är på svenska är att förenkla för dig som skriver tentan. Det är trots allt lättare att förstå begrepp som tillsvidareanställd på svenska än på engelska. Du hittar källkoden på sidorna 4 8. De sju uppgifter du ska lösa finns på nästa sida (sida 4). 3

Uppgifter: (a) Implementera metoden Deltidsanställd.setProcentAnställd() med lämplig felhantering. Vid fel ska ett undantag kastas. (2 p) (b) Interface:et Anställd är än så länge ett taggningsinterface. Men med tanke på hur det används av den övriga koden så kommer det ge kompileringsfel. Inför nödvändiga metoder i Anställd. (2 p) (c) Inför en uppräkning (eng. enum) Lönetidsenhet med konstanterna PER_MÅNAD och PER_TIMME. Titta i klassen Lön på hur Lönetidsenhet används. (3 p) (d) Överlagra Tillsvidareanställd.setLön() så att den tar emot Lön och Lönetidsenhet som parametrar. (1 p) (e) Metoden Tillsvidareanställd.equals() är inte implementerad. Skriv den metoden så att två tillsvidareanställda anses lika om de har samma personnummer. (2 p) (f) Som du ser i Tillsvidareanställd.getLön() så klonas lönen innan den returneras för att den inte ska kunna ändras av något annat objekt. Men i klassen Lön ser vi att kloning inte stöds än, dvs CloneNotSupportedException kommer att kastas vid anrop till clone(). Se till att Lön stödjer kloning och att ett anrop till Lön.clone() returnerar en djup klon. Du behöver bara ange förändringarna i koden så länge du också anger var du ändrar. (4 p) (g) Måste klassen Tillsvidareanställd vara abstrakt? Motivera ditt svar. (2 p) public final class Personaldatabas { private List<Anställd> databas; public Personaldatabas() { databas = new LinkedList<Anställd>(); public void addanställd(anställd anställd) { if(!databas.contains(anställd)) { databas.add(anställd); Collections.sort(databas); public String tostring() { String result = ""; for(anställd a : databas) { result += a.getnamn() + " " + a.getpersonnummer().tostring() + " " + a.getanställningsform() + " " + a.getlön().tostring() + "\n"; return result; 4

public interface Anställd extends Comparable<Anställd> { // Din kod här public class Personnummer { private String personnummer; public Personnummer(String pnr) { if(iscorrect(pnr)) { personnummer = pnr; else { throw new IllegalArgumentException(); public String tostring() { return personnummer; public boolean equals(object obj) { if (obj instanceof Personnummer) { Personnummer nyttpersonnummer = (Personnummer) obj; return personnummer.equals(nyttpersonnummer.personnummer); else { return false; private boolean iscorrect(string pnr) {... // Koden inte redovisad 5

public class Lön { private Pengar pengar; private Lönetidsenhet tidsenhet; public Lön(Pengar lön, Lönetidsenhet tidsenhet) { this.pengar = lön; this.tidsenhet = tidsenhet; public String tostring() { return new String(pengar.toString() + " " + tidsenhet.tostring()); public class Pengar { private double summa; private Valuta valuta; public Pengar(double summa, Valuta valuta) { this.summa = summa; this.valuta = valuta; public double getsumma() { return summa; public Valuta getvaluta() { return valuta; public String tostring() { return valuta.tostring(summa); 6

public abstract class Tillsvidareanställd implements Anställd { private String namn; private Personnummer personnummer; private Lön lön; public Tillsvidareanställd(String namn, Personnummer personnummer, Lön lön) { this.namn = namn; this.personnummer = personnummer; this.lön = lön; public String getnamn() { return namn; public Personnummer getpersonnummer() { return personnummer; public void setlön(lön lön) { this.lön = lön; public Lön getlön() { return (Lön)lön.clone(); public boolean equals(object obj) { // Din kod här public int compareto(anställd anställd) { return namn.compareto(anställd.getnamn()); 7

public class Heltidsanställd extends Tillsvidareanställd { public Heltidsanställd(String namn, Personnummer personnummer, Lön lön) { super(namn, personnummer, lön); public String getanställningsform() { return "heltidsanställd"; public class Deltidsanställd extends Tillsvidareanställd { private double procentanställd; public Deltidsanställd(String namn, Personnummer personnummer, Lön lön, double procentanställd) { super(namn, personnummer, lön); setprocentanställd(procentanställd); public String getanställningsform() { return "tillsvidareanställd " + procentanställd + " %"; public double getprocentanställd() { return procentanställd; public void setprocentanställd(double procentanställd) { // Din kod här private boolean iscorrectprocent(double procent) { return (procentanställd > 0.0) && (procentanställd < 100.0); 8