Vinjett 6 - Party-admin

Relevanta dokument
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)

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

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

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

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

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

TENTAMEN OOP

Tentamen OOP

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

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

Repetition av viktiga begrepp inom objektorienterad programmering

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

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)

Tentamen i Objektorienterad programmering

1 Repetition av viktiga begrepp inom objektorienterad programmering

Tentamen Programmering fortsättningskurs DIT950

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

Föreläsning 9: Arv och UML

OOP Objekt-orienterad programmering

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

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

Lektion 1 - Programmeringsteknik F1, ht 2003

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Konstruktion av klasser med klasser

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

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

Fördjupad Java. Undantagshantering. Fel

Föreläsnings 10 - Överlagring, Konstruerare, Arv, Mer Exceptions, Reguljära Uttryck

Lösningsförslag till tentamen

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

OOP Objekt-orienterad programmering

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

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

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

Tentamen, EDAA20/EDA501 Programmering

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

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

Arv. Objektorienterad och komponentbaserad programmering

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.

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

DELPROV 1 I DATAVETENSKAP

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.

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

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

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

Programmering A. Johan Eliasson

Föreläsning 13 Innehåll

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

Gruppenkät. Lycka till! Kommun: Stadsdel: (Gäller endast Göteborg)

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Du ska nu skapa ett litet program som skriver ut Hello World.

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

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

TENTAMEN OOP

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

EN DUM DAG för byggstarter, taklagsfester och slutbesiktningar.

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

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

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Lösningsförslag till tentamen

Kopiering av objekt i Java

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

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

Objektorienterad programmering D2

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

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

ID1004 Laboration 4, November 2012

DAT043 Objektorienterad Programmering

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Introduktion till arv

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

Lite skoj - typ. 5DV085 - Programspråk. Jan Erik Moström, Department of Computing Science, Umeå University - jem@cs.umu.se

Distribuerade system. CORBA eller RMI

Mera om generik. Innehåll. Generik och arv Wildcards Vektorer och generik Generiska metoder. EDA690 (Mera om generik) HT / 24

Tentamen. Lösningsförslag

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

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

Klasshierarkier - repetition

Tentamen, EDA501 Programmering M L TM W K V

PROGRAMMERING A VB6 UTVECKLINGSVERKTYGET VISUAL BASIC

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

2D1310, 2D1311 Programmeringsteknik Tentamen (1p) 3 maj 2001, kl

OOP Omtenta

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

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

Programmera en NXT Robot

ELEV- HANDLEDNING (Ansökan via webben)

Webb-bidrag. Sök bidrag på webben Gäller från

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

F4. programmeringsteknik och Matlab

Gissa det hemliga talet

Obligatorisk uppgift 5

Transkript:

Vinjett 6 - Party-admin Denna vinjett är skapad av en gammal IT-basgrupp och är frivillig. Tankspridde Tom och Energiske Erik har gått med i festeriet ELiTHen. Äldre studenter varnade dem för att de skulle missa sina tentor pga hårt arbete och ändlöst festande, men Tom och Erik är smartare än så. Det borde gå att kombinera festeriarbete med studierna i programmering, sa Erik. Ja, vad smart! sa Tom. 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 Tom. Så föddes idén om PartyAdmin, ett program för hantering av gäster på studentfester. Då du känner Tom och Erik 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 nns på sidan två och framåt. På nästa sida hittar du de sex uppgifter som har hamnat på din todo-lista. Uppgifter (a) Metoden Party.pay() har ingen kropp än. Implementera kroppen med lämplig felhantering. Vid fel ska undantag kastas. (b) Överlagra metoden Party.addSponsor() så att den tar emot en String och en double som parametrar. Kedja den med den bentliga Party.addSponsor(). (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 Studentobjekt som är dess värd. Modiera ö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. 1

(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. (e) Metoden Party.print() har ingen kropp än. Implementera kroppen så att metoden skriver ut festinformation enligt följande exempel: ELiTH-phesten i samarbete med Karlström Consulting AB och Programmeringsspecialisten AB Pris 90 kr per gäst, max 1000 gäster Anmälda gäster: Erik Karlström (är VIP), Joakim von Anka (har betalat), Pierre Anderberg (har betalat), Simon Arvidsson (har betalat), John Wilander (har betalat), Erik Janols (har inte betalat än), Eva Ragnemalm (har betalat), Jonas Wallgren (har betalat). Om du vet att det nns 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 nns 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 ktiva 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 Tom och Erik missat något? Motivera ditt svar och hänvisa till koden om du vill peka på något särskilt. Klasser 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; 2

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 abstract class Person { private final String name; Person(String name) { this.name = name; public String getname() { return name; public int hashcode() { return name.hashcode(); 3

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; 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(); 4

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); 5