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

Relevanta dokument
Designmönster - EMW. Kent Petersson epost1: kentp@cs.chalmers.se epost2: kent.petersson@emw.ericsson.se URL:

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

Vad är mönsterspråk?

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

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

Designmönster för sociala användningssituationer

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML

Mönster. Ulf Cederling Växjö University Slide 1

Tentamen Programmering fortsättningskurs DIT950

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

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

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

Generic type declarations. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

Introduktionsmöte Innehåll

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

Föreläsning 8. Designmönster

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

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

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

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

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

Generics och polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Programmering B med Visual C

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

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

Laboration 2: Designmönster

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

DESIGN AV UNDERVISNING MED STÖD AV IT

Programmering = modellering

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

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

Laboration 2: Designmönster

Användningsfalls- mönster

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad programmering

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

SKOLFS. beslutade den XXX 2017.

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

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

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

Imperativ programmering. Föreläsning 2

Designmönster/Design patterns

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

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

TDDC76 - Programmering och Datastrukturer

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS

Teoridel (svaren direkt på lydelsen)

Objektorienterad analys och design

Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

TDP005. Föreläsning 3 - UML. Filip Strömbäck

EDAA01 Programmeringsteknik - fördjupningskurs

Kursplanering Objektorienterad programmering

Tentamen i Objektorienterad modellering och design Helsingborg

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

Objektorienterad konstruktion

Klasshierarkier - repetition

Laboration 2. returnerar true om det är omöjligt för roboten att göra move() utan att. exekveringsfel erhålls, annars returnera false.

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Länkade strukturer, parametriserade typer och undantag

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Historik: OOP. Objektorientering. Historik: OOP (forts) En Dum Fråga

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

Javautvecklare. Utbildningsfakta. 400 YH-poäng, 2 år

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

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

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Programmering A. Johan Eliasson

Föreläsning 1, vecka 6: Abstraktion genom objektorientering

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Introduktion till Entity Framework och LINQ. Källa och läs mer

Software Technology. Josef Svenningsson

Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Introduktion och OO. Objekt-orienterad Programmering och Design (TDA552) Alex Gerdes, HT-2018

OOP Objekt-orienterad programmering

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

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

Objektorienterad Systemutveckling Period 3

Algoritmer. Två gränssnitt

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Introduktion till arv

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

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

Design Patterns. En kort introduktion

UML: Exempel. Ett modelleringsspråk. UML: Ansvar. UML: tre huvudanvändningar. Exempel: En klass position storlek. UML Unified Modelling Language

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

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

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Föreläsning 15: Repetition DVGA02

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

Transkript:

Designmönster, introduktion. Vad är det? Varför skall man använda mönster? Kent Petersson EMW, Mölndal Datavetenskap, Chalmers epost1: kentp@cs.chalmers.se epost2: kent.petersson@emw.ericsson.se URL: http://www.cs.chalmers.se/~kentp 1 Designmönster, vad är det? Syfte: Ett mönster skall fånga och förmedla erfarenheter. jämför med algoritmer (sortering, sökning, optimering) och datastrukturer (binära sökträd, AVL-träd, hashtabeller) ursprungligen från arkitekten Christopher Alexander 2 Rev PA1 1

Designmönster, definitioner Definition: Each pattern describes a problem that occurs over and over again in our environment and then describes the core of the solution to that problem in such a way that you can use that problem in such a way that you can use this solution a million times over without ever doing the same way twice. (Alexander) se också projektets slutrapport. 3 Designmönster, vad är det? Olika slags mönster (olika intresseområden) Arkitektur (husbyggnad), Christopher Alexander Ett mönster beskriver både ett återkommande problem i vår omgivning, och grunden till hur man löser problemet på ett sådant sätt att man kan använda denna lösning miljontals gånger utan att agera på samma sätt varje gång Objekt-orienterad programmering (designmönster), GoF Ett designmönster namnger och identifierar de viktigaste aspekterna av ett återkommande problem och beskriver objekt och klasser för att lösa detta problem. Organisation,... 4 Rev PA1 2

Designmönster, vad är det? Olika abstraktionsnivåer för ett intresseområde: Idiom, mönster på programspråksnivå. Designmönster, mönster som handlar om objekt, klasser och deras interaktion. Arkitekturmönster, mönster som handlar om komponenter (delsystem) och deras interaktion. Man kan också tänka sig generella mönster som fungerar oberoende av intresseområde och abstraktionsnivå! 5 Varför Designmönster? Lämplig detaljeringsnivå Väldigt konkret nivå medför att mönstret bara passar på ett fåtal ställen men kostar väldigt lite att tillämpa. Till exempel: en snutt programkod i ett bestämt språk. För abstrakt nivå medför att lösningen inte innehåller någon konkret kunskap. Till exempel: för att lösa ett godtyckligt problem så kan man dela upp problemet i n delar och sedan lösa dessa var för sig. 6 Rev PA1 3

Varför Designmönster? Några anledningar: Ett sätt att dokumentera lösningar/erfarenhet och att återanvända bra idéer. Ett sätt att beskriva alternativa lösningar till ett programmeringsproblem och att dokumentera fördelar respektive nackdelar med de olika alternativen Mönster förmedlar kunskap mellan experter och noviser. Ett språk för att kommunicera mellan programmerare. Mönster förmedlar mer än bara en lösning: kontext, problem, krafter, lösning, implementering,... 7 Designmönster, ett exempel: State. Exempel: State (GoF) Låta ett objekts beteende (metoder) ändras när objektets tillstånd ändras Bra när förändring av antalet tillstånd kan förväntas. Vid en utökning av tillståndet skrivs bara ny kod (en ny klass) och befintlig kod blir orörd. 8 Rev PA1 4

Designmönster, ett exempel: State Problem: En mängd tillstånd {s1, s2, s3, } En mängd metoder {m1, m2, m3, } som är beroende på aktuellt tillstånd. s1 s2 s3 m1 m2 m3 9 Designmönster, ett exempel: State Exempel En mängd tillstånd för en fil, t.ex. {open, closed} En mängd metoder {open, close, read, write, seek} som är beroende på aktuellt tillstånd. read open write CLOSED OPEN close seek 10 Rev PA1 5

Designmönster, ett exempel: State Lösningar (strukturella): Dela först upp i metoder sedan i tillstånd (MT) metoder med case-satser och tillståndet som parameter vanligaste (funktionella) lösningen public void open () { switch currentstate { case opened: error; break; case closed: currentstate = opened;... 11 Designmönster, ett exempel: State Lösningar (strukturella): Dela först upp tillstånden sedan metoderna (TM) tillstånden är objekt och metoderna finns i objekten, varje objekttillstånd är arvinge till en klass State objektorienterad variant (mönstret State) public class Opened extends State { public void open() { error(...); }... } public class Closed extends State {... 12 Rev PA1 6

Designmönster, ett exempel: State Resultat: Statiskt sett, dvs. i en värld utan förändringar, ingen skillnad!! Om antalet tillstånd utökas: MT: lägg till en case-switch i varje metod. Allt ändras! TM: lägg till en ny klass med alla metoder. Inget ändras! Om antalet metoder utökas: MT: lägg till en ny metod med en case-switch för varje tillstånd. Inget ändras! TM: lägg till en ny metod i varje klass. Allt ändras! Vad skall man välja. Beror på vad som kan ändras! 13 Designmönster, ett annat exempel: Facade Används för att: ge ett enklare gränssnitt till ett komplext delsystem Motivering: många delsystem har ett komplext gränssnitt som bara behövs av ett fåtal användare. Många användare vill bara ha ett enkelt (default) gränssnitt. Exempel: ett kompilatordelsystem kan innehålla en lexikalanalys, syntaxanalys, typkontrollerare och kodgenerator. Endast ett fåtal användare behöver dessa delar separat. En fasad behöver bara innehålla en enda metod för att göra allt! 14 Rev PA1 7

Designmönster, ett annat exempel: Facade klienter Facade delsystem 15 Designmönster, tillämpning. Tillämpning av mönster: När man ska tillämpa mönster i ett projekt bör man rangordna vilka mönster som är viktigast och införa mönstren i den ordningen. När man tillämpar flera mönster som arbetar tillsammans så kan olika klasser spela en roll i ett mönster och en annan roll i ett annat mönster. 16 Rev PA1 8

Designmönster, kombination. Exempel på hur olika mönster kan samverka Vektoriserat ritprogram 17 Designmönster, tillämpning. Man har i forskningen om mönster alltmer börjat intressera sig för hur olika mönster kan fungera tillsammans. Mönsterspråk (Pattern Languages) har introducerats. A collection of patterns forms a vocabulary for understanding and communicating ideas. Such a collection may be skillfully woven together into a cohesive whole that reveals the inherent structures and relationsships ofits constituent parts toward fulfilling a shared objective 18 Rev PA1 9

Designmönster, var kan man lära mer? Examensarbete inom projektet: Design patterns Introduktion av många olika aspekter av mönster. Böcker: Gamma, Helm, Johnson, Vlissides = Gang of Four (GoF): Design patterns Addison Wesley Buschmann et al: Patterns of Software Architecture (POSA) J Wiley 19 Designmönster, var kan man lära mer? WWW: Mönsterhemsida http://hillside.net/patterns Projekthemsida: http://www.st.se/patterns 20 Rev PA1 10

Designmönster THE END 21 Rev PA1 11