Tentamen i Objektorienterad modellering och design Helsingborg

Relevanta dokument
Tentamen i Objektorienterad modellering och design

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 Objektorienterad modellering och design Helsingborg

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

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

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

Föreläsning 5-6 Innehåll

TENTAMEN I DATAVETENSKAP

Lösningar till tentamen i EDAF25

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

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

Lösningar till tentamen i EDAF25

Tentamen, Algoritmer och datastrukturer

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Föreläsning 13 Innehåll

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

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

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

Föreläsning 15: Repetition DVGA02

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

Information. Computer

DAT043 Objektorienterad Programmering

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

Tentamen Programmering fortsättningskurs DIT950

Classes och Interfaces, Objects och References, Initialization

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

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

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

2D1339 Programkonstruktion för F1, ht 2003

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

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

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

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

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

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

TENTAMEN OOP

Tentamen, EDAA10 Programmering i Java

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

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

Laboration 1: Figurer i hierarki

PROGRAMMERINGSTEKNIK TIN212

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

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Objektorienterad Programmering (TDDC77)

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Programmering A. Johan Eliasson

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Tentamen i Algoritmer & Datastrukturer i Java

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

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

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

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

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

Tentamen i Objektorienterad modellering och design (OMD) Helsingborg

Tentamen, EDA501 Programmering M L TM W K V

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

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

Konstruktion av klasser med klasser

Tentamen Datastrukturer (DAT037)

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

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Tentamen Grundläggande programmering

DAT043 - Föreläsning 7

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

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

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

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

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

Tentamen ID1004 Objektorienterad programmering April 7, 2015

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Tentamen, EDAA20/EDA501 Programmering

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

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Tentamen Datastrukturer D DAT 035/INN960

Transkript:

Lunds Tekniska Högskola Datavetenskap Emelie Engström Tentamen EDAF25 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Helsingborg Tentamen består av en teoridel om totalt 5 poäng och en problemdel innehållande 5 uppgifter med totalt 25 poäng. För godkänt betyg kommer att krävas högst 16 poäng. Vid bedömningen kommer hänsyn att tas till lösningens kvalitet. UML-diagram skall ritas i enlighet med UMLhäftet. Man får förutsätta att det finns standardkonstruerare i alla klasser. De behöver ej redovisas i lösningar. Hjälpmedel: Koffman & Wolfgang: Data Structures 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

7 Den här uppgiften handlar om att söka den kortaste vägen mellan två noder i en graf som representerar en uppsättning ord och deras eventuella granskap till varandra. Noderna i grafen representerar orden och bågarna representerar grannskap mellan två ord. Om två ord skiljer sig åt endast genom en bokstav räknas de som grannar. Skiljer de sig på annat sätt räknas de inte som grannar. Alla bågar i grafen har samma vikt varför väglängden kan uttryckas i antal bågar. Vidare kan noderna i grafen representeras av unika strängar. a. Givet ovanstående är det onödigt att skapa en generell klass för att representera vår graf. Istället skulle vi kunna använda t.ex. Map i Java. Förklara hur! b. Är bredden-först-genomgång eller djupet-först-genomgång lämpligast för att söka kortaste vägen mellan två noder i denna graf? Beskriv algoritmen i grova drag? Ge också förslag på lämpliga datastrukturer som kan användas vid implementeringen och beskriv hur de kan användas. c. För varje nod som behandlas behöver vi få tillgång till dess grannar. Detta är den enda grafoperationen som behövs för att lösa problemet. Hur kan du få tillgång till grannarna för en nod i ditt fall? d. Hur skulle du kunna öppna för andra representationer av grafen? 7