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! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

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

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! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

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

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: Algoritmer och datastrukturer. Läs detta!

DAT043 Objektorienterad Programmering

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

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Objektorienterad programvaruutveckling, fk, TDA550. Exempeltentamen

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

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

Objektorienterad programmering D2

DAI2 (TIDAL) + I2 (TKIEK)

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

TENTAMEN OOP

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

TENTAMEN OOP

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

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

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!

Lösningsförslag till tentamen

Tentamen, EDAA10 Programmering i Java

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

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

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

LÖSNINGSFÖRSLAG TENTAMEN

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

TENTAMEN OOP

Institutionen för TENTAMEN CTH HT-17 Datavetenskap TDA550

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

PROGRAMMERINGSTEKNIK TIN212

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

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

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

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje 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

Objektsamlingar i Java

Repetition av OOP- och Javabegrepp

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

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

Repetition av OOP- och Javabegrepp

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

ID1004 Laboration 4, November 2012

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

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

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

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

Del A (obligatorisk för alla)

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

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

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

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

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

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

Lösningsförslag till tentamen

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

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

DAT043 - Föreläsning 7

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

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

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

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

OOP Objekt-orienterad programmering

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

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

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

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

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

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

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

Objektorienterad Programmering (TDDC77)

Institutionen för TENTAMEN CTH HT-14 Datavetenskap TDA550 DAG: TID: 14:00 18:00

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

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

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

Föreläsning 13 Innehåll

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

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

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

TENTAMEN: Objektorienterad programmering. Läs detta! Börja varje uppgift på ett nytt blad (skriv inga lösningar i tesen!).

DAT043 - föreläsning 8

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Transkript:

1 (8) TENTAMEN: Objektorienterad programmering Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad. Börja varje hel uppgift på ett nytt blad. Ordna bladen i uppgiftsordning. 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! Programkod som finns i tentamenstesen behöver ej upprepas. Programkod skall skrivas i Java 5, eller senare version, och vara indenterad och kommenterad. 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 (8) 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. Ett av villkoren bör vara falskt, vilket? SomeClass o1 = new SomeClass(),o2 = o1.clone(); a. o1.equals(o2) b. o1 == o2 c. o1!= o2 2. Vilket påstående är korrekt om Register på basis av vad som visas nedan? public class Register { private LinkedList<Person> list; private String name; public Register(String name) { this.name = name; public void add(person p) { list.add(p); a. klassen går ej att kompilera b. det går ej att skapa objekt av klassen c. exekveringen riskerar att avbrytas om objekt av klassen används d. klassen är felfri 3. Vad bör man eftersträva vid objektorienterad design? a. Klasser med hög kohesion och hög koppling till andra klasser. b. Klasser med låg kohesion och hög koppling till andra klasser. c. Klasser med låg kohesion och låg koppling till andra klasser. d. Klasser med hög kohesion och låg koppling till andra klasser. 4. I vilken ordning bör aktiviteterna utföras vid utbyggnad av ett program med ny funktionalitet? a. regressionstesta, bygg ut, refaktorera, regressionstesta b. regressionstesta, bygg ut, regressionstesta, refaktorera, regressionstesta c. regressionstesta, refaktorera, regressionstesta, bygg ut, regressionstesta d. regressionstesta, refaktorera, bygg ut, regressionstesta

3 (8) 5. Vilken av satserna a - d ger ett kompileringsfel? public class A { protected int x = 0; public int y = 0; public class B extends A { public void f() { x++; y = 2*x; B obj = new B(); obj.x = 100; obj.f(); System.out.print(obj.y); // a // b // c //d (10 p)

4 (8) Uppgift 2 I en av kursens laborationer arbetade vi med en enkel e-post-server. Uppgiften går ut på att lägga till en konstruktor i klassen MailServer som bygger upp en brevlådestruktur med utgångspunkt från en lista av brevobjekt. Brevens mottagarfält skall användas för att konstruera brevlådor för motsvarande användare. Brev med tomma mottagarfält skall tas bort ur listan och inte ge upphov till några brevlådor. Vi antar för enkelhets skull att mottagarfältet i ett brev bara kan innehålla en mottagare. De för uppgiften relevanta delarna av klasserna MailItem och MailServer: public class MailItem { public String getto() { public class MailServer { private HashMap<String,LinkedList<MailItem>> mailboxes; a) Skriv en metod som returnerar true om parametersträngen är ett giltigt användarnamn. En sträng är giltig om den inte är null, samt inleds och avslutas med ickevita tecken. private boolean validfield(string s) b) Skriv en metod som tar bort alla brevobjekt med ogiltigt mottagarfält från en lista av brevobjekt. Metoden skall alltså mutera listan som ges som argument. Utnyttja metoden i a. private void filteritems(list<mailitem> items) c) Skriv en konstruktor som tar en lista av brevobjekt och bygger upp en brevlådestruktur i mailboxes. Alla brev i listan som är adresserade till en viss mottagare skall läggas i dennes brevlåda i den nya strukturen. public MailServer(List<MailItem> items) (2 p) (5 p) Utnyttja metoden i b. Lösningen får ej baseras på andra metoder som finns i laborationens version av klassen. (7 p)

5 (8) Uppgift 3 a) Vilka anrop är typkorrekta och vilka är det inte? Motivera svaret! public interface A { void f(); public abstract class B { public abstract void g(); public class C implements A extends B { public void g() { public void f() { public void h() { A a = new C(); a.f(); a.g(); a.h(); B b = new C(); b.f(); b.g(); b.h(); (6 p) b) Vad skrivs ut? Motivera svaret! public abstract class Base { private int x = 0; public int f() { x++; return x + g(); public abstract int g(); public class Sub1 extends Base { private int x = 1; public int g() { x = 2*x; return x; ArrayList<Base> list = new ArrayList<Base>(); list.add(new Sub1()); list.add(new Sub2()); int i = 0; for ( Base obj : list ) i = i + obj.f(); public class Sub2 extends Base { private int y = 10; public int g() { y--; return y; System.out.println(i); (6p)

6 (8) Uppgift 4 a) Klassen Date kan användas för att representera datum. Klassen har en konstruktor public Date(int y,int m,int d) throws IllegalArgumentException samt metoderna public void setdate(int y,int m,int d) throws IllegalArgumentException public int getyear() public int getmonth() public int getday() Konstruktorn och setdate sätter ett datum och kastar IllegalArgumentException om datumet inte är korrekt, t.ex. om man anger 2011,2,29. Det skulle vara praktiskt om man också kunde ange datumet som en sträng, t.ex. 2010-12-14. Definiera därför en subklass till Date kallad EnhancedDate. Subklassen skall ha två metoder: public void setdate(string date) throws IllegalArgumentException public String tostring() Basklassen saknar ju en tostring-metod så vi gör en i subklasen istället. Följande visar några exempel på hur klassen kan användas (undantagshantering utelämnad): EnhancedDate d = new EnhancedDate(2010,12,14); System.out.println(d.getYear()); 2010 System.out.println(d.getDay()); 14 d.setdate( 2010-12-04 ); System.out.println(d); 2010-12-4 Metoden setdate i subklassen skall kasta IllegalArgumentException i följande fall: Strängen är null. Strängen innehåller ej tre siffergrupper, t.ex. 2010-12. En eller flera siffergrupper innehåller otillåtna tecken, t.ex. 2010-xx-@#!. Datumet är rätt formaterat men inkorrekt, t.ex. 2011,2,29. Exempel på tillåtna datumsträngar: 1987-3-22, 2013-03-04. I tostring behöver du inte stoppa in inledande nollor framför ensiffriga tal. Subklassen får ej ha några egna instans- eller klassvariabler. Tips: utnyttja lämpliga metoder i strängklassen och Integer för att analysera strängen (se bilagan). (6 p)

7 (8) b) En multimängd är en oordnad samling som, till skillnad från en vanlig mängd, kan innehålla flera förekomster av varje element. Ex. {1,2,3,1,5,2,7,1,22,-8. Följande gränssnitt beskriver en sådan mängdtyp i Java för heltalselement: public interface MultiSet { void add(int x); // add x to this set boolean contains(int x); // true if this set contains x, false ow int count(int x); // return the number of occurrences // of x in this set Multimängder kan implementeras på olika sätt. Välj själv mellan att använda en map, eller en lista. Kalla din klass MapMultiSet eller ListMultiSet beroende på vilken lagringsform du använder. Man skall t.ex. kunna använda klassen så här: MultiSet ms = new ListMultiSet(); // eller MapMultiSet() ms.add(2); ms.add(5); ms.add(2); ms.add(7); ms.add(5); ms.add(2); ms.count(5); 2 ms.count(7); 1 ms.count(2); 3 ms.contains(5); true ms.contains(4); false (6 p)

8 (8) Uppgift 5 Ett rationellt tal q p representerar en kvot mellan två heltal p och q, t.ex. 1/2, 3/4, 5/6, -1/7, 12/9. p r pr p r ps + qr Några lagar: =, + =. q s qs q s qs Två rationella tal p r q och är lika om och endast om s ps = qr. Man kan representera ett rationellt tal som ett objekt. Klassen Rational innehåller några metoder för att manipulera rationella tal. public final class Rational { private int p,q; public Rational(int p,int q) { this.p = p; this.q = q; public int getdenominator() { return p; public int getnumerator() { return q; public Rational plus(rational other) { return new Rational(p*other.q+q*other.p,q*other.q); public Rational mult(rational other) { return new Rational(p*other.p,q*other.q); a) Lägg till metoden public boolean equals(object other) till Rational. Om objekten a och b båda är av typen Rational så skall a.equals(b) returnera true om de rationella talen som a och b representerar är lika enligt lagen ovan, annars skall equals returnera false. (7 p) b) Lägg till metoden public int hashcode() till Rational. (5 p)