Tentamen för TTIT71 Programmering 2007-01-10 kl. 08-12 Institutionen för datavetenskap Linköpings universitet. Uppgift 1. (2 p)



Relevanta dokument
Vinjett 6 - Party-admin

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

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

Objektorienterad Programmering (TDDC77)

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

TENTAMEN OOP

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

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

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

DAT043 Objektorienterad Programmering

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

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

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

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

Repetition av viktiga begrepp inom objektorienterad programmering

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

1 Repetition av viktiga begrepp inom objektorienterad programmering

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

Objektorienterad Programmering (TDDC77)

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

Objektorienterad Programmering (TDDC77)

Tentamen OOP

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

Classes och Interfaces, Objects och References, Initialization

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Tentamen i Objektorienterad programmering

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

Tentamen Programmering fortsättningskurs DIT950

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

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Lösningsförslag till tentamen i OOP, HI1027 Fredag 21 oktober 2011

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

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

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

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

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

TENTAMEN OOP

TENTAMEN OOP

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

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

Klasshierarkier - repetition

Kopiering av objekt i Java

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

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

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

Tentamen, EDAA10 Programmering i Java

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

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

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

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

DAT043 - Föreläsning 7

Konstruktion av klasser med klasser

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Tentamen. Lösningsförslag

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

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

OOP Tenta

TDA550 - Objektorienterad programvaruutveckling, fk

Tentamen, EDAA20/EDA501 Programmering

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

LÖSNINGSFÖRSLAG TENTAMEN

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Parameteröverföring. Exempel. Exempel. Metodkropp

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

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

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

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

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

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Föreläsning 13 Innehåll

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Arv. Objektorienterad och komponentbaserad programmering

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

Tentamen i Algoritmer & Datastrukturer i Java

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

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

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

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

Objektorienterad Programkonstruktion. Föreläsning jan 2016

PROGRAMMERINGSTEKNIK TIN212

TENTAMEN: Objektorienterad programmering. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

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

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA20/EDA501 Programmering

Polymorfi. Objektorienterad och komponentbaserad programmering

Lösningsförslag till tentamen

Del A (obligatorisk för alla)

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

Transkript:

Tentamen för TTIT71 Programmering 2007-01-10 kl. 08-12 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. 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. 09.30. Uppgift 1. (2 p) Vad kommer att skrivas ut när man kör nedanstående program? public class Adder { Adder(int i) { addition(j); j = j + i; addition(j); System.out.println(j); private void addition(int a) { a = a + i; public static void main(string[] args) { new Adder(34); private int i = 1; private int j = 10; 1

Uppgift 2. (4 p) Skriv ett program som tar emot ett heltal av användaren och skriver ut en likbent, rätvinklig triangel enligt nedanstående exempel. Heltalet som användaren anger är alltså längden på de två katetrarna. ASCII-grafiken gör att trianglarna inte blir likbenta i verkligheten men de har i alla fall lika många tecken i varje katet. ida> java TrianglePrinter 0 Error: Integer value must be larger than 0 ida> java TrianglePrinter 1 _ / ida> java TrianglePrinter 2 / ida> java TrianglePrinter 15 / Uppgift 3. (4 p) Förklara nedanstående begrepp med 2 3 meningar vardera: (a) referenstyp (b) konstruktor (c) multipelt arv (d) information hiding (e) accessmodifierare (f) inkapsling (g) överlagring (h) åsidosättning 2

Uppgift 4. (±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) Om en metod explicit kastar ett undantag med throw så måste den metoden också explicit deklareras med throws i signaturen. (b) Genom att deklarera (minst) en metod som final så ser man till att man inte kan ärva från den klass metoden är deklarerad i. (c) En variabel som är deklarerad protected är bara synlig i objekt av den egna klassen och i objekt som har ärvt den egna klassen. (d) Metoder deklarerade i interface är alltid public. (e) Att välja mellan att relatera två klasser via arv eller inkapsling får konsekvenser för hur kloning implementeras i de klasserna. (f) Konstanterna i en uppräkning (enumeration) är alltid statiska (static). Uppgift 5. (3 p) Förklara nedanstående tre koncept gällande arv i Java. Relatera också koncepten till varann. Med relatera menas t.ex. om det ena implicerar det andra eller huruvida det ena är nödvändigt för det andra eller ej. Ange Javas nyckelord där sådana finns. 1. Subklassning 2. Subtypning 3. Substituerbarhet Uppgift 6. (16 p) Fumliga Fia och Snillrike Sune har gått med i festeriet. Äldre studenter varnade dem för att de skulle missa sina tentor pga hårt arbete och ändlöst festande, men Fia och Sune är smartare än så. Det borde gå att kombinera festeriarbete med studierna i programmering, sa Sune. Ja, vad smart! sa Fia. De båda mindes hur gamla avdankade festerister beklagat sig över strul med biljetter, anmälningar, sponsorer och bordsplacering vid sittningar. Vi borde kunna göra ett program som löser det, tyckte Fia. Så föddes idén om PartyAdmin, ett program för hantering av gäster på studentfester. Du känner Fia och Sune har du lovat att hjälpa till lite med programmeringen. Projektet innehåller redan klassen Party som representerar en fest, den abstrakta klassen Person med subklasserna Student och SponsorPerson som representerar olika typer av gäster, klassen Sponsor som representerar ett företag eller en organisation som sponsrar festen, samt klassen Money som representerar svenska pengar. Källkoden i sin nuvarande status finns på sidorna 5 7. På nästa sida hittar du de sex uppgifter som har hamnat på din todo-lista. 3

Uppgifter: (a) Metoden Party.pay() har ingen kropp än. Implementera kroppen med lämplig felhantering. Vid fel ska undantag kastas. (2 p) (b) Överlagra metoden Party.addSponsor() så att den tar emot en String och en double som parametrar. Kedja den med den befintliga Party.addSponsor(). (2 p) (c) Studenter bör kunna anmäla varsin extern gäst, t.ex. en kompis hemifrån. Inför en ny klass GuestToStudent. Varje sådant objekt ska hålla reda på vilket Student-objekt som är dess värd. Modifiera övriga klasser så att varje student kan ha en extern gäst, och att alla objekt av typen GuestToStudent hanteras som de andra gästerna. (3 p) (d) Som du ser har programmet inget stöd för bordsplacering än. Ett första steg är att lagra uppgift om kön på gästerna, om man nu vill placera dem varannan tjej, varannan kille. Implementera en uppräkning (enum) Sex och inför den i systemet så att en placeringsmetod sedermera kan placera alla gäster efter kön. (3 p) (e) Metoden Party.print() har ingen kropp än. Implementera kroppen så att metoden skriver ut festinformation enligt följande exempel (4 p): DömD i samarbete med Omegapoint Consulting AB och Enea Epact AB Pris 90 kr per gäst, max 1000 gäster Anmälda gäster: Kristin Johansson (har betalat), Joakim von Anka (har betalat), Lotta Frisell (har betalat), Gurra Svensson (har betalat), John Wilander (har betalat), Fredrik Kuivinen (har inte betalat än), Lena af Grepe (har betalat), Gunhild Myrhage (har betalat) Om du vet att det finns en klass eller metod i Javas API som löser en viss sak men du inte kommer ihåg exakt vad den heter eller i vilket paket den finns så är det OK att införa ett eget metodanrop som löser samma sak så länge du beskriver det. Det är dock inte OK att anta att API:et innehåller fiktiva metoder som förenklar uppgiften i stil med metodensomfixartilllite(). (f) Gästerna och uppgifter om huruvida de har betalat eller ej lagras i en viss typ av mappning (map). Har de klasser som lagras där ett lämpligt stöd för den mappningen, eller har Fia och Sune missat något? Motivera ditt svar och hänvisa till koden om du vill peka på något särskilt. (2 p) 4

class Party { private String partyname; private int maxguests; private Money entrancefee; private Map<Person, Boolean> guests; private Map<Sponsor, Money> sponsors; Party(String partyname, int maxguests, Money entrancefee) { this.partyname = partyname; this.maxguests = maxguests; this.entrancefee = entrancefee; this.guests = new HashMap<Person, Boolean>(); this.sponsors = new HashMap<Sponsor, Money>(); void addguest(person guest) { addguest(guest, false); void addguest(person guest, boolean haspaid) { guests.put(guest, haspaid); void pay(person guest) { // Din kod här boolean haspaid(person guest) throws NoSuchPersonException { if(guests.containskey(guest)) { return guests.get(guest); else { throw new NoSuchPersonException(); void addsponsor(sponsor sponsor, Money amount) { sponsors.put(sponsor, amount); public void print() { // Din kod här 5

abstract class Person { private final String name; Person(String name) { this.name = name; public String getname() { return name; public int hashcode() { return name.hashcode(); class Student extends Person { Student(String name) { super(name); class SponsorPerson extends Person { private final Sponsor organization; SponsorPerson(String name, Sponsor organization) { super(name); this.organization = organization; Sponsor getorganization() { return organization; 6

class Sponsor { private final String name; Sponsor(String name) { this.name = name; public String tostring() { return name; public int hashcode() { return name.hashcode(); class Money implements Cloneable { double amount; Money(double amount) { if(amount < 0.0) { throw new IllegalArgumentException(); else { this.amount = amount; protected Money clone() { try { return (Money)super.clone(); catch(clonenotsupportedexception e) { throw new AssertionError(); // Should never happen public String tostring() { return Double.toString(amount); 7