Examination in. Objektorienterad programvaruutveckling IT1 TDA545 DAY: THURSDAY DATE: TIME: ROOM: M

Relevanta dokument
Examination in. Objektorienterad programvaruutveckling IT1 TDA545 DAY: THURSDAY DATE: TIME: ROOM: M

Examination in. Objektorienterad programvaruutveckling IT1 TDA545 DAY: FRIDAY DATE: TIME: ROOM: M

Examination in. Övningstenta. DAY: FRIDAY DATE: 20xx-xx-xx TIME: /13.30 ROOM: M

Examination in. PROGRAMMERINGSTEKNIK F1 TIN212 (Dugga) DAY: Monday DATE: TIME: (OBS 3 tim) ROOM: M

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

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

TENTAMEN OOP

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

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

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

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

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

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

Föreläsning 3-4 Innehåll

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

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

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

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

TENTAMEN OOP

PROGRAMMERINGSTEKNIK TIN212

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

TDDD78 Viktiga begrepp, del 2

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

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

Laboration 3, uppgift En klass för en räknare

Föreläsning 2, vecka 8: Repetition

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

Exempel på användning av arv: Geometriska figurer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

JAVA Mer om klasser och objektorientering

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

Lösningsförslag tentamen FYTA11 Java

TENTAMEN OOP

Föreläsning 3: Booleans, if, switch

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

Föreläsning 12: Exempel och problemlösning

Föreläsning 1, vecka 8: Att förbereda sig för tentan

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

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

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

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 FYTA11 Javaprogrammering

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.

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

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

Tentamen i Objektorienterad programmering

Föreläsning 13 Innehåll

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

Objektorienterad programmering i Java

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

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

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

1 Comparator & Comparable

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

Instuderingsfrågor, del D

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.

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

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

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

DAT043 Objektorienterad Programmering

OOP Objekt-orienterad programmering

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

Föreläsning 6: Metoder och fält (arrays)

Tentamen OOP

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

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

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Parallellism, återblick

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

Lösningsförslag till tentamen

Lösningsförslag till tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

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

Objektorienterad Programmering (TDDC77)

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

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

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

OOP Objekt-orienterad programmering

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

Föreläsning 1, vecka 7: Rekursion

Föreläsning 7-8 Innehåll

Tentamen i Grundläggande Programvaruutveckling, TDA548

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

Klasser och Objekt i Java. C++ använder beteckningarna datamedlem resp. medlemsfunktion. Klassdefinition. Exempel: Variabler

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

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

Tentamen, EDAA10 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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 8: Exempel och problemlösning

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

Transkript:

Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Erland Holmström Göteborg 25 okt 2012 Examination in Objektorienterad programvaruutveckling IT1 TDA545 DAY: THURSDAY DATE: 2012-10-25 TIME: 8.30-12.30 ROOM: M Responsible teacher: Erland Holmström phone 1007, home 0708-710600 Results: Are sent by mail from Ladok. Solutions: Are eventually posted on homepage. Inspection of grading: The exam can be found in our study expedition after posting of results. Time for complaints about grading are announced on homepage after the result are published or mail me and we find a time. Grade limits: CTH: 3=28p, 4=38p, 5= 48p, max 59p Aids on the exam: utanför En sida Tentamneshjälpmedel språkkonstruktioner i Java på denna får man också skriva vad man vill på de vita ytorna textrutorna. Lappen lämnas in med tentan. Observe: Start by reading through all questions so you can ask questions when I come. I usually will come after appr. 2 hours. All answers must be motivated when applicable. Write legible! Draw figures. Solutions that are difficult to read are not evaluated! Answer concisely and to the point. The advice and directions given during course must be followed. Programs should be written in Java, indent properly, use comments and so on. Start every new problem on a new sheet of paper. Good Luck!

2 Problem 1. Uppvärmning a) Testar: parameteröverföring, lämplighetsval Metoderna i följande program utgör olika (något konstlade) försök att få en metod att lämna ifrån sig två tal satta till 5 respektive 6. Vad skrivs ut? Motivera (gärna med figur)! Gradera metoderna efter hur bra dom löser uppgiften. import java.awt.*; public class UPoint { public static void m1(int i, int j) { i = 5; j = 6; public static void m2(int[] a) { a[0] = 5; a[1] = 6; public static int[] m3() { int[] p = {5,6; return p; public static Point m4() { return new Point(5,6); public static void m5(point p) { p.x = 5; p.y = 6; public static void main(string[] par) { int s = 0, t = 1; m1(s, t); System.out.println(s); int[] q = new int[]{0,1; m2(q); System.out.println(q[0]); int[] p = m3(); System.out.println(p[0]); Point pt = new Point(0,1); pt = m4(); System.out.println(pt.x); pt = new Point(0,1); m5(pt); System.out.println(pt.x); (b-e Från bokens self study questions ) b) Testar Scanner: Antag att en indataström innehåller raderna 10_ft_ 12_ft ( _ står för mellanslag och står för return) och att du läser med en Scanner som heter input. Skriv satser som tilldelar talet på första raden (10) till variablen width och talet på andra raden (12) till variabeln length. c) Vad är skillnaden mellan följande två definitioner av Comparable? interface Comparable {... public interface Comparable{...

d) Vad är skillnaden mellan följande två definitioner av metoden graterthan i interfacet Comparable? 3 boolean graterthan(comparable other); public abstract boolean graterthan(comparable other); e) Testar equals, överlagring. Antag att equals metoden är överlagrad i Circle och ColoredCircle enligt: public class Circle { private int radius; public boolean equals(object rhs) { if (rhs instanceof Circle) { return radius == (Circle)rhs.radius; else { return false; public class ColoredCircle extends Circle { private Color col; public boolean equals(object rhs) { if (rhs instanceof ColoredCircle) { return super.equals(rhs) && col.equals(coloredcircle)rhs.col; else { return false; Dvs två cirklar är lika om deras radie är lika och två färgade cirklar är lika om dom är lika som cirklar och deras färg är lika. Giver definitionerna Circle c1 = new Circle(3) Circle c2 = new ColoredCircle(3, Color.Blue); hur beräknas och vad är resultatet av uttrycken c1.equals(c2); c2.equals(c1); (10p) Glöm inte svara på kursenkäten. Exam Help lappen skall lämnas in med tentan, ni får tillbaka den med tentan igen.

4 Problem 2. Testar: enkel klass, konstruktorer, metoder, booleska villkor, kasta exceptions, synlighet, switch-satsen, logiska operatorer, fält, strängar, överlagring, equals mm Vi vill ha ett program som givet ett datum (tex 20121015 i form av ett heltal) skriver ut nästa datum på formen tomorrow is 16 oktober 2012. Om datumet som anges inte är ett riktigt datum (tex månad=13) skall en felutskrift ske. Dvs det skall se ut ungefär som % java TestaDatum Enter a date (yyyymmdd): 20121231 tomorrow is 1 january 2013 Eftersom jag vill testa era kunskaper på olika områden är uppgiften ganska styrd enligt nedan. För att underlätta för rättarna är även namnen bestämda. När du skriver en metod skall du använda de andra metoderna (om dom behövs) även om du inte skrivit dem (så läs hela uppgiften innan du börjar). Du skall inte använda klasser från Javas API i den här uppgiften. Först skall du skriva en modellklass för att hantera ett datum (Datum). Klassen skall också innehålla ett antal metoder. Samtliga är instansmetoder och skall placeras inuti klassen om inget annat sägs. a) I uppg. c behöver du en metod i klassen som avgör hur många dagar det är i en månad. Skriv metoden public int daysinmonth() som avgör hur många dagar det är i datumet som klassen representerar. Du skall använda en switch sats. Antag att månaden lagras som ett heltal. b) I förra uppgiften behövde du en metod som avgör om ett år är ett skottår. Skriv (klass-)metoden public boolean isleapyear(). Information om skottår finns nedan. För poäng får du bara använda test på likhet, logiska operatorer samt %. (samt return såklart). c) Börja nu skriva på själva klassen Datum. Metoderna ovan antas finnas i klassen nu. Du skall här bara ha med tre konstruktorer, en med ett datum som parameter och en med tre heltal för år, månad och dag och en med ett heltal på formen yyyymmdd som alla skapar ett nytt datum. Den sista skall använda / och %, för att dela upp sin parameter i år, månad och dag. Eventuella variabler som behövs skall också vara med, lagra som heltal. Du skall också skriva (och använda) metoden private boolean isdateok() throws IllegalArgumentException som kontrollerar att det lagrade datumet är ok enligt 0<=år<=3000, 1<=månad<=12 och 1<=dag<=antalet dagar i månaden. Om det inte är uppfyllt kastas en exception med lämplig text tex (för första hittade felet) enligt date not ok: year < 0 or year > 3000. d) Dags för metoden public Datum tomorrow() som skapar ett datum som representerar morgondagens datum. e) För att kunna skriva ut ett månadsnamn behöver man kunna översätta från ett månadsnummer till en sträng dvs tex månad 3 -> Mars. Skriv metoden public String monthnbr2month(). Här vill jag att du inte använder if eller switch utan ett fält för att lösa problemet. f) Skriv en equals metod som är arvs-säker. g) Det är kanske bäst att objektet själv formaterar utskriften. Eftersom man vill kunna skriva ut på flera sätt så kan vi ha en parameter till tostring enligt,

5 public String tostring(int tostringformat). Om tostringformat=0 returneras strängen på formen 18 oktober 2012, om den är 1 på formen 18/10 2012 och alla andra värden ger formen 2012 10 18 h) Det är olämpligt att skriva just tostring på det här viset med parameter, varför? Skriv en som ser ut som den bör se ut och som returnerar på formen 18 oktober 2012. Kan bägge existera samtidigt i vår klass? Motivera! i) Sista uppgiften här är att skriva en main metod som använder modellen ovan. Det skall läsa in ett heltal från användaren, skapa ett datum, samt anropa tomorrow på lämpligt sätt för att åstadkomma utskriften ovan. Utskriften skall naturligtvis ske med tostring(). Problem 3. Några fakta bra att ha: Antal dagar i månaderna: Månaderna 1, 3, 5, 7, 8, 10 och 12 har 31 dagar, 4, 6, 9 och 11 har 30 dagar och februari har 28 utom under skottår då den har 29. Skottår: År 2000 är tex ett skottår. Skottår behövs eftersom ett år egentligen är 365.242 dagar långt, inte 365. För att kompensera för detta lägger man in en extra dag, 29 februari, på de år som är jämt delbara med 4. (365*4= 1460, (1460+1)/4 = 365.25) Eftersom detta ger ett år som är 365.25 dagar så blir det inte helt rätt heller, man behöver dra bort lite. Här är de kompletta reglerna för skottår i den gregorianska kalendern: Ett år är skottår om det är jämnt delbart med 4. Sekelskiftesår (dvs delbart med 100) är dock endast skottår om det dessutom är jämnt delbart med 400. År 1800, 1900, 2100, 2200, 2300 och 2500 är alltså inte skottår, medan år 2000 och 2400 är det. Dvs - år som är delbara med 4 är skottår men - år som dessutom är delbara med 100 är det inte men - år som dessutom är delbara med 400 är det. (20p) Testar: swing, händelsehantering Vi skall också göra utskriften i förra uppgiften lite trevligare. När användaren skriver in ett datum skall du använda klassen Datum från ovan för att skriva morgondagens datum enl.figurer nedan. Använd en gridlayout, fånga exceptions vid fel (som sista inmatningen nedan) och gör en felruta. (10p)

6 Problem 4. Testar: läsa API När vi nu ändå håller på med datum så kan vi ju även titta på klassen Calendar som finns i Javas API (förkortad javadoc i slutet). Använd Calendar för att skriva ut tiden just nu på formatet 11:16:02 Thursday 25 september 2012. Observera att timmar, minuter och sekunder < 10 skall skrivas som tex 07 inte 7. Du kan anta att det finns klassmetoder tillgängliga för (se motsvarande instansmetoder i förra uppgiften för beskrivning) static String monthnbr2month(int monthnumber) static String daynbr2day(int daynumber) (6p) Problem 5. Problem 6. Testar: rekursion Skriv en rekursiv funktion public static int[] fromto(int a, int b) som givet två heltal a och b returnerar en vektor med innehåll (a, a+1, a+2,..., b). Om a>b returneras en tom vektor. Den här typen av rekursiva funktioner är ganska knöliga att skriva i Java, du behöver en wrapper. (7p) Testar: exceptions, enkla kontrollstrukturer, slumptal Uppgiften nedan gavs på en tidigare tenta: (något förkortad text här) En A/D omvandlare (Analog/Digital omvanlare) är kopplat till någon form av analog signal tex en voltmätare, och omvandlar den analoga signalen till digitala värden tex i form av en double. Antag att en A/D-omvandlare representeras med ett interface enligt /** * Skapar en AD konverterare som kastar en exception om * värdena som läses ligger utanför lower..upper. * Lower och upper ges som indata till konstruktorn.*/ public interface ADConverter { public double read() throws UnderVoltage, OverVoltage; Metoden read() läser A/D-omvandlarens värden och returnerar dem. Om värdena ligger utanför intervallet lower..upper kastas en exception, UnderVoltage eller OverVoltage. Man kan alltså bestämma mellan vilka värden man accepterar att mätvärdena skall vara vid konstruktionen av objektet. Du skall skriva.. (förra uppgiften är inte så intressant här) Antag nu att du vill provköra ditt program men utrustningen för AD-omvandlaren har inte kommit ännu. Du beslutar dig då för att simulera AD-omvandlaren dvs att skriva en klass som implementerar interfacet ovan. Metoden read skall skapa slumptal istället för att läsa den analoga signalen. Om talen är mindre än lower kastas exception UnderVoltage och om dom är större än upper kastas OverVoltage. Annars ges ett slumptal mellan lower och upper med 2 decimaler i retur. Du kan anta att lower och upper är positiva. Fastna inte i detaljer med skalningen. Skriv också klassen UnderVoltage. (6p)