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