Laboration 2: Designmönster

Relevanta dokument
Laboration 2: Designmönster

Laborationer, moment 4 5

Laborationer, moment 4 5

Laboration 1: Figurer i hierarki

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

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

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

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

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

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

DAT043 - Föreläsning 7

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

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

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

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

Grundläggande programmering med C# 7,5 högskolepoäng

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

1. Definiera klassvariabel. 2. Instansvariabel för klass. Selektera klass i Browsern och tryck på statics. Definiera protokollnamn, Protocol->Add...

Introduktion. Lagom är bäst. OO eller ej? TDP004 Objektorienterad Programmering Fö 7 Objektorienterad design, tips och råd

Tentamen Programmering fortsättningskurs DIT950

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

Objektorienterad programmering D2

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

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

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

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

Designmönster/Design patterns

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized.

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

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

Information. Computer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Laboration 3 GUI-programmering

Laboration 1 - Grunderna för OOP i Java

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Classes och Interfaces, Objects och References, Initialization

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

public class BoundedCounter {

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

OOP Objekt-orienterad programmering

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

Tentamen. DD2385 Programutvecklingsteknik vt 2011 Tisdagen den 24 maj 2011 kl Hjälpmedel: penna, suddgummi, linjal

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

Objektorienterad programmering i Java I

ID1004 Laboration 4, November 2012

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

Laboration 3, uppgift En klass för en räknare

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Lösningsförslag övning 2.

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

Objektorienterad Programmering (TDDC77)

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

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

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

Design Patterns. Objekt-orienterad programmering och design Alex Gerdes, 2016

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

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

Malmö högskola 2008/2009 CTS

Akronymer. CD5130 OOP, fk. Mjukvarumönster. Mjukvarumönster. Mjukvarumönster, forts. Mjukvarumönster, forts

Lösningar till tentamen i EDAF25

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

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

Inkapsling (encapsulation)

Tentamen i Objektorienterad modellering och design

Designmönster. Kapitel Kommandomönstret

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

OOP Objekt-orienterad programmering

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

Objektorienterad programmering i Java I

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

OOMPA 2D1359 Föreläsning 3

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

Laboration 13, Arrayer och objekt

Transkript:

Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om en viss typ av design är bra eller inte. Designmönster verkar vara en lösning på dessa problem! Med designmönster försöker man beskriva återkommande bra lösningar som (helst) återfinns i flera olika system. Man försöker fånga kärnan i lösningen så att den går att återanvända i andra (inte nödvändigtvis lika) sammanhang. Man försöker också sätta namn på mönstren så att de som använder dem skall få kraftfullare metoder för att konceptuellt hantera problem men inte minst för att ge ett kraftfullare språk vid designdiskussioner med andra. Mål Efter laborationen skall deltagaren känna till, behärska och ha erfarenhet från att ha använt eller implementerat program som använder några grundläggande designmönster. Sista redovisningsvecka Vecka 44. Uppskattad tidsåtgång 13 timmar per gruppmedlem. Förberedelse Läs kapitel 15 om designmönster i Budd, avsnitt 18.2 i Pooley & Stevens, föreläsning 10 samt Gamma & Co:s artikel i kursbunten. Repetera också seminarium 5. Tips Se http://hillside.net/patterns/ med massor av länkar till olika beskrivningar av designmönster. Laboration 2: Designmönster 1 (5)

Obligatorisk uppgift Du skall studera några designmönster i mer detalj och försöka applicera dem på några små minimala (stiliserade) problem. i. Template method I mönstret Template method definierar en metod i en superklass ett algoritmskelett där detaljer "sparas" till subklasserna. Som i följande figur där en klass implementerar en template method som använder sig av andra metoder. Superklass templatemethod() methodx() methody() return methodx() + methody(); Subklass return α; methodx() methody() return β; Figur 1 Template method ½ Det är välkänt att en engelsk gallon är 4,546 liter och att en amerikansk gallon är 3,785 liter. En pint definieras (i båda systemen) som 1/8 gallon. Konstruera en abstrakt klass SIConverter som superklass till dom två konkreta klasserna ImperialConverter och USConverter. Implementera en metod pint() som en template method i den abstrakta klassen. Metoden skall returnera hur många liter en pint är genom att dividera resultatet av meddelandet gallon() med 8. Metoden gallon() skall i sin tur implementeras i respektive subklass och svara med hur många liter en gallon är i det aktuella systemet. Laboration 2: Designmönster 2 (5)

ii. Abstract Factory Implementera en abstrakt klass Human med två subklasser Man respektive Woman. Klasserna behöver inte ha några attribut eller instansmetoder, om ni inte tycker att det är nödvändigt. Human {abstract create(string) : Human Man Woman Figur 2 Abstract Factory exempel iii. Använd en abstract factory-teknik och implementera en klassmetod enligt följande i Human: public static Human create(string socsecno) {/* kodkropp */ Där socsecno skall vara ett personnummer. Om näst sista siffran i personnumret är udda så skall en instans av Man returneras och annars en instans av Woman. Se också till att det enda sättet att instanisera någon av dem konkreta klasserna är via den ovan angivna metoden. Tips: använd modifieraren protected (eller möjligen package) för konstruktören. Composition Mönstret Composistion är också känt under namnet Composite. Lite konkretiserat och exemplifierat ingår en composite i en klasshierarki som i följande illustration. Product * SomeProduct price : float Composite parts räkna ut priset som summan av alla delarnas priser Figur 3 Composition exempel Gör ett testprogram enlig denna illustration. Använd några "vanliga" produkter och en eller flera composites. Räkna ut priset på en composite enligt föreslagen "algoritm". Laboration 2: Designmönster 3 (5)

iv. Observer Implementera en klass Publisher som publicerar trycksaker och en Subscriber som prenumererar på dessa trycksaker. Det räcker om Publisher har en vektor till vilken man kan lägga till "emulerade" trycksaker i form av strängar. Använd mönstret Observer för att låta flera prenumeranter prenumerera på att nya trycksaker läggs in bland publicistens trycksaker. Dvs i metoden som lägger till en trycksak skall eventuella beroende objekt uppmärksammas. Tips: se Budd avsnitt 15.4 samt Gamma & co:s artikel i kursbunten. Vid Java-implementationen skall gränssnittet Observer och klassen Observable användas på lämpligt sätt. v. Adapter En adapter är ett objekt som anpassar gränssnittet mellan två objekt till ett som passar båda. Som i Figur 4 där client kommunicerar med adaptee med hjälp av en adapter som anpassar adaptee:s gränssnitt till target:s. Client Target request Adaptee specificrequest() Adapter adaptee request() adaptee specificrequest() Figur 4 Adapter klassdiagram Vi kan betrakta en adapter som ett filter mellan en klient och ett adapterat objekt, där adaptern översätter meddelanden och svar så att de passar båda (se Figur 5). Client 1:m Adapter 2:m 4:r 3:r Figur 5 Adapter sammarbetsdiagram Adaptee ½ Antag att vi har följande interface: public interface ClientInterface { public int value(); // Läs värde public void value(int v); // Ändra värde och public interface AdapteeInterface { public int getvalue(); // Läs värde public void setvalue(int v); // Ändra värde ½ Definiera gränssnitten. ½ Konstruera två klasser som implementerar respektive gränssnitt. ½ Konstruera en adapter som gör det möjligt för klienten att kommunicera med servern (dvs adaptee) med hjälp av det egna gränssnittet. ½ Skriv kod som testar det hela! Laboration 2: Designmönster 4 (5)

Extrauppgifter X1. Strategy Använd mönstret strategy för att konstruera en enkel räknare till vilken man kan "skicka" ett objekt som definierar startvärde, stoppvärde och steg. Det hela skulle sedan kunna se ut enligt följande: up = new CounterUp(1, 10, 2); down = new CounterDown(10, 0, 1); counterup = new MyCounter(up); counterdown = new MyCounter(down); counterup.start(); counterdown.start(); I MyCounter skall den variabel som bundits till det aktuella strategiobjektet, här med namnet counter, kunna användas på i stil följande sätt : while(!counter.atend()) {System.out.println(counter.value()); counter.next(); Om ni vill får ni göra andra detaljlösningar, bara ni använder mönstret strategy. Använd också gärna interface för att beskriva hur argumentet till konstruktören MyCounter skall se ut. Låt sedan respektive "Counter-klass" implementera detta gränssnitt. X2. Personregister med Observer, Strategy och Adapter Konstruera ett personregister i vilket objekt som implementerar följande gränssnitt kan läggas in: interface PersonInterface { public String name(); public String address(); public String email(); Till listan skall man kunna lägga till eller ta bort en person eller få en ut en vektor av alla personer som för närvarande finns i listan. Använd mönstret Observer så att objekt som är intresserade av förändringar av listan meddelas om en person läggs till eller tas bort från listan. Använd mönstret Strategy för att byta mellan olika sorteringsfunktioner som skall användas för att generera den ovan angivna vektorn av personer. Det skall åtminstone finnas tre olika sorters sorteringar (tex sortera växande efter namn, sortera fallande efter namn eller sortera växande med avseende på email). Slutligen använd mönstret Adapter för att se till att även objekt med följande gränssnitt kan läggas in i registret: interface SvensktPersonInterface { public String namn(); public String adress(); public String epost(); Laboration 2: Designmönster 5 (5)