Tentamen LÖSNINGSFÖRSLAG

Relevanta dokument
Institutionen för TENTAMEN CTH HT-11 Datavetenskap TDA550 DAG: TID: 8:30 12:30

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

Tentamen LÖSNINGSFÖRSLAG

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

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

Lösningsförslag till tentamen

Objektorienterad programutveckling, fk

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

DAT043 - Föreläsning 7

Lösningar till tentamen i EDAF25

Lösningsförslag: Övning 5.

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

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

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

Properties. Användbara metoder som kan anropas i propertychanged:

Objektorienterad Programmering (TDDC77)

Lösningar till tentamen i EDAF25

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

Konstruktion av klasser med klasser

Tentamen LÖSNINGSFÖRSLAG

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

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

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

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

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

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

LÖSNINGSFÖRSLAG

Lösningsförslag till tentamen

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

LULEÅ TEKNISKA UNIVERSITET

DAT043 Objektorienterad Programmering

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Lösningsförslag till tentamen

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

OOP Objekt-orienterad programmering

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

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

Lösningar för tenta 3 DAT043,

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

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

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

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

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

Klasshierarkier - repetition

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

12 Metaprogrammering i Java

Lösningsförslag till exempeltenta 2

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

Objektorienterad Programmering (TDDC77)

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

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

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

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

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

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

TDDD78 Viktiga begrepp, del 2

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

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

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

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.

TENTAMEN OOP

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Lösningsförslag till tentamen i OOP, HI1027 Fredag 21 oktober 2011

Tentamen i Objektorienterad programmering

Lösningar för tenta 2 DAT043,

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

Tentamen i Objektorienterad modellering och diskreta strukturer

OOP Objekt-orienterad programmering

Lösningsförslag till tentamen

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

OOP Objekt-orienterad programmering

Tentamen FYTA11 Javaprogrammering

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

Lösningsförslag. 1 Lösningsförslag. Uppgift 1

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

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:

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

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

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Objektorienterad programmering i Java

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

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

Malmö högskola 2007/2008 Teknik och samhälle

Lösningsförslag till tentamen

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Tentamen. DD2385 Programutvecklingsteknik vt 2011 Tisdagen den 24 maj 2011 kl Hjälpmedel: penna, suddgummi, linjal

Transkript:

Tentamen 111212- LÖSNINGSFÖRSLAG Uppgift 1. a) A constructor1 B constructor2 b) Satsen är giltig. Utskriften blir: b = 0 c) Kodsegmentet är ogiltigt. Rad 4 orsakar ett kompileringsfel, eftersom en superklass inte kan anropa en metod som deklareras i en subklass. d) Koden är felaktig. Rad 3 orsakar ett kompileringsfel, eftersom en referens av typ B inte kan referera till ett objekt av typ A. e) public String tostring(){ return super.tostring() + text; f) Koden är giltig. Utskriften blir: 4xxx Uppgift 2. a) Det skall gälla att b) om x.equals(y), så är x.hashcode() == y.hashcode() I) windows == other.windows II) III) Felaktig! windows == other.windows && doors == other.doors Korrekt! windows ==other.windows && doors == other.doors && chimneys == other.chimneys Korrekt! IV) windows + doors == other.windows + other.doors Korrekt! V) windows + doors + chimneys == other.windows + other.doors + other.chimneys Felaktig VI) windows == other.windows doors == other.doors Uppgift 3. Felaktig Utskriften blir: You gave me an object. Orsaken är att List<Dog> inte är en subtyp till List<Animal>. Tänk för en stund att List<Dog> vore en subtyp till List<Animal>, så betyder det att List<Dog> är utbytbar mot List<Animal>. Om vi då har en klass class Cat extends Animal är det naturligtvis tillåtet att lägga in ett objekt av klassen Cat i en List<Animal> och då är det också tillåtet att lägga in ett objekt av klassen Cat i List<Dog> eftersom List<Dog> är utbytbar mot List<Animal>. Men en katt är inte en hund! Därför är inte heller List<Dog> en subtyp till List<Animal>!

Uppgift 4. Uppgift 5. public class NextNumber { private static NextNumber instance; private int number; private NextNumber () { number = 0; public static synchronized NextNumber getinstance() { if (instance == null) instance = new NextNumber(); return instance; public synchronized int getnext() { number++; return number; public interface Operation { void execute(calculator calculator); String getname(); //Operation public class Add implements Operation { public void execute(calculator calculator) { calculator.add(); //execute return "+"; // getname //Add public class Sub implements Operation { public void execute(calculator calculator) { calculator.sub(); //execute return "-"; // getname //Sub public class Enter implements Operation { public void execute(calculator calculator) { calculator.enter(); //execute return "enter"; // getname //Equals public class Key extends JButton implements ActionListener { private Calculator calculator; private Operation operation; public Key(Operation operation, Calculator calculator) { super(operation.getname ()); this.operation = operation; this.calculator = calculator; addactionlistener(this); //constructor public void actionperformed(actionevent e) { operation.execute(calculator); // actionperformed //Key

Uppgift 6. a) Konstruktorn exponerar den interna representationen. Eftersom klienten som skapar ett objekt har en referens till listan components kan klienten när som helst ändra elementen i listan components bakom ryggen på PointND-objektet. b) Konstruktorn skall inte lagra listan som ges som argument utan i stället en kopia av denna. Uppgift 7. public PointND(List<Double> components) { this.components = new ArrayList<Double>(components); Det var ett fel i bifogad API-utdrag där det angavs att List<E> har metoden clone(), vilket inte är sant. Därför godkänns även (den felaktiga) lösningen: public PointND(List<Double> components) { this.components = (List<Double>) components.clone(); a) LightedBicycle är en äkta subtyp till Bicycle eftersom en subtyp får ha ett svagare förvillkor b) RacingBicycle är en äkta subtyp till Bicycle eftersom en subtyp får ha ett starkare eftervillkor. c) TandemBicycle är inte en äkta subtyp till Bicycle eftersom en subtyp inte får ha ett starkare förvillkor. Uppgift 8. public class MetricSensorToImperialSensor implements ImperialSensor { public final static double MILES_PER_METER = 0.000621371192; public final static double HOURS_PER_SEC = 0.000277777778; private final MetricSensor ms; public MetricToSensorToImperialSensor() { ms = new MetricSensor(); // returns: distance traveled in miles public double getdistance() { return ms.readdistance() * MILES_PER_METER; // returns: speed in miles per hour public double getspeed() { return ms.readspeed() * MILES_PER_METER / HOURS_PER_SEC;

Uppgift 9. Klassen TimeComparator: import java.util.comparator; public class TimeComparator implements Comparator<Competitor> { public int compare( Competitor comp1, Competitor comp2) { if (comp1.gettime() < comp2.gettime()) return -1; else if (comp1.gettime() > comp2.gettime()) return 1; else return 0; //compare //TimeComparator Eller betydligt elegantare: import java.util.comparator; public class TimeComparator implements Comparator<Competitor> { public int compare( Competitor comp1, Competitor comp2) { return (int) (comp1.gettime() - comp2.gettime()); //compare //TimeComparator Metoden printplacement: public static void printplacement(list<competitor> thelist) { List<Competitor> newlist = new LinkedList<Competitor>(theList); Collections.sort(newList, new TimeComparator()); int place = 0; for (Competitor comp : newlist) { System.out.println(++place + "\t" + comp); //printplacement

Uppgift 10. Lösning med Observer och Observeable: import java.util.observer; import java.util.observable; public class Bee implements Observer { private final String name; public Bee(String name) { return name; public void update(observable obs, Object obj) { if (obs instanceof Flower) { Flower f = (Flower) obs; f.visit(this); import java.util.observable; public class Flower extends Observable { private final String name; public Flower(String name) { public void visit(bee b) { System.out.println(name + " is being visited by " + b.getname()); public void bloom() { System.out.println(name + " is blooming!"); setchanged(); notifyobservers(); Lösning med PropertyChangeSupport och PropertyChangeListener: Om inga förändringar skall göras i main-metoden i uppgiften måste vi införa ett interface: import java.beans.propertychangelistener; public interface IObservable { void addobserver(propertychangelistener observer); void removeobserver(propertychangelistener observer); import java.beans.propertychangesupport; import java.beans.propertychangelistener; import java.beans.propertychangeevent; public class Flower implements IObservable { private PropertyChangeSupport pcs = new PropertyChangeSupport(this); private final String name; public Flower(String name) { public void addobserver(propertychangelistener observer) { pcs.addpropertychangelistener(observer); public void removeobserver(propertychangelistener observer) { pcs.removepropertychangelistener(observer);

public void visit(bee b) { System.out.println(name + " is being visited by " + b.getname()); public void bloom() { System.out.println(name + " is blooming!"); pcs.firepropertychange("some text", this, name); // eller några andra lämpliga parametrar import java.beans.propertychangelistener; import java.beans.propertychangeevent; public class Bee implements PropertyChangeListener { private String name; public Bee(String name) { return name; public void propertychange(propertychangeevent ev) { if (ev.getsource() instanceof Flower) { Flower f = (Flower) ev.getsource(); f.visit(this);

Uppgift 11. public class Bidder extends Thread { private String biddername; private Auction auction; private int maxbid; public Bidder (String name, Auction a, int top) { biddername = name; auction = a; maxbid = top; //constructor public void run () { while (auction.biddingallowed()) { int currentbid = auction.getcurrentbid(); if (currentbid < maxbid) { auction.setbid(currentbid + 1,bidderName); try { sleep((int) (Math.random()*1000)); catch (InterruptedException e) { else break;