LÖSNINGSFÖRSLAG TILL TENTAMEN PROGRAMMERINGSMETODIK MOM2 - JAVA, 4P.

Relevanta dokument
TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

L SNINGSF RSLAG TILL TENTAMEN PROGRAMMERING I JAVA, 5P

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

Objektorienterad programmering i Java

Konstruktion av klasser med klasser

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

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

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

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

TENTAMEN I DATAVETENSKAP

JAVA Mer om klasser och objektorientering

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.

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

OOP Objekt-orienterad programmering

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

Klasshierarkier - repetition

Språkkonventioner och redigering av tal.

TENTAMEN OOP

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

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

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Tentamen. Lösningsförslag

TENTAMEN OOP

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

Fördjupad Java. Undantagshantering. Fel

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

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

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

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

Tentamen , Introduktion till Java, dtaa98, dtea53

TENTAMEN OOP

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

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

OOP Objekt-orienterad programmering

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

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Föreläsnings 9 - Exceptions, I/O

Tentamen OOP

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 Programmering (TDDC77)

Lösningar för tenta 2 DAT043,

OOP Tentamen

Laboration 1 - Grunderna för OOP i Java

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

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

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

List.java. List.java. Printed by Tom Smedsaas

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

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.

Föreläsning 13 Innehåll

Kap J 7-1 Mer om arv. (superklass) (subklass)

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

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

Generisk klass med typparameter Inre klass - ListIterator

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

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

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

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

OOP Tenta

Dugga i Grundläggande programmering STS, åk

LÖSNINGSFÖRSLAG TENTAMEN

Föreläsning REPETITION & EXTENTA

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

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

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

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

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

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)

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

Föreläsning 3-4 Innehåll

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

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

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

OOP Objekt-orienterad programmering

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

public boolean containskey(string key) { return search(key, head)!= null; }

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Föreläsning 5-6 Innehåll

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Objektorienterad programmering D2

Tentamen FYTA11 Javaprogrammering

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

1 Comparator & Comparable

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Arv. Objektorienterad och komponentbaserad programmering

Transkript:

Uppgift 1 (2 poäng) Utgå från följande klassdefinition : public class TempKlass public String uttext; public static int svar; LÖSNINGSFÖRSLAG TILL TENTAMEN PROGRAMMERINGSMETODIK MOM2 - JAVA, 4P. 991122 public TempKlass(String uttext, int svar) this.uttext = uttext; this.svar = svar; //constructor TempKlass // class TempKlass Vad skrivs ut när följande applikation exekveras? public class MainKlass public static void main(string[] args) TempKlass gaia = new TempKlass("Vad blir 6*9? ",54); TempKlass terra = new TempKlass("Vad blir 6*7? ",42); System.out.println(gaia.utText+" "+gaia.svar); System.out.println(terra.utText+" "+terra.svar); // main // class MainKlass Attributet svar är deklarerad static vilket innebär att den delas av samtliga objekt av denna klass. TempKlass gaia = new TempKlass ("Vad blir 6*9? ",54); sätter svar till 54 och TempKlass terra = new TempKlass("Vad blir 6*7? ",42); 1(9)

sätter svar till 42. Eftersom svar delas av alla objekt ( här gaia och terra) så ger båda utskrifterna naturligtvis 42. Uppgift 2 (2+1=3 poäng) I din konstruktor till en Bil-klass står det public Bil super(); a) Vad betyder satsen super() i detta sammanhang? Kan den förekomma någon annanstans i konstruktorn och i så fall var? super() betyder att en konstruktor i superklassen anropas, om detta skall ske måste denna sats komma först i konstruktorn. b) Lite längre ner i klassen står följande:.. super.ritaut();.. Vad innebär denna sats? Här anropas ritaut i superklassen, super behövs eg. bara om den aktuella klassen har en egen metod ritaut. Uppgift 3 (3 poäng) Man brukar tala om objektorienteringens tre grundprinciper, vilka är de? Förklara varje princip kortfattat. Objektorienteringens tre huvudprinciper: Arv en form av specialisering, en klass ärver attribut och egenskaper av en basklass och lägger till egna. Operationer tillåtna på objekt av basklassen är också tillåtna på objekt av någon sub-klass. Inkapsling Data i ett klass skyddas från okontrollerad åtkomst av andra klasser. Endast klassens egna metoder har direkt tillgång till attributen. Polymorfism kallas ibland dynamisk bindning, betyder att objektets typ (och inte referensens) avgör vilken metod som skall anropas. Ett exempel är omdefinierade metoder i klasshierarkier där samma metodnamn förekommer på olika nivåer. Uppgift 4 (3 poäng) I UML(Unified Modelling Language) finns tre typer av relationer mellan klasser. Beskriv kortfattat varje relationstyp och hur den implementeras i Java. 2(9)

UML:s tre typer av relationer mellan klasser: Arv - beskriver ett är en -förhållande, dvs ett objekt av en subklass är också ett objekt av basklassen, t.ex. en bil är ett fordon. Implementeras i Java med arv (extends). Association en förbindelse mellan två klasser som är tillfällig i tiden och som kan ändras, ett känner till -förhållande, exvis en passagerare känner till sin biljett men har den inte för evigt. Implementeras i Java med referenser. Aggregat en förbindelse mellan två klasser som är beständig. En klass består av en eller flera andra klasser, t.ex. en våning är en del av ett hus. Implementeras i Java med referenser. Uppgift 5 (2+4=6 poäng) Följande program läser in ett antal heltal och beräknar medelvärdet av dessa. Som programmet ser ut nu kan det uppstå s.k. undantag (exceptions) på två ställen. a) Ange vid vilka tillfällen och var i koden undantagen kan uppstå. Tre typer av undantag kan faktiskt uppstå, dels IOException som måste tas om hand (därav throws i main-satsen), dels ArithmeticException och NumberFormatException som kan ignoreras (men uppstår undantaget så avslutas programmet). IOException kan kastas av metoden readline i klassen BufferedReader, om det blir något fel vid inläsningen (normalt händer detta med filer som saknas osv.). NumberFormatException kastas av Integer.parseInt om argumentet inte går att konvertera till ett heltal. ArithmeticException kastas vid olika aritmetiska fel, exempelvis division med noll. b) Modifiera koden så att undantagen hanteras på lämpligt sätt. Många tänkbara lösningar finns till denna deluppgift, här visas en enkel lösning som inte försöker rädda situationen vid inmatningsfel utan avslutar programmet med ett felmeddelande. import java.io.*; public class Uppgift5 //=========================================================== // Läser ett antal heltal från användaren, summerar dem och // beräknar medelvärdet. 3(9)

//=========================================================== public static void main (String[] args) throws IOException try BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in)); System.out.println("Ge ett heltal, avsluta med 0 : "); int tal = Integer.parseInt (stdin.readline()); int antal = 0; double summa = 0.0; while (tal!= 0) antal = antal + 1; summa = summa + tal; System.out.println("Ge ett tal, avsluta med 0 : "); tal = Integer.parseInt (stdin.readline()); System.out.println ("Medelvärde : "); try System.out.println (summa/antal); catch (ArithmeticException ex) System.out.println ("Medelvärde kan ej beräknas"); catch (IOException ex) System.out.println("Något fel har uppstått med Stdin"); catch (NumberFormatException ex) System.out.println("Du måste mata in ett heltal!"); // method main // class Uppgift5 Uppgift 6 (2+2+1=5 poäng) Fakultet beräknas som en följd av multiplikationer t.ex. 5! = 5 4 3 2 1 För ett godtyckligt naturligt tal n definieras n!=n (n-1) 1 Detta kan formellt formuleras på följande sätt : 4(9)

n! = 1 n = 0 n (n 1)! n > 0 a) Implementera en rekursiv metod som returnerar n!, där n ges som parameter. public static int rfac(int n) if (n == 0 n == 1) return 1; else return n*rfac(n-1); //rfac b) Implementera n! med en iterativ metod. public static int ifac(int n) int nfac = 1; for (int i = 1; i<=n; i++) nfac = i*nfac; return nfac; //ifac c) Beskriv för- och nackdelarna med en rekursiv metod jämfört med en iterativ. Uppgift 7 (2+3=5 poäng) a) Skriv en klass Bok som innehåller attributen titel, sidantal och publiceringsår. Ett objekt av klassen Bok skall kunna skapas på två sätt: Bok b = new Bok(); skall ge en bok med 194 sidor, titel Programming Pearls och publiceringsår 1989. Bok b = new Bok( Things That Make Us Smart, 290, 1993); skall ge en bok med angiven titel, sidantal och publiceringsår. Det skall också finnas en metod public void skrivut() som skriver ut all information om boken. b) Skriv en subklass till Bok som heter Roman. Klassen skall innehålla ett nytt attribut, boolean lyckligtslut. Skriv två konstruktorer till denna klass på samma sätt som för Bok. Överlagra metoden skrivut så att rätt metod anropas i följande satser: 5(9)

Bok b1 = new Bok(); Bok b2 = new Roman("Tre män I en båt", 311, 1978, true); b1.skrivut(); b2.skrivut(); // skall skriva ut info om en Bok // skall skriva ut info om en Roman Förslag till lösning som maximerar utnyttjandet av redan skriven kod: import java.io.*; class Uppgift7 public static void main(string args[]) Bok b1 = new Bok(); Bok b2 = new Roman("Tre män i en båt", 311, 1978, true); b1.skrivut(); b2.skrivut(); class Bok private String titel; private int sidantal; private int publår; // Konstruktor för klassen Bok public Bok(String titel, int sidantal, int publår) this.titel = titel; this.sidantal = sidantal; this.publår = publår; // Defaultkonstruktor, utnyttjar den andra konstruktorn public Bok() this("programming Pearls", 194, 1989); // Utskrift av attributen public void skrivut() System.out.println("Titel = " + titel); System.out.println("Sidantal = " + sidantal); System.out.println("Publiceringsår = " + publår); class Roman extends Bok private boolean lyckligtslut; 6(9)

// Konstruktor för klassen Roman, utnyttjar basklassens konstruktor public Roman(String titel, int sidantal, int publår, boolean lyckligtslut) super(titel, sidantal, publår); this.lyckligtslut = lyckligtslut; // Deafultkonstruktor, obs i uppgiften gavs inte någon titel för default-roman -> valfri public Roman() this("ronja Rövardotter", 236, 1981, true); // Skriv ut en roman, utnyttjar så mycket som möjligt av redan skriven kod public void skrivut() super.skrivut(); if (lyckligtslut) System.out.println("Lyckligt Slut!"); Uppgift 8 (1+1+1+2+2+2+2+2=13 poäng) a) public Object getfirst() // returnerar det första objektet i listan. return head.getvalue(); // method getfirst b) public Object getlast() // returnerar det sista objektet i listan. return tail.getvalue(); // method getlast c) public int getlength() // returnerar antalet element i listan. return length; // method getlength d) public void appendel(object el) //lägger till ett element sist i listan if (getlength() == 0) head = new ListNode(el); tail = head; 7(9)

else tail.next = new ListNode(el); tail = tail.next; length++; // method appendel e) public Object atindex(int index) //returnerar objektet med det angivna indexet. ListNode temp = head; for (int i = 1; i <= index; i++) temp = temp.getnext(); return temp.getvalue(); // method atindex f) public void insertat(object el,int index) //skjuter in elementet på angiven plats i listan och utökar därmed listan. if ( index <= 1 ) // Insert as first element of the list head = new ListNode(el, head); length++; else if ( index >= getlength()) // Insert as last element of the list appendel(el); else ListNode before = head; for (int i = 1; i < index-1; i++) before = before.getnext(); //Now before is positioned at index-1 ListNode after = before.getnext(); before.next = new ListNode(el, after); length++; // method insertat 8(9)

g) public Object[] toarray() //går igenom listan och returnerar ett fält av Object med motsvarande innehåll. Object[] temparray = new Object[getLength()]; ListNode temp = head; for (int i = 1; i <= length; i++) temparray[i-1] = temp.getvalue(); temp = temp.getnext(); return temparray; // method toarray h) Visa med en figur vad som händer i följande kodavsnitt ListNode head = null; int n = 5; head for (; n>=0; n--) head = new ListNode(new Integer(n),head); head n=5 5 head n=4 4 5 head n=0 0 1 2 3 4 5 9(9)