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

Relevanta dokument
Lösningsförslag till 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.

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

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.

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

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

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

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

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: Objektorienterad programutveckling, fk. Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad.

1 Egna klasser. 1.1 En punkt-klass

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

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

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

Objektsamlingar i Java

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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.

Lösningsförslag till tentamen

Det finns en referensbok (Java) hos vakten 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. Objektorienterade applikationer CHALMERS. 2018/2019, lp 3 DAT055. Uno Holmer

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

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

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

Grundläggande programmering med C# 7,5 högskolepoäng

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

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

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

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

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

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

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

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

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

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

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

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Att skriva till och läsa från terminalfönstret

Tentamen Programmering fortsättningskurs DIT950

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

DAT043 Objektorienterad Programmering

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

Föreläsning 5-6 Innehåll

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

Objektorienterad programmering D2

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

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

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

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

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

TDDD78 Viktiga begrepp, del 2

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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.

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

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

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

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

Tentamen i Programmeringsteknik I

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Tentamen OOP

TENTAMEN OOP

tentaplugg.nu av studenter för studenter

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

Del A (obligatorisk för alla)

TENTAMEN OOP

Tentamen. Lösningsförslag

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

Objektorienterad Programmering (TDDC77)

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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 till tentamen för TDA540 Objektorienterad Programmering

Repetition av OOP- och Javabegrepp

Objektorienterad Programkonstruktion. Föreläsning jan 2016

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

PROGRAMMERINGSTEKNIK TIN212

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! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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.

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.

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Instuderingsuppgifter läsvecka 2

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

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Kopiering av objekt i Java

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. Skriv inte i tesen. Ordna bladen i uppgiftsordning. Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem). Skriv inte med rödpenna! 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 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 metoder 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 delfrågorna 1.1-1.5 på ett blad. 1. Vilket påstående är falskt? a. testning kan påvisa förekomsten av fel i ett program b. avlusning kan avslöja orsaken till fel i ett program c. testning och avlusning är samma sak d. regresionstestning bör utföras efter refaktorering 2. Antag att man vill införa metoden equals i klassen Point. Eftersom det av numeriska skäl inte är lämpligt att jämföra om två flyttal är lika med operatorn == kan man tänka sig att istället definiera likhetsrelationen så att två punkter betraktas som lika om de är tillräckligt nära varandra. public class Point { private double x,y; public double distanceto(point other)... public boolean equals(...) {... return distanceto(other) < 0.00000001; Vilket av påståendena är sant? a. likhetsrelationen blir reflexiv, symmetrisk och transitiv b. likhetsrelationen blir inte symmetrisk c. likhetsrelationen blir inte transitiv d. likhetsrelationen blir inte reflexiv 3. Studera följande klasser: public class Base { private int x; private String s; public Object clone() { Base temp = new Base(); temp.x = x; temp.s = s; return temp; // Other details omitted Vad händer då main exekveras? a. inget oväntat eftersom koden så långt man kan se är korrekt b. ett NullPointerException kastas c. ett ClassCastException kastas d. ett CloneNotSupportedException kastas e. minnet tar slut public class Sub extends Base { // Details omitted public class Main { public static void main(string[] arg) { Sub obj = new Sub(); Sub b = (Sub)obj.clone();

3 (8) 4. I ett bokningsprogram för entimmesmöten finns följande klasser: public class Booking { private String what; private String where; private String who; public Booking(String what,string where,string who) { this.what = what; this.where = where; this.who = who; public void printinfo() { System.out.println(what + "," + where + "," + who); public class Calendar { private Booking[] bookings = new Booking[24]; public void schedule(int hour,string what,string where,string who) { bookings[hour] = new Booking(what,where,who); public void printday() { for ( int h = 0; h < 24; h++ ) { System.out.print(h + "-" + (h+1) + ": "); bookings[h].printinfo(); public class CalendarMain { public static void main(string[] arg) { Calendar c = new Calendar(); c.schedule(0,"nattdugga","j123","uh"); c.schedule(8,"morgontenta","sv219","nn"); c.schedule(15,"fika","lunchrummet","bg"); c.printday(); Vad är sant? a. koden kompilerar inte p.g.a. ett typfel b. namnet Calendar får inte användas eftersom en standardklass i Java API heter så c. ett NullPointerException kastas då main exekveras. d. fält (arrayer) kan bara lagra primitiva datatyper, inte objekt e. programmet producerar en komplett utskrift för hela dygnet 5. Vilken/vilka av satserna S1 S4 ger kompileringsfel? a. S1 och S3 b. S2 och S4 c. S3 och S4 d. S3 e. S1 f. alla utom S1 public class C { private int x; private static int y; public static void f(c obj) { x = 3; // S1 y = 42; // S2 obj.x = 3; // S3 obj.y = 42; // S4 (10 p)

4 (8) Uppgift 2 Klassen Point kan användas för att representera punkter i 2D-planet. public class Point { private int x,y; private long modcount = 0; public Point(int x,int y) { this.x = x; this.y = y; public int getx() { return x; public int gety() { return y; public long getmodcount() { return modcount; public void setx(int x) { this.x = x; modcount++; public void sety(int y) { this.y = y; modcount++;... // ToDo Ex. Point p = new Point(11,32); p.setx(7); p.sety(9); p.getmodcount() -> 2 Variabeln modcount håller reda på hur många gånger objektet modifierats. Den skall vara 0 för alla nya objekt. a) Lägg till metoden equals till Point. Två punkter är lika om deras x- resp. y-koordinater är parvis lika. (4 p) b) Lägg till metoden hashcode i Point. (2 p) c) Lägg till metoden clone i Point. d) I klassen Polygon lagras hörnpunkterna för en polygon som objekt av typen Point. Vi går inte in i detalj på denna klass utan visar bara en mindre del. Uppgiften är att införa en clone-metod i klassen: public class Polygon { private ArrayList<Point> points = new ArrayList<>(); public void add(point p) { points.add(p);... // ToDo: clone // Other methods omitted (5 p)

5 (8) Uppgift 3 Begreppet implementationsarv innebär att en klass ärver tillstånd (instansvariabler) och metoder från en annan klass, och detta är ju en typ av arv som har behandlats i kursen. Vi kan t.ex. deklarera en klass Person för personuppgifter, som den nedan, och senare göra specialiserade subklasser till Person för att t.ex. laga information om studenter, anställda och idrotsutövare. public class Person { private String CID; private String name; private String address; private String phone; private String email; public Person(String CID,String name,string address, String phone,string email) { this.cid = CID; this.name = name; this.address = address; this.phone = phone; this.email = email; public void setaddress(string newaddress) { address = newaddress; // other methods omitted Subklassen Student skall ha instansvariabler för program (sträng), antagningsår (heltal) samt uppnådda poäng (heltal). Subklassen Employee skall ha instansvariabler för lön (heltal) och antal semesterdagar (heltal). Subklassen Athlete skall ha instansvariabler för kroppslängd (heltal) och vikt (heltal). a) Konstruera en av subklasserna Student, Employee eller Athlete. Välj själv vilken! b) Skriv en main-metod som skapar ett objekt vardera av klasserna Student, Employee och Athlete. Använd data från tabellen nedan: För Student: "123456-7890","Bob","Postgatan 20","0123-4567890","bob@mail.org","D",2016,85 För Employee: "123456-7890","Bob","Postgatan 20","0123-4567890","bob@mail.org",45000,35 För Athlete: "123456-7890","Bob","Postgatan 20","0123-4567890","bob@mail.org",168,74 Avsluta main-metoden med att ändra adress för Bob som just flyttat, hans nya adress skall vara Telefongränd 7. c) Som du säkert lagt märke till leder användning av implementationsarv i exemplet ovan till kodduplicering vilket inte är önskvärt. Ett alternativt till arv är att låta klasserna Student, Employee och Athlete delegera personuppgiftshanteringen till klassen Person istället för att ärva från klassen: forts.

6 (8) Skriv om din klass i a) så att den istället för att ärva från Person delegerar till ett Personobjekt som skall vara inparameter till klassens konstruktor. d) Skriv om main-metoden i b baserat på resultatet i c. Uppgift 4 a) Studera klasserna nedan: public class Base { public int f(int x,int y) { return g(x+y); public int f(int x) { return x + 42; public int g(int x) { return 3*f(x); public int h(int x) { return 4*f(x-1); public class Sub extends Base { public int f(int x) { return x + 11; public int g(int x) { return 2*h(x); Vilket värde returnerar f? Motivera svaret! Base obj = new Sub(); obj.f(2,3); b) Ett av metodanropen i main kompilerar inte eftersom en av klasserna (ej Main) ger kompileringsfel, vilken klass och varför? Vad skrivs ut av de övriga anropen i main? (5 p) public class Main { public static void func(a obj) { try { obj.f(); catch (E3 e) { System.out.println("func catch E3:"+e.getMessage()); catch (E2 e) { System.out.println("func catch E2:"+e.getMessage()); public static void main(string[] arg) { func(new A()); func(new B()); func(new C()); public class A { public void f() throws E2,E3 { throw new E2("A.f throwed E2"); public class E1 extends Exception { public E1(String msg) { super(msg); public class E2 extends E1 { public E2(String msg) { super(msg); public class E3 extends E2 { public E3(String msg) { super(msg); public class B extends A { public void f() throws E2 { throw new E3("B.f throwed E3"); public class C extends B { public void f() throws E1 { throw new E1("C.f throwed E1"); (5 p)

7 (8) Uppgift 5 I denna uppgift ingår att konstruera delar till ett mycket enkelt program för hantering av labredovisningar - liknande Fire-systemet som används i denna kurs. Det finns två färdiga klasser ( {... betyder att metoden är färdig): * Submission Objects of this class stores information * about lab submissions. public class Submission { public Submission(int labno,string content,string grader) {... public int getlabno() {... public String getcontent() {... public String getgrader() {... public String getcomment() {... public String getstatus() {... public void setcomment(string comment) {... public void setgrader(string grader) {... public void setstatus(submissionstatus status) {... Anm. Metoden getstatus returnerar ett av följande tre värden: PENDING, REJECTED eller ACCEPTED. * GroupAccount Stores account credentials and submissions for a student. public class GroupAccount implements Iterable<Submission> { public GroupAccount(int groupid,string email,string password, int nooflaborations) {... public void submit(submission s) throws DuplicateSubmissionException { public int getgroupid() {... public String getemail() {... public void setemail(string email) {... public String getpassword() {... public void setpassword(string password) {... public Iterator<Submission> iterator() {... Iteratorn som retureras av metoden iterator genomlöper inlämningarna i nummerordning. Iteratorns next metod returnerar nästa inlämning i nummerordning om den finns, annars null. Ex. Om man postat lab 1 och lab 3 av fyra så kommer next att returnera lab1, null, lab3 och till sist null. Konstruera klassen Fire med hjälp av ovanstående klasser. public class Fire { public Fire(int nooflaborations) // ToDo * signup Create an account for a given user and password. * @param email The user's e-mail address. * @param password The password to the account. * @return A unique group number identifying the new account but * -1 if an account using the given e-mail address * already exists. public int signup(string email,string password) // ToDo forts.

8 (8) * submit Submit a lab report to this Fire instance. * @param groupid The id of the group submitting the lab. * @param labno A positive integer identifying the lab. * @param content The actual submission. * @return A string identifying the grading teacher. * @throws UnknownAccountException if groupid is invalid. * @throws DuplicateSubmissionException if a submission for labno * already exists. * @throws IllegalLaborationNoException if labno is not a legal * laboration id. public String submit(int groupid,int labno,string content) // ToDo throws UnknownAccountException, DuplicateSubmissionException, IllegalLaborationNoException * printresulttable Print a status report for all groups. * Unsubmitted labs are marked with a "-". * Submitted labs are marked as PENDING, REJECTED or ACCEPTED public void printresulttable() // ToDo Undantagsklasserna UnknownAccountException, DuplicateSubmissionException, IllegalLaborationNoException är alla subklasser till Exception och de är färdiga. Lagra informationen i en map. Resultattabellen som skrivs ut av printresulttable skall se ut enligt följande men den exakta formatteringen av raderna är mindre viktig, labgruppnumret längst till vänster. I exemplet har kursen tre laborationer och tre registrerade labgrupper: 1 ACCEPTED REJECTED PENDING 2 REJECTED PENDING - 3 - ACCEPTED REJECTED (14 p)