Tentamen i Objektorienterad modellering och design

Relevanta dokument
Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och diskreta strukturer

Designmönster. Kapitel Kommandomönstret

4.7 Observatörsmönstret

Tentamen i Objektorienterad modellering och diskreta strukturer

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design Helsingborg

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

Föreläsning 5-6 Innehåll

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

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

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

TENTAMEN I DATAVETENSKAP

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

Lösningar till tentamen i EDAF25

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

Tentamen i Objektorienterad modellering och design Helsingborg

Föreläsning 13 Innehåll

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

Lösningar till tentamen i EDAF25

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

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

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

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

Kursstruktur. Objektorienterad modellering och diskreta strukturer / design. Programmering utan OMD. Vad är Objektorienterad modellering?

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

Classes och Interfaces, Objects och References, Initialization

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen i Objektorienterad modellering och diskreta strukturer

2D1339 Programkonstruktion för F1, ht 2003

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

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

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

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

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

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

Föreläsning 15: Repetition DVGA02

Information. Computer

EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design

EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design. Vad är Objektorienterad modellering?

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

Objektorienterad Programmering (TDDC77)

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

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

Tentamen Programmering fortsättningskurs DIT950

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

Laboration 1: Figurer i hierarki

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

PROGRAMMERINGSTEKNIK TIN212

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

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Tentamen. DD2385 Programutvecklingsteknik vt 2015 Fredagen den 5 juni 2015 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

Konstruktion av klasser med klasser

Tentamen, EDA501 Programmering M L TM W K V

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

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

Computer projekttid. Objektorienterad modellering och diskreta strukturer / design. Rapporter från verkligheten. EDAF10 i HT2

Programmering A. Johan Eliasson

Föreläsning 12. Länkade listor

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

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.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

OOP Objekt-orienterad programmering

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

Exempel på användning av arv: Geometriska figurer

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Tentamen, EDAA10 Programmering i Java

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

Extentamen i 2D1359 Objektorinterad modellering programmering och analys Tisdag den 13 oktober 1998 kl

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Tentamen, Algoritmer och datastrukturer

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

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:

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

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

Tentamen i Objektorienterad programmering

Tentamen, EDAA20/EDA501 Programmering

Arv och polymorfism i Java

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

EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design

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

EDAF10: Objektorienterad modellering och diskreta strukturer. EDA061: Objektorienterad modellering och design. Diskreta strukturer.

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

Objektorienterad Programmering (TDDC77)

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

Transkript:

Lunds Tekniska Högskola Datavetenskap Tentamen EDA061 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Vid bedömningen kommer hänsyn att tas till lösningens kvalitet. UML-diagram skall ritas i enlighet med UML-häftet. Man får förutsätta att det finns standardkonstruerare i alla klasser. De behöver ej redovisas i lösningar. Hjälpmedel: Martin: Agile Software Development Andersson: UML syntax Holm: Java snabbreferens 1 Denna uppgift innehåller uppgifter med påståenden och anledningar. För varje uppgift svara med ett av följande alternativ: A Både påståendet och anledningen är korrekta uttalanden och anledningen förklarar påståendet på ett korrekt sätt. B Både påståendet och anledningen är korrekta uttalanden, men anledningen förklarar inte påståendet. C Påståendet är ett korrekt uttalande, men anledningen är falsk. D Påståendet är falskt, men anledningen är ett korrekt uttalande. E Både påståendet och anledningen är falska. Det går bra att svara direkt i formuläret. Glöm då inte att lämna in formuläret tillsammans med övriga lösningar. (4p) T1 T2 T3 T4 Påstående Strategy är ett bra mönster då man vill kunna ändra beteendet hos ett objekt under exekvering Figur 1 visar hur OCP-principen tillämpats. Figur 2 nedan visar hur ett cirkulärt beroende mellan två paket har tagits bort Ett stabilt paket är ett paket som inte så många andra paket har beroende till Anledning Det är lätt att skapa en ny strategi genom att skapa en klass som implementerar strategigränssnittet Figur 1 visar ett exempel på Factory-mönstret DIP kan användas för att ta bort cirkulärt beroende mellan två paket Ett paket som inte så många andra paket beror av, kan man ändra i utan att ändringarna får så stor spridning Svar A,B,C, D,E 1

Figur 1: Figur till T2 Figur 2: Figur till T3 2 Vilket mönster illustrerar nedanstående sekvensdiagram bäst (av de mönster vi gått igenom i kursen)? (1p) Figur 3: Sekvensdiagram 2

3 Ett klientprogram enligt nedan använder sig av en kommunikationskanal för att skicka och ta emot textsträngar. public class C l i e n t { ComChannel mycc = new FastComChannel ( ) ; private void send ( S t r i n g t e x t ) { mycc. send ( t e x t ) ; private S t r i n g r e c e i v e ( ) { return mycc. r e c e i v e ( ) ; public void s t a r t L o g g (DB loggdb ) { mycc = new LoggedComChannel ( loggdb, mycc) ; public void stoplogg ( ) { i f (mycc instanceof LoggedComChannel ) { mycc = ( ( LoggedComChannel )mycc). getorigcc ( ) ; public interface ComChannel { public void send ( S t r i n g t e x t ) ; public S t r i n g r e c e i v e ( ) ; public class FastComChannel implements ComChannel { public void send ( S t r i n g t e x t ) { // omissions public S t r i n g r e c e i v e ( ) { S t r i n g t e x t = null ; // omissions return t e x t ; public class LoggedComChannel implements ComChannel { ComChannel origcc ; DB loggdb ; public LoggedComChannel (DB db, ComChannel origcc ) { this. origcc = origcc ; this. loggdb = db ; public ComChannel getorigcc ( ) { return origcc ; public void send ( S t r i n g t e x t ) { loggdb. appendsent ( t e x t ) ; origcc. send ( t e x t ) ; public S t r i n g r e c e i v e ( ) { S t r i n g t e x t ; t e x t = origcc. r e c e i v e ( ) ; loggdb. appendreceived ( t e x t ) ; return t e x t ; a. De har gjort sin design sådan att de enkelt kan slå på och av loggning av trafiken. Vad heter det mönster de har använt för att uppnå detta? b. Rita ett klassdiagram för koden, där du får med all information du känner till. c. Rita ett sekvensdiagram för följande kodrader : myapp. send ( Jag ) ; myapp. s t a r t L o g g (mydb) ; myapp. send ( kan ) ; myapp. stoplogg ( ) ; myapp. send ( d e t t a ) ; 3

Du kan förutsätta att myapp och mydb är deklarerade enligt nedan och sedan skapade och initialiserade på rätt sätt. A p p l i c a t i o n myapp ; DB mydb; 4 Vi vill ha en klass Stock och en klass Portfolio, enligt beskrivningen nedan. Klassen Stock skall hålla reda på värdet av en given aktie, dess update -metod kommer att anropas av någon annan så snart aktiens värde ändras. Varje gång aktiens värde ändras skall den meddela sina observatörer att den ändrats (Stock skall vara en Observable). Klassen Portfolio skall hantera en aktieportfölj (dvs ett antal aktier), och hålla reda på hur värdet på portföljen har utvecklats sedan vi lade till aktierna (utvecklingen, current yield, är summan av aktuella kurser delat med summan av inköpskurserna). Portfolio skall vara en Observable, och meddela sina observatörer varje gång värdet på en ingående aktie ändras på ett sådant sätt att portföljens utveckling understiger en given gräns (yield limit i specifikationen nedan). Klasserna skall ha följande specifikationer: class Stock extends Observable { public void update ( double value ) //... din kod... public double value ( ) //... din kod... class P o r t f o l i o... din kod... { public P o r t f o l i o ( double y i e l d L i m i t ) //... din kod... public void add ( Stock s t o c k ) //... din kod... public double c u r r e n t Y i e l d ( ) //... din kod... a. Implementera Stock och Portfolio enligt beskrivningen ovan. b. Portfolio har nu två uppgifter, både att räkna samman, och att varna flytta ansvaret för att varna till en ny klass (observera att detta innebär att Portfolio nu bör meddela när dess värde ändrats, oavsett om dess värde är för lågt eller ej). Redovisa med Javakod för den nya klassen och förändringarna i Portfolio-klassen. 4

5 Vi har ett interface Drawing (se nedan), och vill kunna rita olika slags figurer i ett Drawingobjekt. interface Drawing { void c l e a r ( ) ; void useforegroundcolor ( ) ; void usebackgroundcolor ( ) ; void moveto( int x, int y ) ; void c i r c l e ( int r a d i u s ) ; void r e c t a n g l e ( int width, int h e i g h t ) ; I ett Drawing-objekt finns alltid en aktuell punkt, och vi flyttar den med moveto. Metoden circle ritar en cirkel med given radie runt den aktuella punkten, rectangle ritar en rektangel med given storlek med den aktuella punkten som mittpunkt. För att rita vill vi använda Command Pattern, och vi vill både kunna rita och ångra figurer (för att ångra en figur ritar vi den i bakgrundsfärg). Så vi har följande interface: interface DrawCommand { void draw ( Drawing d ) ; void undo ( ) ; a. Implementera klasserna DrawCircle och DrawSquare som ritar (och ångrar) cirklar och kvadrater. Man skall kunna skapa cirkel- och kvadratritningsobjekt genom att skriva: void example ( Drawing d ) { DrawCommand c = new DrawCircle ( 0, 0, 1 ) ; DrawCommand s = new DrawSquare ( 0, 0, 2 ) ; c. draw ( d ) ; //... woops, t a k e back : c. undo ( ) ; Parametrarna till konstruktorerna i DrawCircle och DrawSquare är i tur och ordning x- och y-koordinaterna för mittpunkten, och radie eller sidlängd. Använd lämpliga principer och mönster från kursen när du skriver din kod. b. Rita ett fullständigt klassdiagram med klasserna i din lösning. Attribut behöver dock inte vara med. 5

6 Vi vill nu koppla våra ritklasser i föregående problem till ett GUI, och vill ha ett antal Action-klasser, som beskriver användarens interaktion med programmet: interface Action { void e x e c u t e ( Drawing d, Stack<DrawCommand> h i s t o r y ) ; Här är history en stack med alla de ritkommandon som har utförts (vi behöver dem om vi skall kunna ångra dem). Klassen Stack har specifikationen class Stack<E> { public boolean isempty ( ) ; public void push (E value ) ; public E pop ( ) ; Vi kommer i uppgiften att hantera tre slags Action-klasser: DrawAction: ritar en figur man skickar med ett DrawCommand när man skapar en DrawAction, så konstrueraren har rubriken: public DrawAction (DrawCommand cmd) Undo: ångrar den senaste utritade figuren. Man skall kunna ångra hur många utritade figurer som helst, så efter att vi ångrat en figur räknas den figur vi ritade precis före den borttagna som senaste figur. Exit: avslutar programmet (med System.exit(0)). Vi har även ett interface GUI, med en metod next() som ligger och tolkar det användaren gör, och skickar tillbaka nästa action : interface GUI { Action next ( ) ; En kollega kommer att skriva en GUI-klass, och hon känner till hur våra Action-objekt skapas. a. Implementera de tre Action-subklasserna ovan. b. Skriv en metod med rubriken: void run (GUI gui, Drawing d ) { //... hä r s k a l l du f y l l a i din kod... Den skall hämta kommandon från GUI och uppdatera ritningen enligt användarens önskemål. 6