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



Relevanta dokument
Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och diskreta strukturer

Lösningar till tentamen i EDAF25

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

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och diskreta strukturer

Lösningar till tentamen i EDAF25

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

LÖSNINGSFÖRSLAG. Tentamen. Objektorienterad modellering och design. EDA665, 4 poäng

Tentamen. Lösningsförslag

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

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

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

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

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och diskreta strukturer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

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

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

Kursombud. Objektorienterad modellering och diskreta strukturer / design. Agile? Designprinciper EDAF10 EDA061. Lennart Andersson. Grupper för projekt

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

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

Tentamen Programmering fortsättningskurs DIT950

Föreläsning 5-6 Innehåll

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

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

Lösningsförslag till exempeltenta 2

Instuderingsuppgifter läsvecka 2

Designmönster. Kapitel Kommandomönstret

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

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

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

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

Tentamen FYTA11 Javaprogrammering

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

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

Tentamen, EDA501 Programmering M L TM W K V

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

Information. Computer

Tentamen för TTIT71 Programmering kl Institutionen för datavetenskap Linköpings universitet. Uppgift 1. (2 p)

4.7 Observatörsmönstret

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

Tentamen, EDAA20/EDA501 Programmering

Lösningsförslag till tentamen

Objektorienterad programutveckling, fk

Tentamen, EDAA10 Programmering i Java

Tentamen i Objektorienterad programmering

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

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

Lösningsförslag: Övning 5.

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.

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen Nätverksprogrammering Lösningsförslag

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 modellering och diskreta strukturer (EDAF10/EDA061)

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

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

Förra föreläsningen. Dagens agenda. Command Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Klasshierarkier - repetition

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen, EDA501 Programmering M L TM W K V

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

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

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

Objektorienterad Programmering (TDDC77)

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

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 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.

Tentamen, EDAA20/EDA501 Programmering

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

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

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

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Föreläsning 10. ADT:er och datastrukturer

Tentamen FYTA11 Javaprogrammering

TENTAMEN OOP

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(7) Institutionen för datavetenskap Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg 1. a) Figure 1 2015 06 04 GeometryApp GraphicalApp GeometricSquare +area(): double GraphicSquare +draw() GUI Figur 1: Klasser med separata ansvar b) Ja, en klass som utifrån användarens perspektiv har flera olika ansvarsområden leder till en bräcklig design. Antag att GeometryApp aldrig behöver metoder för att representera en kvadrat grafiskt men att GraphicalApp har behov av dylika metoder. Om dessa behov vid något tillfälle förändras så att vi vill ändra implementationen i Square men inte tänker på kopplingen till GeometryApp kan det leda till oväntade beteenden i den senare. 2. a) Man skulle kunna argumentera för att vi bryter mot OCP eftersom det inte går att lägga till ytterligare fordon utan att förändra i klassen VehicleTest. Man kan också ana ett brott mot DIP eftersom de beroenden som finns går mot konkreta klasser snarare än mot abstraktioner. Dock är det svårt att utifrån kontexten i detta lilla exempel avgöra om dessa är högnivå eller lågnivå-klasser. Koden innehåller en del duplicerad kod vilket i sin tur innebär brott mot en princip som vi inte gått igenom i kursen nämligen DRY-principen.

2(7) b) Template method pattern public abstract class Vehicle { private boolean status = false; private void start(){ this.status = true; protected abstract void drive(); protected abstract void stop(); public final void testvehicle(){ start(); if(this.status){ drive(); stop(); public class Car extends Vehicle { protected void drive() { System.out.println("I m driving a car!"); protected void stop() { System.out.println("Car stopped!"); public class Truck extends Vehicle { protected void drive() { System.out.println("I m driving a truck!"); protected void stop() { System.out.println("Truck stopped!"); public class VehicleTest { public static void main(string args[]){ Vehicle car = new Car(); testvehicle(car); Vehicle truck = new Truck(); testvehicle(truck); public static void testvehicle(vehicle v){ v.testvehicle();

3(7) c) Strategy pattern public interface DrivingStrategy { public void drive(); public class CarDrivingStrategy implements DrivingStrategy { public void drive() { System.out.println("I m driving a car!"); public class TruckDrivingStrategy implements DrivingStrategy { public void drive() { System.out.println("I m driving a truck!"); public interface StoppingStrategy { public void stop(); public class TruckStoppingStrategy implements StoppingStrategy { public void stop() { System.out.println("Truck stopped!"); public class CarStoppingStrategy implements StoppingStrategy { @Override public void stop() { System.out.println("Car stopped!"); public class Vehicle{ private boolean status = false; private DrivingStrategy drivingstrategy; private StoppingStrategy stoppingstrategy; public Vehicle(DrivingStrategy ds, StoppingStrategy ss){ drivingstrategy = ds; stoppingstrategy = ss; public void setdrivingstrategy(drivingstrategy ds){ this.drivingstrategy = ds; public void setstoppingstrategy(stoppingstrategy ss){ this.stoppingstrategy = ss; public void start(){ this.status = true;

4(7) public void drive(){ drivingstrategy.drive(); public void stop(){ stoppingstrategy.stop(); public void testvehicle(){ start(); if(this.status){ drive(); stop(); public class VehicleTest { public static void main(string args[]){ Vehicle car = new Vehicle(new CarDrivingStrategy(), new CarStoppingStrategy()); testvehicle(car); Vehicle truck = new Vehicle(new TruckDrivingStrategy(), new TruckStoppingStrategy()); testvehicle(truck); public static void testvehicle(vehicle v){ v.testvehicle();

5(7) d) Factory VehicleTest «interface» VehicleFactory +makecar(): Vehicle +maketruck(): Vehicle factory method pattern +test() Vehicle ConcreteVehicleFactory Car Truck «creates» Figur 2: Factory-mönstret public class VehicleTest { VehicleFactory factory = new ConcreteVehicleFactory(); Vehicle car = factory.makecar(); testvehicle(car); Vehicle truck = factory.maketruck(); testvehicle(truck); public static void testvehicle(vehicle v){ v.test();

6(7) 3. a) Figure 3 Idle insertcoin(x)/amount=x Give Change entry/ release amount abort insertcoin(x)/amount=x+amount Dispense entry/ dispense beverage select(beverage)[ispayed] /amount=amount-cost Paying do/ display amount Figur 3: Tillståndsdiagram kaffeautomat b) Figure 4 control +select(beverage) +insert(double) +abort() VendingMachine - order: BeverageBuy - display: Display - distributor: Beveragedistributor - moneyhandler: MoneyHandler BeverageBuy -amount: double +BeverageBuy(double) +increase(double): double +buy(beverage):double +ispayed(beverage):boolean hardware Display +display(double) BeverageDistributor +dispense(beverage) MoneyHandler +release(double) «enumeration» Beverage Coffe Tea Chocolate Figur 4: klassdiagram kaffeautomat c) Figure 5

7(7) Figur 5: tillståndsdiagram kaffeautomat 4. Figure 6 a) DF: A, B, E, D, C A 2 B 3 D 5 C 1 1 2 5 E Figur 6: Graf b) Efter 5 iterationer är alla 5 noderna markerade som besökta. Den kortaste vägen som identifieras är A,D,C,E och har längden 5.