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

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

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

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

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

DAI2 (TIDAL) + I2 (TKIEK)

TENTAMEN OOP

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

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

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

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

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

Lösningsförslag till tentamen

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

Lösningsförslag till tentamen

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

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

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

TENTAMEN OOP

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

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

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

OOP Objekt-orienterad programmering

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

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

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

Objektorienterad programmering D2

Konstruktion av klasser med klasser

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

Objektsamlingar i Java

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Objektorienterad Programmering (TDDC77)

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

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

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

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

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

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: Objektorienterad programmering. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

Laboration 1: Figurer i hierarki

OOP Objekt-orienterad programmering

Tentamen i Programmeringsteknik I

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

Föreläsning 13 Innehåll

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 ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

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.

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

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

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

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

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

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

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

DAT043 Objektorienterad Programmering

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

Objektorienterad programvaruutveckling, fk, TDA550. Exempeltentamen

TDDD78 Viktiga begrepp, del 2

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

Klasshierarkier - repetition

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

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

OOP Objekt-orienterad programmering

Tentamen, EDAA10 Programmering i Java

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

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

Malmö högskola 2008/2009 CTS

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

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

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Laboration A Objektsamlingar

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

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

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

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Objektorienterad Programmering (TDDC77)

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

Kopiering av objekt i Java

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Transkript:

1 (9) TENTAMEN: Objektorienterad programmering Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem). Skriv rent dina svar. Oläsliga svar r ä t t a s e j! Skriv inte med rödpenna! Programkod som finns i tentamenstesen behöver ej upprepas. Programkod skall skrivas i Java 5 eller senare version, samt vara indenterad och renskriven. Onödigt komplicerade lösningar 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 (9) 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. 1. Antag att vi har definierat en egen klass (detaljer utelämnade): public class MyClass {... Vad skrivs ut av följande kodavsnitt? ArrayList<MyClass> l = new ArrayList<MyClass>(); l.add(new MyClass()); System.out.println(l.contains(new MyClass())); a. false b. true c. Null pointer exception 2. Vilket påstående är korrekt om följande metoderna i klassen C? public class C { private int x = 123; private static int y = 456; public void f() {... x = 27;... public void g() {... y = 96;... public void h() {... j();... public static void i() {... x = 48;... public static void j() {... y = 164;... public static void k() {... g();... ; a. f,g,h ger kompileringsfel men i,j,k är korrekta. b. f,g,i är korrekta men h,j,k ger kompileringsfel. c. f,g,h,j är korrekta men i,k ger kompileringsfel. d. i,j,k ger kompileringsfel men f,g,h är korrekta. 3. Om Base är en basklass till Sub och variablerna b och s har typen Base resp. Sub, vilken tilldelning är då otillåten i Java? a. b = s; b. s = (Sub)b; c. s = b; forts.

3 (9) 4. Vilket påstående stämmer bäst? public class Person { private String name; private String address; private String phone; private String email; // date of last visit private int year; private String month; private int day;... a. Person har låg kohesion b. Person har hög kohesion c. begreppet kohesion är enbart tillämpbart på metoder, inte på klasser 5. Vad kan man säga om graden av koppling mellan klasserna AlarmMonitor, FireAlarm TemperatureAlarm och PressureAlarm? public class AlarmMonitor { private AlarmQueue queue;... public void monitoralarms() { Object alarm = queue.getnextalarm(); while ( true ) { if (alarm instanceof TemperatureAlarm ) ((TemperatureAlarm)alarm).handleTemp(); else if (alarm instanceof PressureAlarm ) ((PressureAlarm)alarm).handlePress(); else if (alarm instanceof FireAlarm ) ((FireAlarm)alarm).handleFire(); a. kopplingen är hög b. kopplingen är låg c. graden av koppling är omöjlig att bedöma (10 p)

4 (9) Uppgift 2 En vårdcentral behöver hjälp med att hålla reda på sina patientbesök. Varje läkare har en egen kö. En schemaläggning (eng. schedule) av ett besök innehåller patientens id, en orsak till besöket, samt tidpunkt för besöket. Elementen i kön ordnas i tidsordning. Klassen Date används för att lagra tidpunkter. Klassen är färdig och dess enda egenskap som är relevant för uppgiften är att två datumobjekt kan jämföras: Man kan alltså skriva d1.compareto(d2) för att få reda på om tidpunkten d1 kommer före d2. Ett objekt av klassen Schedule motsvarar schemaläggningsinformation om ett patientbesök. public class Schedule { private String patientid; private String cause; private Date date; public Schedule(String patientid,string cause,date date) { this.patientid = patientid; this.cause= cause; this.date = date; public String getpatientid() { return patientid; public String getcause() { return cause; public Date getdate() { return date; a) Lägg till nödvändiga delar till klassen så att schemaläggningsobjekt kan jämföras med avseende på tidpunkt. Om s1 och s2 har typen Schedule, så skall man kunna skriva s1.compareto(s2) för att avgöra om besöket s1 skall ske före s2. (2 p)

5 (9) b) Eftersom schemaläggningsobjekt nu lätt kan jämföras i tidsordning kan vi använda klassen TreeSet<Schedule> för att lagra en patientköer. Elementen lagras automatiskt i växande tidsordning eftersom de är jämförbara enligt uppgift a. Ev. återbesökstider av mer akut karaktär passerar t.ex. då andra tider för lägre prioriterade besök i kön. Klassen Hospital skall hålla reda på ett antal läkare och deras respektive patientköer. Klassen skall ha följande metoder: public boolean newdoctor(string name) Lägger in en ny läkare med angivet namn i systemet. Returnerar true om läkaren ej var registrerad tidigare och registreringen gick bra, false annars. public Schedule getnextpatient(string doctor) Returnerar ett schemaläggningsobjekt med information om nästa patientbesök till doctor. Objektet tas bort från kön. Om kön var tom returneras null. public boolean schedule(string doctor, String patientid, String cause, Date date) Placerar ett schemaläggningsobjekt med angiven information i kön för doctor. Returnerar true vid lyckad operation (på kön) och false om läkaren är okänd. Använd en HashMap för att lagra tabellen med läkarna och deras köer. (8 p)

6 (9) Uppgift 3 Klassen Clock kan användas för att representera klockslag. Den har följande konstruktorer och metoder: public Clock(int hour,int minute,int second) throws IllegalStateException sätter tiden till angivet klockslag. Kastar angivet undantag om argumenten ej anger ett korrekt klockslag mellan 00:00:00 och 23:59:59. protected Clock(int seconds) throws IllegalStateException sätter tiden till angivet klockslag mätt i sekunder från midnatt. Kastar angivet undantag om argumentet ej anger ett korrekt klockslag mellan 00:00:00 och 23:59:59. protected int getseconds() returnerar tiden mätt i sekunder från midnatt. public int gethour() returnerar timmarna i klockslaget som representeras av detta objekt. public int getminute() returnerar minuterna i klockslaget som representeras av detta objekt. public int getsecond() returnerar sekunderna i klockslaget som representeras av detta objekt. public void tick() stegar fram tiden i klockslaget som representeras av detta objekt en sekund. Definiera en subklass SubClock till Clock och inför följande metod i subklassen: public SubClock diff(clock other) Metoden diff skall returnera ett klockobjekt som innehåller tidskillnaden mellan det anropande objektet och det andra objektet. Om det andra objektet representerar ett klockslag som ligger före det första så skall det andra klockslaget avse nästkommande dygn, vilket framgår av exemplet nedan. SubClock c1 = new SubClock(12,34,56); SubClock c2 = new SubClock(17,21,48); Clock d = c1.diff(c2); d.gethour(); 4 d.getminute(); 46 d.getsecond(); 52 d = c2.diff(c1); d.gethour(); 19 d.getminute(); 13 d.getsecond(); 8 I SubClock får inga nya instansvariabler definieras. (10 p)

7 (9) Uppgift 4 a) Vilka av överskuggningarna av metoderna f och g i Sub är tillåtna i Java, vilka ger kompileringsfel? Motivera svaret! public class A { public class B extends A { public class Super { public A f() {... public Super g(a x) {... public class Sub extends Super { 1. public A f() { return new A(); 2. public A f() { return new B(); 3. public B f() { return new A(); 4. public B f() { return new B(); 5. public Sub g(a x) { return new Sub(); 6. public Super g(b x) { return new Sub(); 7. public Sub g(b x) { return new Super(); b) Vad skrivs ut av anropet obj.h() nedan? Motivera svaret! (7 p) public abstract class Super { public void f() { g(); protected void g() { System.out.println("Super.g"); public abstract void h(); public class Sub extends Super { protected void g() { System.out.println("Sub.g"); public void h() { f();... Super obj = new Sub(); obj.h(); (3p)

8 (9) Uppgift 5 a) Skapa en klass Point för punkter i planet. Klassen skall ha två konstruktorer. Med den ena skall man kunna skapa standardpunkten (0,0) och med den andra en punkt i valfri position som anges via två parametrar. Alla koordinater skall representeras med typen int. Inför lämpliga instansvariabler. public Point() initierar detta objekt till positionen (0,0). public Point(int x,int y) initierar detta objekt till positionen (x,y). public String tostring() Den returnerade strängen skall ha formen (x-koordinat,y-koordinat). public int getx() returnerar punktens x-koordinat. public int gety() returnerar punktens y-koordinat. public double distance(point p) returnerar avståndet från denna punkt till p. Avståndet mellan (a,b) och (c,d) är 2 2 ( a c) ( b d) (Math.sqrt()). public Point clone() returnerar en djup kopia av detta objekt. public boolean equals(object other) returnerar true om other refererar till samma punkt i planet som detta objekt, och false annars. Metoden skall ej vara överskuggningsbar vid arv. public int hashcode() returnerar en hash-kod för detta objekt. (10 p)

9 (9) b) En polygon är en mängd punkter i planet som sammanbinds av raka sträckor, t.ex. (x 0,y 0 ) (x 2,y 2 ) (x 1,y 1 ) (x 3,y 3 ) (x 4,y 4 ) Polygonens längd är den sammanlagda längden av sträckorna som förbinder punkterna. Implementera klassen Polygon för att lagra polygoner. Använd en lista för att lagra punkterna. Punkternas index i listan skall avspegla insättningsordningen. Den först insatta punkten skall alltså ha index 0. Klassen skall ha följande konstruktor och metoder: public Polygon() en konstruktor som skapar en tom polygon. public void add(point p) adderar p till polygonen. public Point get(int i) returnerar polygonens i:e punkt. Punkterna numreras från 0 och uppåt. Metoden skall kasta undantaget IndexOutOfBoundsException om i anger ett index utanför indexområdet. public double getlength() returnerar polygonens längd. public Polygon xmirror() returnerar en ny polygon som är en spegling av polygonen i x-axeln. public Polygon scale(double scalefactor) returnerar en kopia av polygonen, skalad enligt scalefactor. public Polygon clone() returnerar en djup kopia av polygonen. (10 p)