Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Relevanta dokument
Tentamen LÖSNINGSFÖRSLAG

Institutionen för TENTAMEN CTH VT-14 Datavetenskap TDA550 DAG: TID: 8:30 12:30

Tentamen LÖSNINGSFÖRSLAG

Lösningsförslag till exempeltenta 2

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

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

TENTAMEN OOP

Föreläsning 3. Stack

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA550 DAG: TID: 8:30 12:30

Objektorienterad programutveckling, fk

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:

Objektorienterad programvaruutveckling, fk, TDA550. Exempeltentamen

Föreläsning 3. Stack

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

Tentamen LÖSNINGSFÖRSLAG

Konstruktion av klasser med klasser

TENTAMEN OOP

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

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

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

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

LÖSNINGSFÖRSLAG

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

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

Lösningsförslag till tentamen

Tentamen i Objektorienterad modellering och design

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

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

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

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA550 DAG: TID: 8:30 12:30

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

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

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

Klasshierarkier - repetition

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

Objektsamlingar i Java

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

Kopiering av objekt i Java

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

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

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

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

trafiksimulering Intro OU5 trafiksimulering

OOP Objekt-orienterad programmering

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

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

Lösningar till tentamen i EDAF25

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.

DAT043 - föreläsning 8

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

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

F4. programmeringsteknik och Matlab

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 i OOP, HI1027 Fredag 21 oktober 2011

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Instuderingsuppgifter läsvecka 2

Institutionen för TENTAMEN CTH HT-17 Datavetenskap TDA550

Lösningsförslag till tentamen FYTA11 Javaprogrammering

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

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

Concurrency Saker händer samtidigt. Process En instans av ett program

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA550 DAG: TID: 8:30 12:30

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

Tentamen i Objektorienterad modellering och design Helsingborg

Föreläsning 3 Innehåll

Diskutera Sortera objekt

Objektorienterad Programmering (TDDC77)

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

Länkade strukturer. (del 2)

Del A (obligatorisk för alla)

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

Kurskod D0010E Datum Skrivtid 5tim

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Datastrukturer. föreläsning 3. Stacks 1

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

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

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

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

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

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

Lösningar för tenta 2 DAT043,

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

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

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

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

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Föreläsning 9: Arv och UML

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

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

Objektorienterad Programmering (TDDC77)

Lösningar till tentamen i EDAF25

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

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

DAT043 Objektorienterad Programmering

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

Transkript:

Tentamen 101213 - LÖSNINGSFÖRSLAG Uppgift 1. a) Ger utskriften c( ) in D b) Ger utskriften true c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt. d) Ger utskriften b( ) in E e) Anrope x.b() ger kompileringsfel eftersom typen C inte har operationen b(). f) Ger exekveringsfel. Typen F kan inte typomvandlas till typen D. g) Tilldelningen D x = new C() ger kompileringfel, eftersom typen C inte är subtyp till D. h) Tilldelningen C y = x ger kompileringsfel, eftersom x är av typen A och A är ingen subtyp till C. Uppgift 2. a) Nej! En subklass får inte ha ett starkare förvillkor på en överskuggad metod än vad superklassen har. b) Ja! En subklass får ha ett starkare eftervillkor på en överskuggad metod än vad superklassen har. c) Den andra specifikationen /** @pre none @return If arr is null or empty throws IllegalArgumentException. Otherwise, the mean of the numbers in arr **/ public static double mean(int[] arr) { är att föredra, eftersom denna metod inte har några förvillkor som användaren måste uppfylla för att kunna använda metoden.

Uppgift 3. a) Satsen catch (DomsException e) kommer aldrig kan nås eftersom DomsException är en subklass till Exception och därmed fångas undantag av typen DomsException av satsen catch (Exception e) Koden skall ha följande utseende: try { throw new DomsException(); catch (DomsException e) { System.out.println("Caught Dom's exception!"); catch (Exception e) { System.out.println("Caught an exception!"); finally { System.out.println("This is the finally block!"); b) SubClass kan inte referera till privata instansvariabler i sin superklass SubClass. En korrekt lösning har följande utseende: public class SubClass extends SuperClass { private int secondvalue; public SubClass(int val, String desc, int val2) { super(val, desc); secondvalue = val2; public String tostring(){ return (super.tostring() + " & second value " + secondvalue); //tostring //SubClass

Uppgift 4. Lösning presenterad som UML-diagram: <<interface>> Clock ClockImpl <<interface>> Radio AlarmClock ClockRadio RadioImpl Lösning som kodskelett: public interface Clock { //Clock public class ClockImpl implements Clock { // ClockImpl public class AlarmClock extends ClockImpl { // AlarmClock public interface Radio { //Radio public class RadioImpl implements Radio { // RadioImpl public class ClockRadio implements Clock, Radio { private Clock clock = new AlarmClock(); private Radio radio = new RadioImpl();

Uppgift 5. public abstract class Vehicle { public boolean issensitive(); // Vehicle public class Car extends Vehicle { public boolean issensitive() { return false; // issensitve //Car public class Lorry extends Vehicle { public boolean issensitive() { return false; // issensitve //Lorry public class Motorcycle extends Vehicle { public boolean issensitive() { return true; // issensitive // Motorcycle public class MobileHome extends Vehicle { public boolean issensitive() { return true; // issensitve // MobileHome public class VehicleUtil { // omissions public static void removewindsensitivevehicles(list<vehicle> list) { Iterator<Vehicle> iterator = list.iterator(); while(iterator.hasnext()) { Vehicle vehicle = iterator.next(); if(vehicle.issensitive ()) { iterator.remove(); // removewindsensitivevehicles // VehicleUtil Man skulle också kunna införa ett interface public interface Sensitive { public boolean issensitive(); // Sensitive som klassen Vehicle implementerar public abstract class Vehicle implements Sensitive { // Vehicle I övrigt blir klasserna som ovan. Även andra lösningar är möjliga.

Uppgift 6. Att använda LinkedList i implementationen är att föredra då implementationen blir enklare och möjligen också mera effektiv. Implementation med LinkedList: import java.util.*; public class ListStack<E> implements Stack<E> { private LinkedList<E> elements; public ListStack() { elements = new LinkedList<E>(); public void push(e e) { elements.addfirst(e); //push public E top() { if (elements.isempty()) throw new EmptyStackException(); return elements.getfirst(); //top public E pop() { if (elements.isempty()) throw new EmptyStackException(); return elements.removefirst(); //pop public boolean isempty() { return elements.isempty(); //isempty //ListStack

Implementation med ArrayList: import java.util.*; public class ListStack<E> implements Stack<E> { private List<E> elements; public ListStack() { elements = new ArrayList<E>(); public void push(e e) { elements.add(e); //push public E top() { if (elements.isempty()) throw new EmptyStackException(); return elements.get(elements.size()-1); //top public E pop() { if (elements.isempty()) throw new EmptyStackException(); return elements.remove(elements.size()-1); //pop public boolean isempty() { return elements.isempty(); //isempty //ListStack

Uppgift 7. import java.util.observable; public class Clock extends Observable { private Time time; public void tick() { time.increase(); setchanged(); notifyobservers(); public Time gettime() { return time; //gettime //Clock import java.util.observer; import java.util.observable; public class Display implements Observer { private Clock clock; public Display(Clock clock) { this.clock = clock; clock.addobserver( this ); private void show(time time) {... //show public void update(observable obs, Object o) { show(clock.gettime()); //update //Display Behövde inte skrivas import java. Observer; import java. Observable; public class Console implements Observer { private Clock clock; public Console(Clock clock) { this.clock = clock; clock.addobserver(this); private void print(time time) {... //print public void update(observable obs, Object o) { print(clock.gettime()); //update //Console

Uppgift 8. Uppgift 9. public class ShutdownThread extends Thread { private int secs; private String msg; public ShutdownThread(String msg, int secs) { this.secs = secs; this.msg = msg; public void run() { System.out.println(msg); try { Thread.sleep(secs*1000); catch (InterruptedException e) { return; shutdownnow(); //run public static void shutdownnow() { System.out.println("You failed!"); System.exit(0); // cause entire JVM to shut down // shutdownnow // ShutdownThread a) Flera trådar kan samtidigt anropa metoden report. Effekten kan bli att ett resultat som rapporteras in inte kommer med i slutresultatet. Exempel: Anta att instansvariabeln totalstep har värdet 123456 när två trådar t1 och t2 samtidigt exekverar metoden report. I beräkningen av satsen totalsteps = totalsteps + steps; läser både t1 och t2 av värdet 123456 på instansvariabeln totalstep. t1 adderar 1234 till värdet 123456 och får resultatet 124690. t2 adderar 4321 till värdet 123456 och får resultatet 127777. t2 lagrar värdet 127777 i instansvariabel totalstep. t1 lagrar värdet 124690 i instansvariabeln totalstep. Effekten blir att de 4321 stegen som t1 skulle registrera aldrig blev registrerade i slutresultatet. b) public class Team { private int totalsteps = 0; public synchronized void report(int steps) { totalsteps = totalsteps + steps; //report public int read() { return totalsteps; //read //Team