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

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

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

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

CHALMERS TENTAMEN. 2012/2013, lp 1 DAT042. Uno Holmer. Java API (utdelas av skrivningsvakten) Erland Holmström tel besöker tentamen

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

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

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

TENTAMEN. Objektorienterade applikationer CHALMERS. 2018/2019, lp 3 DAT055. Uno Holmer

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Objektorienterad programmering D2

DAT043 - Föreläsning 7

CHALMERS TENTAMEN. 2013/2014, lp 2 DAT050. Uno Holmer. Java API (bifogas tesen) Uno Holmer tel besöker tentamen ca kl samt ca 11.

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

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

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

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

DAI2 (TIDAL) + I2 (TKIEK)

PROGRAMMERINGSTEKNIK TIN212

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen

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

TENTAMEN OOP

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

DAT043 - föreläsning 8

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

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

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

Lösningsförslag till tentamen

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 7 (7) Tentamen

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

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

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

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

TENTAMEN OOP

Objektsamlingar i Java

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

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Arv och polymorfism i Java

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

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

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

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

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

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

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

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad.

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Kopiering av objekt i Java

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

LÖSNINGSFÖRSLAG TENTAMEN

1 Comparator & Comparable

DAT043 Objektorienterad Programmering

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

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

Lösningar för tenta 2 DAT043,

TDDD78 Viktiga begrepp, del 2

Lösningsförslag till tentamen

Konstruktion av klasser med klasser

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

Java, klasser, objekt (Skansholm: Kapitel 2)

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

DD1342 Programkonstruktion för F1,

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

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

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

Klasshierarkier - repetition

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

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

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

Föreläsning 5-6 Innehåll

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

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

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 Programkonstruktion. Föreläsning 2 2 nov 2016

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Objektorienterad Programmering (TDDC77)

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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

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

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540) Ansvarig: Jan Skansholm, tel eller

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

TENTAMEN I. OBJEKTORIENTERAD PROGRAMMERING för Z1. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

Objektorienterad programutveckling, fk

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Transkript:

1 (12) TENTAMEN: Objektorienterad programmering Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem). Skriv rent dina svar. Oläsliga svar r ä t t a s e j! Programkod som finns i tentamenstesen behöver ej upprepas. Programkod skall skrivas i Java 5 (eller senare) och vara indenterad och kommenterad. Onödigt komplicerade lösningar ger poängavdrag. Omotiverad användning av klassvariabler och klassmetoder ger poängavdrag. Givna deklarationer, parameterlistor etc. får ej ändras. Läs igenom tentamenstesen och förbered ev. frågor. I en uppgift som består av flera delar får du använda dig av funktioner klasser etc. från tidigare deluppgifter, även om du inte löst dessa. Lycka till!

2 (12) Uppgift 1 Välj ett alternativ för varje fråga! Garderingar ger noll poäng. Inga motiveringar krävs. Varje korrekt svar ger två poäng. Besvara direkt i tesen! 1. Givet klasserna public class A public int f() return g(); public int g() return 1; public int h() return 0; vad skriver kodavsnittet nedan ut? A obj = new C(); System.out.println(obj.h()); a. 0 b. 1 c. 2 d. 3 2. Specifikation: Metoden order skall ta två tal som argument och returnera ett par med talen sorterade i storleksordning. Vilket påstående om implementeringen av order nedan är korrekt? a. Metoden är helt felfri. b. Metoden returnerar fel objekt i vissa fall. c. Metoden kan orsaka att ett undantag kastas i den anropande koden. d. Metoden går ej att kompilera. 3. Vilken aktivitet kan minska kopplingen i ett program? a. Omkompilering. b. Avlusning. c. Testning. d. Refaktorering. e. Avkoppling. public class B extends A public int g() return 2; public int h() return f(); public class C extends B public int g() return 3; public Pair order(int x,int y) Pair p = null; if ( x < y ) public class Pair p = new Pair(x,y); private int fst,snd; else if ( x > y ) public Pair(int fst,int snd) p = new Pair(y,x); this.fst = fst; this.snd = snd; return p; public int first() return fst; public int second() return snd;

3 (12) 4. Ett av fallen a, b, c är ej en korrekt överskuggning av method, vilket? public class A public class B extends A public interface Int Int method(b x); public class Sub1 implements Int // a @Override public Int method(b x)... // b @Override public Int method(a x)... // c @Override public Sub1 method(b x)... 5. Alla påståenden nedan utom ett är i allmänhet ogiltiga om de avser programutveckling, men vilket av dem är giltigt? a. Testning och avlusning är samma sak. b. Testning och verifiering är samma sak. c. Med avlusning kan man hitta orsaken till fel. d. Med testning kan man hitta orsaken till fel. e. Med testning kan man hitta alla fel. (10 p)

4 (12) Uppgift 2 Skapa en klass Mailserver som kan fungera som en liten enkel e-postserver. Man skall kunna skapa brevlådor för användare, samt lagra och hämta brev för de olika användarna. Ordningen skall vara sådan att användaren får hämta sina brev i omvänd insättningsordning, d.v.s. det mest aktuella först. Ett brev är här bara en enkel sträng utan någon speciell inre struktur. Definiera först klassen MailboxEception som subklass till Exception. Klassens konstruktor skall ta en sträng med ett textmeddelande som argument. Klassen Mailserver skall ha följande metoder: public boolean hasuser(string name) Returnerar true om användaren name har en brevlåda i servern, false annars. public void adduser(string name) Skapar en brevlåda för användaren name. Om det redan finns en brevlåda med det namnet skall undantaget MailboxEception kastas. Undantaget skall innehålla texten Mailserver.addUser: user name already exists. public void putmessage(string name,string msg) Placerar meddelandet msg främst i användaren name:s brevlådan. Om det ej finns en brevlåda med det namnet skall undantaget MailboxEception kastas. Undantaget skall innehålla texten Mailserver.putMessage: unknown recipient name. public String getnextmessage(string name) Returnerar nästa brev i turordning från den angivna användarens brevlåda. Brevet skall tas bort ur brevlådan. Om brevlådan existerar men är tom returneras null. Om det ej finns en brevlåda med angivet namn skall undantaget MailboxEception kastas. Undantaget skall innehålla texten Mailserver.getNextMessage: unknown recipient name. Exempel Mailserver server = new Mailserver(); server.adduser("bosse"); server.putmessage("bosse", 1 ); server.putmessage("bosse", 2 ); server.getnextmessage("bosse"); // 2 server.getnextmessage("bosse"); // 1 server.getnextmessage("bosse"); // null Använd en avbildningstabell (Map) och en lista av lämplig typ för att lagra brevlådor och brev. (10 p)

5 (12) Uppgift 3 Studera följande deklarationer public class Base private String s = ABC ; public boolean equals(object other) if ( this == other ) return true; else if ( other instanceof Base ) return s.equals(((base)other).s); else return false; public class Sub extends Base private String t = DEF ; public boolean equals(object other) if ( this == other ) return true; else if ( other instanceof Sub ) return super.equals(other) && t.equals(((sub)other).t); else return false;... Base b = new Base(); Sub s = new Sub(); a) Är alla fyra uttrycken nedan typkorrekta? Vilka av dem returnerar true och vilka returnerar false? Motivera svaret! b.equals(b) b.equals(s) s.equals(s) s.equals(b) (4p) b) Är det några av de algebraiska lagar som javastandarden rekommenderar att equals skall respektera som definitionerna av equals i de två klasserna ovan ej uppfyller? Ange i så fall vilka lagar det gäller och förklara varför de ej uppfylls? (4 p)

6 (12) Uppgift 4 Denna uppgift handlar om djup kopiering av objekt. a) Antag att du av någon anledning vill förbjuda att objekt av en viss klass kopieras med clone. Vad behöver du addera till klassen? Visa hur det skall se ut! b) Överskugga metoden clone i klassen C. (1 p) public class B public B clone()... public class C private int x; private B b;... För full poäng krävs att du använder tekniken med kopieringskonstruktor, vilken givetvis då också skall implementeras, samt utnyttjar möjligheten till kovariant returtyp. (2 p) c) Överskugga metoden clone i klassen D. public class D int x; ArrayList<C> cs;... För full poäng krävs att du använder tekniken med kopieringskonstruktor, vilken givetvis då också skall implementeras, samt utnyttjar möjligheten till kovariant returtyp. Det framgår inte av tentamenshjälpmedlet, men standardklasser som t.ex. listor överskuggar clone. (4 p)

7 (12) Uppgift 5 I en e-postklient brukar man kunna skapa grupper, eller listor, av mottagare. Om man skickar ett brev till en grupp distribueras det till alla individer i gruppen. En grupp kan förutom individuella mottagare även innehålla grupper. På så sätt kan man bygga hierarkiska grupper. Sådana strukturer är exempel på designmönstret Composite. Uppgiften är att skapa en klasshierarki enligt Composite som kan användas för att distribuera e-post till mottagare (Recipient) som kan vara individer (User) eller grupper (Group). 1 Vi skall använda oss av klassen Mailserver som behandlades i en tidigare uppgift. Även om du inte löst denna uppgift räcker det att du förstår hur klassen fungerar ur ett användarperspektiv. Följande basklass är given public abstract class Recipient public void add(recipient r) public void remove(recipient r) public Recipient get(int i) return null; public abstract void distribute(mailserver server,string msg); Metoden distribute skall sända meddelandet msg som är avsett för denna mottagare till server. Exemplet nedan klargör förhoppningsvis vad denna mottagare syftar på. a) Definiera klassen User som subklass till Recipient. Klassen skall innehålla en instansvariabel för att lagra ett mottagarnamn, samt en konstruktor för att initiera variabeln. Tänk efter noga vilka metoder i Recipient som bör överskuggas i klassen. Ev. undantag som kan kastas i metoderna skall fångas och skrivas ut. (4 p) b) Definiera klassen Group som subklass till Recipient. Klassen skall innehålla en instansvariabel som refererar till en lista av mottagare. Tänk efter noga vilka metoder i Recipient som bör överskuggas i klassen. Ev. undantag som kan kastas i någon av metoderna skall fångas och skrivas ut. (6 p) Exempel: Grabbarna får det första meddelandet från Lisa, alla tre får det andra meddelandet. // Server side Mailserver server = new Mailserver(); server.adduser("bosse"); server.adduser("lisa"); server.adduser("nisse"); // Client side ("address book") User bosse = new User("Bosse"); User lisa = new User("Lisa"); User nisse = new User("Nisse"); Group boys = new Group(); boys.add(bosse); boys.add(nisse); Group all = new Group(); all.add(boys); all.add(lisa); boys.distribute(server,"hello boys! /Lisa"); all.distribute(server,"this is a broadcast message..."); 1 I e-postklienten Thunderbird motsvaras User ungefär av begreppet card och Group av begreppet list.

8 (12) Uppgift 6 En ultraljudstvätt är en apparat som t.ex. används för finrengöring av komponenter i industrin före hopmontering. I denna uppgift skall du programmera en mjukvaruprototyp till en sådan apparat. Apparaten har en panel med tre knappar för inställningar samt en tidsdisplay. Vi designar panelen som ett enkelt javagränssnitt med följande utseende Med knappen SET ställer man in önskad tvättid, med ON startar man tvättprocessen, eller fortsätter efter stopp. Med OFF kan man när som helst stoppa processen. Förutom att ställa in tiden från början, kan man även ändra den både under pågående tvättning, eller när processens stoppats med OFF. Tiderna som kan väljas skall vara 90, 180, 280, 380 samt 480 sekunder. Som standard får man 180 sekunder när apparaten kopplas in. Tryck på SET stegar igenom tiderna cykliskt i ordningen ovan. Tiderna visas alltid som sekunder i displayen, såväl under inställning, som kvarvarande tid när tvättprocessen pågår. I bilden ovan är det 74 sekunder kvar av tvättiden. Systemet skall ha följande arkitektur Klasserna Gui, Controller, och Main skall konstrueras i uppgiften, de övriga är färdiga. Beskrivningar av Ultrasonic, TimeController samt TimeFormat följer på nästa sida. Designmönstret Observer skall tillämpas för klasserna Controller och TimeController. Controller skall vara händelselyssnare för Gui.

9 (12) Här följer en kort beskrivning av klasserna: UltraSonicUnit är en stubbklass som simulerar själva ultraljudsenheten. Det enda man kan göra med ett objekt av den är att anropa on eller off för att simulera start och stopp av tvättprocessen. TimeFormat kan användas för att omvandla en tid i form av ett heltal mellan 0 och 999 till motsvarande siffersträng med tre tecken. Korta strängar fylls ut med inledande nollor. Klassen har endast en klassmetod format. Ex. TimeFormat.format(5) returnerar 005. TimeController är systemets klocka. Den kan hålla reda på ett antal förvalda tider och en standardtid. Klassen använder internt en Swing-timer. Klassen är färdig. Den har en konstruktor och fyra metoder: public TimeController(int[] timeoptions,int defaulttime) Inparametrar: timeoptions ett fält av tvättider defaulttime ett index i intervallet 0..timeOptions.length Exempel: Om man deklarerar int[] options = 90,180,280,380,480; skriver man new TimeController(options,1) för att få tiderna enligt exemplet på förra sidan och 180 som standardtid. public void timeinit() Sätter timerns nedräkningstid till standardtiden. Observatörerna notifieras med tiden som argument. public void set() Sätter timerns nedräkningstid till nästa förvalda tid i cyklisk ordning. Om den t.ex. i ett objekt som initierats enligt ovan var 480 så blir den 90 efter anropet av set. Observatörerna notifieras med den valda tiden som argument. public void start() Om timern står still startar den och börjar räkna ner. Om den interna tiden är 0 vid anropet så anropas först timeinit innan nedräkningen påbörjas. Om timern går händer ingenting. public void stop() Om timern går stoppas den, annars händer ingenting. public void actionperformed(actionevent e) Lyssnarmetod för Swing-timern. Metoden anropas en gång per sekund. Den interna tiden räknas ner och observatörerna notifieras med den aktuella tiden som argument. Uppgifter. För att spara lite tid finns kodskelett med några detaljer ifyllda på följande sidor.

10 (12) a) Implementera den grafiska gränssnittsklassen Gui. Fönstret skall se ut som i exemplet. Det skall finnas tre knappar och ett textfält. Inför lämpliga instansvariabler. Tips. Använd BorderLayout. public class Gui public static final String ON_EVENT = "ON"; public static final String OFF_EVENT = "OFF"; public static final String SET_EVENT = "SET"; public Gui(Controller controller) // Sätter en tid i textfältet public void settime(string t) (6 p)

11 (12) b) Implementera klassen Controller. Klassens skall vara lyssnarklass till Gui och observatör av TimeController. Tidsuppgifter som kommer från den senare skall skickas till Gui 2. Inför lämpliga arv, instansvariabler och metoder. Skriv på extra blad vid behov. public class Controller public Controller(UltrasonicUnit ultrasonicunit, TimeController timecontroller) public void init(gui gui) (6 p) 2 Lite oren design, men det förenklar uppgiften något.

12 (12) c) Konstruera main-metoden i klassen Main. Metoden skall skapa lämpliga objekt av klasserna UltrasonicUnit, TimeController, Controller, samt Gui så att ett fungerande program erhålls. Tiderna som kan väljas av användaren skall vara 90, 180, 280, 380 samt 480 sekunder, med 180 sekunder som standardtid. Klassen får ej innehålla några variabler eller metoder utanför main. (3 p)