Övningsuppgifter i Objektorienterad modellering och design (OMD) Helsingborg EDAF25

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

Objektorienterad modellering och design

Lösningar till tentamen i EDAF25

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

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design Helsingborg

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

Tentamen i Objektorienterad modellering och design

Lösningar till tentamen i EDAF25

4.7 Observatörsmönstret

Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och design Helsingborg

Information. Computer

Tentamen i Objektorienterad modellering och design Helsingborg

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

Föreläsning 13 Innehåll

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

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 Objektorienterad modellering och diskreta strukturer

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

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

JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012

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

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

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

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

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

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

Lösningsförslag till tentamen

Seminarierna Instruktioner. Övningarna Viktiga relationer

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

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

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

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

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

Exempel på användning av arv: Geometriska figurer

HT1 2015, FÖRELÄSNING

Tentamen i Objektorienterad programmering

1 Egna klasser. 1.1 En punkt-klass

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

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

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

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

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

Analys och design. Objekt. Klass. med hjälp av CRC. Klassdiagram

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

Designmönster, introduktion. Vad är det? Varför skall man använda mönster?

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

Designmönster. Kapitel Kommandomönstret

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

TDDD78 Viktiga begrepp, del 2

Lösningsförslag tentamen FYTA11 Java

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

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

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

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

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

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

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

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

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

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 i Objektorienterad modellering och diskreta strukturer

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

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

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Objektorienterad analys och design

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 15: Repetition DVGA02

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

Tentamen Programmering fortsättningskurs DIT950

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.

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

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

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Tentamen i Objektorienterad modellering och design (OMD) Helsingborg

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

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

Att skriva till och läsa från terminalfönstret

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Lösningsförslag till tentamen

1 Repetition av viktiga begrepp inom objektorienterad programmering

Tentamen i Objektorienterad modellering och diskreta strukturer

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Chapter 4: Writing Classes/ Att skriva egna klasser.

Objektorientering i liten skala

Inkapsling (encapsulation)

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

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

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

Transkript:

Övningsuppgifter i Objektorienterad modellering och design (OMD) Helsingborg EDAF25 19 december 2017

Innehåll 1 Objektorienterad modellering 2 2 Design smells 6 3 Grundläggande designprinciper (SRP, OCP, DIP, DRY) 8 4 Designmönster (objekt, sekvens och tillståndsdiagram) 11 4.1 Kommandomönstret......................... 11 4.2 Kompositmönstret.......................... 11 4.3 Mallmetodmönstret.......................... 11 4.4 Strategimönstret........................... 11 4.5 Null Objekt.............................. 11 4.6 Dekoratörsmönstret......................... 11 4.7 Observatörsmönstret......................... 11 4.8 Tillståndsmönstret.......................... 11 4.9 Fabriksmönstret........................... 11 4.10 Alla mönster............................. 11 5 Ytterligare designprinciper (ISP, muterbarhet, LSP) 12 6 Arkitekturmönster 13 6.1 MVC.................................. 13 7 Paketdesign 14 7.1 Ramverk................................ 14 7.2 Designprinciper (CRP, REP, CCP, ADP, SDP, SAP)....... 14 1

Kapitel 1 Objektorienterad modellering Uppgift 1.1 Beskriv följande i ett klassdiagram: I ett system för bokning av undervisningssalar har varje sal ett namn och ett antal platser. Det finns salar för tre ändamål: föreläsning, övning och tentamen. För varje bokning anger man salens namn och önskad tid (dag, starttid och sluttid). Varje bokning tilldelas ett bokningsnummer. Uppgift 1.2 Denna uppgift innehåller ett antal deluppgifter, där varje deluppgift har ett påstående och en anledning. För varje deluppgift, svara med ett av följande alternativ: A Både påståendet och anledningen är korrekta uttalanden och anledningingen 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 ett felaktigt uttalande. D Påståendet är felaktigt, men anledningen är ett korrekt uttalande. E Både påståendet och anledningen är felaktiga uttalanden. 2

T1 T2 T3 T4 T5 T6 Påstående Den viktigaste egenskapen för mjukvara är att den kan underhållas och återanvändas. Med hjälp av OMD kan man mäta kvaliteten på mjukvaran. Ett sätt att åstadkomma inkapsling (encapsulation) är att minimera synligheten för metoder och attribut. Med hjälp av delegation blir ett program lättare att förändra. Aggregering är att föredra framför komposition om objektet vars beteende man tänker använda har ett egenvärde utanför objektet som använder det. Ett UML-interaktionsdiagram ger en dynamisk vy av hur objekten samarbetar. Ett klassdiagram ger istället en statisk vy över samarbetet. Anledning Det är bra att följa goda OO principer från start för att få ett väldesignat projekt. OMD handlar om att rita olika typer av diagram. Inkapsling handlar delvis om att skydda information i en del av programmet från en annan del av programmet. Delegation gör objekten mer oberoende av varandra (loosely coupled) Vid aggregering instansieras det aggregerade objektet oftast i ägarens konstruktor Ett klassdiagram beskriver egenskaper och metoder för klasserna. Uppgift 1.3 I ett spelprogram förekommer följande deklarationer: class Square {... // en ruta pa spelplanen class GameBoard { // spelplanen private Square[] squares; // rutorna class Die {... // tarningen class Player { // en spelare private String name; private int position; private GameBoard board; private Die die; private Player opponent; // motspelaren class Expert extends Player {... class Novice extends Player {... class Game { private Player p1,p2; private GameBoard board; Beskriv spelet i ett klassdiagram. Visa riktningar för associationerna. 3

Uppgift 1.4 I följande program brister inkapslingen av data. Åtgärda detta. Lösningen redovisas med Java-kod. public class Point { private int x,y; public int getx() { return x; public void setx(int x) { this.x = x; public int gety() { return y; public void sety(int y) { this.y = y; public class Circle { private Point centre; private int radius; public Point getcentre() { return centre; public int getradius() { return radius; public class Drawing { private List<Circle> circles; // omissions private void movecircle(circle ac, int dx, int dy) { int x1 = ac.getcentre.getx(); ac.getcentre.setx(x1 + dx); int y1 = ac.getcentre.gety(); ac.getcentre.sety(y1 + dy); 4

Uppgift 1.5 Sällskapsspelet Mastermind beskrivs av en tillverkare på följande sätt. MASTERMIND is a game which gives each player a chance to outsmart his opponent. The Codemaker secretly sets up a line of Code Pegs behind his shield and the Codebreaker has up to ten opportunities to try and duplicate the colour and each exact position of the hidden Code Pegs without ever seeing them. The Codemaker secretly puts 4 Code Pegs in 4 holes behind the shield. Use any combination of the six colours. You may use 2 or more Code Pegs of the same colour if you wish. The Codebreaker will try to duplicate the exact colours and positions of the code hidden behind the shield. Each time the Codebreaker places a row of Code Pegs (they are then left in position troughout the game), the Codemaker must give him the following information by placing the black and white Key Pegs in the Key Peg holes alongside the Code Pegs placed by the Codebreaker, or leaving holes vacant. Black Key Pegs are placed by the Codemaker in any of the Key Peg holes for every Code Peg placed by the Codebreaker which is in the same colour and in exactly the same position as one of the Code Pegs behind the shield. White Key Pegs are placed by the Codemaker in any one of the Key Peg holes when any hidden Code Peg behind the shield matches the Codebreaker s Code Pegs in colour only, but not in position. Example: If one red Code Peg is behind the shield and the Codebreaker places 2 red Code Pegs in the wrong position ONE white Key Peg is used. If the Codebreaker duplicates the hidden code behind the Codemaker s shield, the Codemaker places 4 black Key Pegs and reveals the hidden code. The games is over. Invicta Plastic Ltd, Leicester, England. Bestäm lämpliga klasser och associationer för ett program som spelar Mastermind med en person vid datorn som får agera "Codebreaker". Personen styr vad programmet skall göra i nästa steg med kommandon från tangentbordet. Det skall finnas kommandon för att starta ett nytt parti, göra en gissning, inspektera alla tidigare gissningar och resultat, att inspektera den hemliga koden och att avsluta hela spelsessionen. 5

Kapitel 2 Design smells Uppgift 2.1 Denna uppgift innehåller ett antal deluppgifter, där varje deluppgift har ett påstående och en anledning. För varje deluppgift, svara med ett av följande alternativ: A Både påståendet och anledningen är korrekta uttalanden och anledningingen 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 ett felaktigt uttalande. D Påståendet är felaktigt, men anledningen är ett korrekt uttalande. E Både påståendet och anledningen är felaktiga uttalanden. 6

T1 T2 T3 Påstående Det är svårt att göra ändringar i en stel (rigid) design. Upprepning av kod med små variationer skapar onödigt svårunderhållen kod. Att designen är ömtålig innebär att delar som skulle kunna återanvändas är för hårt knutna till systemet så att det kostar för mycket att bryta ut dem. Anledning En stel design innebär att det finns många beroenden till en klass. Designen kan bli onödigt komplex om man designar för potentiella förändringar och tillägg. Seghet kan drabba både mjukvaran och miljön och innebär att kostnaden för att bevara designen är högre än kostnaden att bryta mot den och göra ett hack. Föreslå en egen teorifråga baserat på Martins presentation av design smells. Formulera din fråga som ett påstående-anledning problem på ovanstående form. 7

Kapitel 3 Grundläggande designprinciper (SRP, OCP, DIP, DRY) Uppgift 3.1 a) Square i UML-diagrammet, figur 3.1, har ansvar att rita ut sig själv och att beräkna sin area. Detta bryter mot SRP (eng: Single Responsibility Principle). Ändra designen så att den inte bryter mot SRP. Visa lösningen med ett nytt UML-klassdiagram. GeometryApp GraphicalApp Square +draw() +area(): double GUI Figur 3.1: Exempel på brott mot SRP b) Kan brott mot SRP ge problem vid underhåll av kod? Motivera ditt svar kortfattat med hjälp av exemplet ovan och din kunskap om illaluktande design (eng: design smells) 8

Uppgift 3.2 Figuren nedan till vänster visar en design som bryter mot en av designprinciperna (utöver Open-Closed). Detta upptäcktes när man ville ändra hur utskriften ska göras och det hela rättades till i den högra bilden. Notera att det inte är korrekt Javakod, utan en pseudokod för att visa principen. 1. Vad heter principen som bryts"i den vänstra designen? 2. Förklara på vilket sätt den vänstra designen bryter mot principen och hur den högra löser problemet. 3. Förklara nackdelarna med den vänstra designen, m.a.p brott mot principen. Uppgift 3.3 Utforma klasser för att representera punkter och sträckor i planet och i rummet. Punkterna i planet ska representeras med två koordinater och punkter i rummet med tre koordinater. En koordinat ges av en int. En sträcka representeras av sina ändpunkter. Det skall finnas en metod för att beräkna längden av en sträcka. Implementeringen skall följa open/closed-principen så att man kan lägga till andra sorters punkter, t ex med fler koordinater eller flyttalskoordinater, utan 9

att ändra i skriven kod. Lösningen presenteras med klassdiagram, där attribut, metoder, synlighet, relationer, multiplicitet och riktning ska finnas med. Uppgift 3.4 Gör en design av ett paket för att hantera belopp i olika valutor. Uppdragsgivaren kräver att det skall vara möjligt att addera, subtrahera och jämföra belopp i en och samma valuta med exakt aritmetik utan att använda andra aritmetiska operationer än addition och subtraktion och utan att behöva skapa nya objekt för varje operation. givet ett belopp i en valuta kunna skapa ett belopp i en annan valuta med samma värde. För att kunna göra detta skall varje valuta ha en omräkningsfaktor av typ double. för varje valuta konstruera belopp baserat på de myntslag som finns, dvs kr och ören för svensk valuta, pund, shilling och pence för en gammal brittisk valuta och lire för den gamla italienska valutan. konvertera ett belopp till en sträng på decimalform. Addition, subtraktion och jämförelser av två belopp i olika valutor skall ge kompileringsfel eller kasta undantag. Lösningen presenteras med ett klassdiagram med ovannämnda valutor och alla generaliseringar, realiseringar, metoder och attribut samt en full Java-implementering av den svenska valutan. Uppgift 3.5 En tidigare upplaga av en lärobok i objektorienterad programmering och Java innehåller följande kod:... private Application application; private JButton b1, b2, b3; class ActionHandler implements ActionListener { public void actionperformed(actionevent e) { if (e.getsource() == b1) { application.action1(); else if (e.getsource() == b2) { application.action2(); else { application.action3(); Designen strider mot Open-Closed Principle; man kan inte lägga till ytterligare JButtons utan att modifiera klassen. Gör om designen så att detta blir möjligt. Designen skall innehålla de tre knapparna och händelsehanteringen. Undvik duplicerad kod. Redovisa designen med ett klassdiagram. 10