Objektorienterad programutveckling, fk

Relevanta dokument
TKIEK-2, TKTFY-3, TKTEM-3

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Objektorienterad programutveckling, fk

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

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:

Tentamen LÖSNINGSFÖRSLAG

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

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

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

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

Lösningar till tentamen i EDAF25

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

lgammal2.txt // Lösningar till gammal tentamen // Uppgift 1 a

Tentamen LÖSNINGSFÖRSLAG

Objektorienterad programvaruutveckling, fk, TDA550. Exempeltentamen

DAT043 Objektorienterad Programmering

Tentamen LÖSNINGSFÖRSLAG

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

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

Projekt 2 XL. Observer-mönstret

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

Tentamen FYTA11 Javaprogrammering

Lösningsförslag till tentamen

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

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

Föreläsning 3. Stack

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Lösningsförslag till tentamen

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

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

Lösningsförslag till tentamen

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

Föreläsning 3. Stack

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

Lösningsförslag till tentamen

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

Lösningsförslag till tentamen

F4. programmeringsteknik och Matlab

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

Institutionen för TENTAMEN CTH HT-14 Datavetenskap TDA550 DAG: TID: 14:00 18:00

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

Lösningsförslag till tentamen

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

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

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

TENTAMEN OOP

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

TENTAMEN. Objektorienterade applikationer CHALMERS. 2018/2019, lp 3 DAT055. Uno Holmer

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

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

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

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

Lösningsförslag till tentamen

Objektorienterad Programmering (TDDC77)

Lösningar till tentamen i EDAF25

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

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

JAVAUTVECKLING LEKTION 4

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

Lösningsförslag till tentamen

Parallellism, återblick

Språkkonventioner och redigering av tal.

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

Föreläsning 14. Filhantering

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

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad.

Institutionen för TENTAMEN CTH HT-17 Datavetenskap TDA550

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

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

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

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

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

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

Instuderingsuppgifter läsvecka 2

Objektorienterad Programmering (TDDC77)

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

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

LÖSNINGSFÖRSLAG

Programmering för språkteknologer II, HT2014. Rum

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

LYCKA TILL!!! TENTAMEN I Programmeringsteknik F1. Var vänlig och läs detta: CTH TIN 211. DATAVETENSKAP Göteborg ( ) TENTAMEN

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

Tentamen i Objektorienterad modellering och design Helsingborg

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

Del A (obligatorisk för alla)

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Lösningsförslag till tentamen

Transkript:

till tentamen P r e l i m i n ä r 1 (7) Kurs Objektorienterad programutveckling, fk Program DAI2 Läsår 2017/2018, lp 2 Examinator Uno Holmer Uppgift 1 (7 p) Abstrahera ut aktiviteten i ett gränssnitt Trainee och utnyttja polymorfism i klassen PersonalTrainer. public interface Trainee { void train(); public class Walker implements Trainee { public void train() { System.out.println("Walking"); public class Runner implements Trainee { public void train() { System.out.println("Running"); public class Swimmer implements Trainee { public void train() { System.out.println("Swimming"); public class PersonalTrainer { private Trainee trainee; public PersonalTrainer(Trainee trainee) { this.trainee = trainee; public void activate() { trainee.train();

Uppgift 2 (8 p) 2 (7) public abstract class AbstractAnimationDecorator implements Drawable { protected Drawable obj; public AbstractAnimationDecorator(Drawable obj) { this.obj = obj; // Delegate public void move(int deltax, int deltay) { obj.move(deltax,deltay); public void moveto(int x, int y) { obj.moveto(x,y); public void draw() { obj.draw(); public void erase() { obj.erase(); public class Animation extends AbstractAnimationDecorator { public Animation(Drawable d) { super(d); // Decorate public void animate(int dx,int dy,int steps,int speed) { draw(); for ( int i = 0; i < steps; i++ ) { try { Thread.sleep(1000/speed); catch (Exception e) { erase(); move(dx,dy); draw();

Uppgift 3 (1+8 p) a) 3 (7) i. Skriver ut: A doa ii. iii. iv. Satsen IA a = new X(); ger ett kompileringsfel, eftersom X inte är en subtyp till IA. Satsen C c = new B(); ger ett kompileringsfel, eftersom B inte är en subtyp till C Satsen b.dox(); ger ett kompileringsfel, eftersom den statiska typen B inte har metoden dox(). v. Ger ett exekveringsfel, eftersom C och X är inkompatibla typer vi. vii. viii. Skriver ut: C doc Skriver ut: A doa Satsen IA a = new A(); ger ett kompileringsfel, eftersom klassen A är abstrakt.

Uppgift 4 (1+6 p) a) Se uppgift b. 4 (7) public static Map<String,List<Double>> loadcsvdata(string csvfile) throws IOException,NumberFormatException { Scanner sc = new Scanner(new File(csvFile)); Map<String,List<Double>> map = new TreeMap<>(); while ( sc.hasnextline() ) { String line = sc.nextline(); String[] fields = line.split(":"); String key = fields[0]; List<Double> values = map.get(key); if ( values == null ) { values = new ArrayList<>(); map.put(key,values); for ( int i = 1; i < fields.length; i++ ) values.add(double.parsedouble(fields[i])); sc.close(); return map; Uppgift 5 (4 p) a) Specifikation I är starkast, eftersom eftervillkoret är starkare. Specifikation III är starkast, eftersom förvillkoret är svagare. c) Specifikation III är starkast, eftersom förvillkoret är svagare och eftervillkoret är starkare. d) Går inte att avgöra. Specifikation IV har både starkare förvillkor och eftervillkor.

5 (7) Uppgift 6 (9 p) Vi antar att kortleken lagras i instansvariabeln cards av typen ArrayList<Card>. public CardHand clone() { CardHand result = null; try { result = (CardHand)super.clone(); result.cards = (ArrayList<Card>)cards.clone(); for ( int i = 0;i < cards.size();i++ ) result.cards.set(i,cards.get(i).clone()); return result; catch (CloneNotSupportedException e) { throw new InternalError(); @SuppressWarnings("unchecked") public final boolean equals(object o) { if ( this == o ) return true; else if ( o instanceof CardHand ){ CardHand other = (CardHand)o; ArrayList<Card> left = (ArrayList<Card>)cards.clone(); ArrayList<Card> right = (ArrayList<Card>)other.cards.clone(); Collections.sort(left); Collections.sort(right); return left.equals(right); return false; public int hashcode() { ArrayList<Card> copy = (ArrayList<Card>)cards.clone(); Collections.sort(copy); return copy.hashcode();

6 (7) Uppgift 7 (3+5 p) a) Designen bryter mot principerna: Tell don't ask: ClimateControl manilulerar det interna tillståndet i AirCondition. Law of Demeter - don't talk to strangers: ClimateControl opererar på Cooler med AirCondition som ombud. Information expert: Uppgifter som borde ligga i AirCondition utförs i ClimateControl. public class AirCondition { public static final double COMFORT_TEMPERATURE = 22.0; private double temperature; private Cooler cooler = new Cooler(); public double gettemperature() { return temperature; public void adjusttemperature() { double delta = temperature - COMFORT_TEMPERATURE; if ( delta > 1.0 ) decreasetemperature(); private void decreasetemperature() { cooler.on(); while ( temperature > COMFORT_TEMPERATURE ) { //sleep(100); // ms cooler.off(); // Other members omitted. public class ClimateControl { private AirCondition aircondition; public ClimateControl(AirCondition aircondition) { this.aircondition = aircondition; public void adjusttemperature() { aircondition.adjusttemperature(); // Other members omitted.

7 (7) Uppgift 8 (3+5 p) a) public class BoxView extends JButton implements Observer { public BoxView(String text) { super(text); public void update(observable obj,object o) { String argstring = (String)o; String[] args = argstring.split(";"); String state = args[0]; boolean isfull = Boolean.parseBoolean(args[1]); if ( state.equals("selected") ) settext("selected"); else if ( state.equals("open") ) { if ( isfull ) settext("win!"); else settext("- EMPTY -"); else settext(""); public class Gui extends JFrame { private GameEngine engine; public Gui() { engine = new GameEngine(); makeframe(); private void makeframe() { settitle("game"); setlayout(new GridLayout(2,3)); for ( int i = 0; i < 3; i++ ) { BoxView bv = new BoxView(" "); final int i2 = i; bv.addactionlistener( new ActionListener(){ public void actionperformed(actionevent e) { engine.select(i2); ); add(bv); engine.addboxobserver(i,bv); add(new JLabel()); // Dummy JButton newgamebutton = new JButton("New Game"); newgamebutton.addactionlistener( new ActionListener(){ public void actionperformed(actionevent e) { engine.newgame(); ); add(newgamebutton); add(new JLabel()); // Dummy pack(); setvisible(true);