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

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

Lösningsförslag till tentamen

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

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. 2012/2013, lp 1 DAT042. Uno Holmer. Java API (utdelas av skrivningsvakten) Erland Holmström tel besöker tentamen

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.

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

Svaret kan ges i Javakod (eller i UML-klassdiagram). public class A { B minb;... } public class B { <B:s många variabler och metoder> } Lösning:

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

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

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

TENTAMEN: Algoritmer och datastrukturer. 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.

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

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!

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

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

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

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

DAI2 (TIDAL) + I2 (TKIEK)

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

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

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

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

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

DAT043 Objektorienterad Programmering

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Objektorienterad Programmering (TDDC77)

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

TENTAMEN: Algoritmer och datastrukturer. 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:

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

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

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

PROGRAMMERINGSTEKNIK TIN212

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 i Grundläggande programmering STS, åk 1 fredag

Tentamen, EDAA10 Programmering i Java

Tentamen, EDA501 Programmering M L TM W K V

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

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

TENTAMEN OOP

Objektorienterad programmering D2

Tentamen i Grundläggande programmering STS, åk

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

TDDD78 Viktiga begrepp, del 2

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

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

DAT043 - Föreläsning 7

Classes och Interfaces, Objects och References, Initialization

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Lösningsförslag till tentamen

TENTAMEN OOP

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

LÖSNINGSFÖRSLAG

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

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

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

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

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

Föreläsning 13 Innehåll

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, 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

Tentamen i Programmeringsteknik I

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

Exempel på användning av arv: Geometriska figurer

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

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, DD1346. Tentamen , kl

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

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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

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 inga lösningar i tesen!). Numrera och 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) och vara indenterad och renskriven. Du behöver ej skriva importdeklarationer. 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 (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. Givet klassen Num public class Num { private int x; public Num() { x = 0; public void set( int x ) { this.x = x; public int get() { return x; vad skriver kodavsnittet nedan ut? ArrayList<Num> list = new ArrayList<Num>(); Num n = new Num(); for ( int j = 0; j < 3; j++ ) list.add( n ); int k = 1; for ( Num x : list ) x.set( k++ ); for ( Num x : list ) System.out.println( x.get() ); a. 0 0 0 b. 3 3 3 c. 1 2 3 2. Vilket påstående är korrekt om följande Javaklass? public class C { private int x = 123; private static int y = 456; ; public void f() { public static void g() { a. f får anropa g och ändra x och y b. g får anropa f och ändra x och y c. g får ändra x d. g får läsa av men ej ändra x e. g får anropa f 3. Om A är basklass till B och B basklass till C och variablerna a, b och c har typerna A, B resp. C, vilken tilldelning är då tillåten i Java? a. b = a; b. c = b; c. b = c; d. c = a;

3 (9) 4. En klass som präglas av hög kohesion a. har många abstrakta metoder b. har inga abstrakta metoder c. kan ha många olika ansvarsområden d. har ett väl avgränsat ansvarsområde 5. En av deklarationerna ger ett typfel, vilken? a. ArrayList<LinkedList> l = new ArrayList<LinkedList>(); b. List<LinkedList> l2 = new ArrayList<LinkedList>(); c. ArrayList<List> l = new ArrayList<List>(); d. List<LinkedList> l = new ArrayList<List>(); e. List<List> l = new ArrayList<List>(); (10 p) Uppgift 2 En N-knapp minns hur många gånger den tryckts ned. Vid varje knapptryckning anropas metoden act() i ett objekt av typen Actor: public interface Actor { void act(); Efter N nedtryckningar inaktiverar knappen sig själv. I knappen visas antalet möjliga återstående tryckningar som leder till anrop av act. Efter sista tryckningen visas en -- -sträng i den inaktiverade knappen. Nedan visas hur en 3-knapp förändras vid tre nedtryckningar. (OBS! Det är inte tre olika knappar.) act() act() act() :SomeActor Definiera klassen CounterButton med arv från lämplig Swing-klass. Låt klassen vara sin egen lyssnare. Om klassen SomeActor implementerar gränssnittet ovan skall man t.ex. kunna skapa 3-knappen ovan så här new CounterButton(3,new SomeActor()); (10 p)

4 (9) Uppgift 3 a) Vad skrivs ut av följande metodanrop? Motivera! Base obj = new Sub(); obj.f1(); // 1. obj.f2(); // 2. obj.f3(); // 3. Sub obj2 = new Sub(); obj2.f1(); // 4. obj2.f2(); // 5. obj2.f3(); // 6. obj2.f4(); // 7. public class Base { public void f1() { System.out.print("Base.f1"); public void f2() { System.out.print("Base.f2"); public void f3() { System.out.print("Base.f3"); public class Sub extends Base { public void f1() { System.out.print("Sub.f1"); public void f2() { super.f2();system.out.print("++sub.f2"); public void f4() { System.out.print("Sub.f4"); b) Vilka av raderna 1-4 är tillåtna och vilka ger kompileringsfel? En av klasserna går ej att kompilera, vilken? Motivera svaren! Int obj1 = new Int(); // 1 Base obj2 = new Base(); // 2 Sub1 obj3 = new Sub1(); // 3 Sub2 obj4 = new Sub2(); // 4 public interface Int { public void h(); public abstract class Base implements Int { public abstract void f(); public void g() { public class Sub1 extends Base { public void f() { (5 p) public class Sub2 implements Int { public void h() { (5 p)

5 (9) Uppgift 4 a) Antag att man vill definiera en klass Point för punkter i planet public class Point { public static final double tolerance = 0.001; private double x; private double y; samt överskugga metoden equals så att två punkter betraktas som lika om avståndet mellan dem inte överstiger tolerance. Är det lämpligt att definiera likhet på detta sätt? Motivera i så fall varför, eller visa med ett motexempel en situation där equals skulle ge ett icke önskvärt resultat. (2 p) b) En tidningsdistributör har ett prenumerantregister med person- och adressuppgifter enligt nedan. public class Prenumerant { private String name; private String phone; private String address; Definiera en equals-metod i Prenumerant så att två prenumerantobjekt är lika om namnen är lika och personerna bor på samma adress. Metoden skall definieras så att den inte kan överskuggas vid eventuellt arv från Prenumerant. För full poäng krävs att metoden kan hantera parametrar av godtycklig typ samt null-värden. (4 p) c) Definiera metoden hashcode i Prenumerant på lämpligt sätt. (2 p)

6 (9) Uppgift 5 Antag att man har tillgång till följande klasser för att representera geometriska figurer cd: Graphical objects << interface >> Shape +getwidth():double +getlength():double +getarea():double +draw():void +erase():void +move(dx:double,dy:double):void +resize(factor:double):void The Shape's position << abstract >> Point #x:double #y:double -width:double -height:double Rectangle +getwidth():double +getlength():double +getarea():double +draw():void +erase():void +move(dx:double,dy:double):void +resize(factor:double):void -xradius:double -yradius:double Ellipse +getwidth():double +getlength():double +getarea():double +draw():void +erase():void +move(dx:double,dy:double):void +resize(factor:double):void Klasserna är givna och får inte ändras. Antag att man vill kunna addera en tredje dimension till rektangel- och ellipsobjekt så att de får en volym. De skall alltså även ha en höjd. Inför klassen Volume. Klassen skall bl.a. ha metoden public double getvolume() Visa hur designmönstret Decorator kan användas för att lösa problemet, utan att ärva från rektangel- eller ellipsklassen. a) Komplettera klassdiagrammet med klassen Volume, samt visa vilka instansvariabler och metoder klassen skall ha. Visa dessutom hur den är relaterad till andra klasser i diagrammet. Det räcker om de befintliga klasserna anges med namn i det nya diagrammet. (3 p) b) Implementera klassen Volume i Java. (6 p) c) Ge ett kodexempel som skapar en kub och skriver ut dess volym. (1 p)

7 (9) Uppgift 6 Vid en viss högskola används följande metod för att kommunicera tentamensresultat till studenterna. En databas innehåller information om studenternas personnummer (cid), namn, adressinformation, registrerade kurser, samt uppnådda poäng. Databasen läses sekventiellt via en objektström. sresultat rapporteras i textfiler, en per tentamen, av den rättande läraren. Varje rad i en sådan fil består av tre kommaseparerade fält med personnummer, skrivningspoäng, samt betyg. Till exempel DAT041.txt från augustitentan 2039 871293-3625,39,4 851923-6529,51,5 860342-8732,27,3 Uppgiften är att konstruera delar av ett program som från en sådan databas och en resultatfil producerar e-brev till de på kursen registrerade studenter som skrivit tentan. Om studenterna som gick upp på tentan ovan var Namn Personnummer E-postadress Registrerade kurser Bosse Lindspjut 871293-3625 bosse@student.chapman.se LET123, DAT041 Lena Ladok 851923-6529 ladokl@student.chapman.se DAT050, DAT055 Katrin Borin 860342-8732 katrin@student.chapman.se DAT041 så skall följande två e-brev skickas To: bosse@student.chapman.se Subject: Exam result DAT041 Hello Bosse Lindspjut! Your marks: 39, grade: 4 To: katrin@student.chapman.se Subject: Exam result DAT041 Hello Katrin Borin! Your marks: 27, grade: 3 Lena Ladok var ju inte registrerad på kursen och får därför, i väntan på utredning, inget brev. Följande färdiga klasser finns: public class ContactInformation implements Serializable { private String street; private String areacode; private String city; private String email; public ContactInformation(String street,string aareacode, String city,string email) { this.street = street; this.areacode = areacode; this.city = city; this.email = email; public String getstreet() { return street; public void setstreet(string newstreet) { street = newstreet; public String getcode() { return areacode; public void setcode(string newcode) { areacode = newcode; public String getcity() { return city; public void setcity(string newcity) { city = newcity; public String getemail() { return email; public void setemail(string newemail) { email = newemail;

8 (9) public class StudentRecord implements Serializable { private String cid; private String name; private ContactInformation contact; private Set<String> courseregistrations; private int credits; public StudentRecord(String cid,string name,contactinformation contact) { this.cid = cid; this.name = name; this.contact = contact; courseregistrations = new HashSet<String>(); credits = 0; public String getcid() { return cid; public String getname() { return name; public void addcourseregistration(string code) { courseregistrations.add(code); public boolean isregistred(string code) { return courseregistrations.contains(code); public void setcontact(contactinformation contact) { this.contact = contact; public ContactInformation getcontact() { return contact; public void setcredits(int credits) { this.credits = credits; public class ExamGrade { private int marks; private String grade; public ExamGrade(int marks,string grade) { this.marks = marks; this.grade = grade; int getmarks() { return marks; String getgrade() { return grade; public class MailServer { // Singleton class public static MailServer getinstance() public void sendmail(string to,string subject,string message) Klassen ResultProcessor skall vid instansieringen analysera en databasfil och en tentamensresultatfil och sända e-post enligt ovanstående beskrivning.

9 (9) public class ResultProcessor { public ResultProcessor(String databasefilename,string resultsfilename) { private void processfiles() throws IOException { // given String getnamebase(string filename) // return the base part of filename Tips: Genom att först läsa in textfilen med tentamensresultaten till en lämplig datastruktur blir det senare enkelt att ta fram tentamensresultatet för ett visst personnummer. Använd metoden split i strängklassen (se bilaga) för att plocka ut de olika fälten i en kommaseparerad textrad, regexp kan t.ex. vara,. Detta görs lämpligen i en privat metod. Undantaget IOException bör kastas om något fält fattas. Du kan anta att det sista objektet i databasen är null, vilket kan användas för att hitta filslutet. (12 p)