Designmönster/Design patterns

Relevanta dokument
Designmönster/Design patterns. Design patterns. Klassifikation av design patterns. Design patterns. Varför använda Design patterns?

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

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

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

Design Patterns. En kort introduktion

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

LULEÅ TEKNISKA UNIVERSITET

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Föreläsning 8. Designmönster

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

Laboration 2: Designmönster

Tentamen i Objektorienterad modellering och diskreta strukturer

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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

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

Laboration 2: Designmönster

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

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

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

Lösningar till tentamen i EDAF25

Fördjupande uppsats i datalogi

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

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

" «Observable» DataGenerator" betyder att klassen DataGenerator ärver från den abstrakta klassen Observable.

Principer, Pa+erns och Tekniker. Objekt-orienterad programmering och design Alex Gerdes, 2018

Principer, Patterns och Tekniker. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Principer, Patterns och Tekniker. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

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

DAT043 - Föreläsning 7

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen Programmering fortsättningskurs DIT950

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

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

Lösningar till tentamen i EDAF25

Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Självkörande bilar. Alvin Karlsson TE14A 9/3-2015

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

Undantag, Sammanfattning och Tentamensinfo. Objekt-orienterad programmering och design Alex Gerdes, 2016

Observer Pattern och MVC. Objekt-orienterad programmering och design Alex Gerdes, 2016

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Sammanfattning och Tentamensinfo Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

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

Tentamen LÖSNINGSFÖRSLAG

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

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

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

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

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

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

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

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

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA550 DAG: TID: 8:30 12:30

Laborationer, moment 4 5

Observer Pattern och MVC. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Reguljära uttryck. Reguljära uttryck. Nu kommer en siffra78 och en till SIFFRA(78) men utan 7kstuga SIFFRA(89)

Design Patterns Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

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

Tentamen NOA011 Systemarkitektprogrammet

Tentamen i Objektorienterad modellering och design

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:

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

Beijer Electronics AB 2000, MA00336A,

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

Laborationer, moment 4 5

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

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

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

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Recitation 4. 2-D arrays. Exceptions

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

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

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

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

Här kan du checka in. Check in here with a good conscience

Modulär design. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

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

Observer Pattern och MVC. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

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

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

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

Transkript:

Johan Eliasson Design patterns Designmönster/Design patterns Vad är det? Beprövade lösningar till återkommande programmeringsproblem Plattformsoberoende Beskrivs ofta med hjälp av UML Baseras på en bok Design Patterns, Gamma/Helm/Johnson/Vlissides (Gang of Four) Kan/bör återanvändas Ca 25 st i orginalboken Ger även en terminologi med vilken man kan 304 uttrycka designidéer på ett enklare sätt Varför använda Design patterns? Design patterns "Designing object-oriented software is hard and designing reusable object-oriented software is even harder." - Erich Gamma Beprövade lösningar sparar tid Man ska inte uppfinna hjulet igen Gör det möjligt för oss att dra nytta av andra personers erfarenheter på ett snabbt sätt Om jag t.ex. gör ett program som löser problem X och sedan ska göra ett helt annat system där samma problem X uppstår hur gör jag då för att återanvända lösningen? Design patterns är just en hjälpmedel för detta. Tillåter samtidigt oss att modifiera lösningarna så att de passar ett speciellt problem. 305 306

Design patterns Ett design pattern: Visar på hur man ska lösa ett problem rent allmänt (dvs inte i ett visst programspråk) Diskuterar olika för och nackdelar lösningen har. Hänvisningar till andra typer av lösningar på samma problem Ger exempel på hur man kan göra och även på "riktiga" användningar av lösningen. Designprinciper Programmera mot ett interface, inte en implementation Handlar om beroenden mellan klasser Lätt att lägga till beroenden, svårt att ta bort Avgränsa det som ändras Det ska vara lätt att byta ut/lägga till delar som kan ändras Sträva mot lösa beroenden mellan klasser Oftast ska klasser veta så lite som möjligt om varandra Synlighetsmodifierare 307 308 Klassifikation av design patterns Creational Patterns Handlar om hur objekt skapas Structural Patterns Handlar om hur klasser och objekt är strukturerade Behavioral Patterns Handlar om hur klasser och objekt interagerar 309 Creational Patterns Abstract factory Skapar objekt med okänd klass Builder Skiljer skapandet från representationen Factory method Sparar instantierandet till subklasser Prototype Skapar nya objekt från en prototyp Singleton Försäkran om enbart ett objekt av viss klass 310

Singleton Singleton (Creational pattern) Se till att en klass bara har en instans, och ge en global access till den T.ex. fönsterhanterare, filsystemhanterare Statiska metoder (t.ex. java.lang.math) är bättre för enskilda anrop public final class MySingletonClass private static MySingletonClass instance = new MySingletonClass(); Structural Patterns Adapter - Konverterar klassens gränssnitt public static MySingletonClass getinstance() return instance; /** There can be only one. */ private MySingletonClass() 311 312 Structural Patterns Bridge - Skiljer abstraktion från impl Composite - Aggregat som träd. Ex Component/Container i AWT/Swing Structural Patterns Decorator - Lägger till egenskaper. IO strömmarna är ett exempel på detta Facade - Ger enhetligt gränssnitt Flyweight - Hanterar många småobjekt Proxy - Surrogat för objekt (accesskontroll) 313 314

Behavioral Patterns Chain of responsibility - Överlämnar objekt Command - Kommando som objekt Interpreter - Språk ger grammatik&tolk Iterator - Accessar element sekventiellt Mediator - Kapslar in objektsamarbete Behavioral Patterns Memento - Sparar objektets tillstånd 315 316 Behavioral Patterns:2 Observer/Observable Pattern Observer - Sprider ett objekts ändring till andra State - Tillståndsmaskin som byter klass Strategy - Kapslar in algoritmer. Ex LayoutManagers i Java Template method - Låter subklassen göra delar av algoritmen Visitor - Representerar en operation som ska utföras på en objektstruktur 317 Basic Ideas: 1. The Observer pattern is used to keep consistency between related objects while minimizing their coupling and maximizing reusability (or independence) of the objects. 2. Creates a one-to-many relationship between a subject and its observers. All observers are notified when there is a change to the subject. The observers then query the subject to synchronize themselves. 318

Observer/Observable When to use this pattern: 1.When a change to one object requires the change of a variable number of other objects (not necessarily known at compile-time). 2.When an object should be able to talk to another object, but you don't want them essentially dependent on each other. Observer/Observable Benefits: 1.Can add new subjects and new observers all independently of all other subjects and observers. 2.Minimal dependence between subject and observer 3.Subject doesn't need to know how many observers it has. It simply broadcasts a change in state. 319 320 Observer/Observable Observer - observable Pitfalls: 1. Because observers don't know about each other, a simple update to an observer might cause a long chain of other updates. 2. Each observer decides whether it needs to update something when it receives the notification from the subject that something has changed. Therefore, complicated observers have to do a lot of work to figure out what changed when they receive a notification. 321 Ska den veta om de andra objekten? Ska dessa känna av om något har hänt? Johan Eliasson

Observer - Observable Observ har en lista där intresserade klienter lagras Java Basklass - Observable Interface - Observer erna anmäler sitt intresse Om nåt händer så signalerar Observ till klienterna om att något har hänt Observ Jan Erik Moström Jan Erik Moström import java.util.observable; public class IntrusionDetector extends Observable public void someonetriestobreakin() // Vi låtsas att denna metod anropas när någon // försöker hacka sig in i datorn. Detta objekt // meddelar nu detta till alla som är intresserade setchanged(); notifyobservers(); import java.util.observer; import java.util.observable; public class SysAdm implements Observer private String name; public SysAdm( String name, IntrusionDetector id ) this.name = name; id.addobserver( this ); public void update( Observable server, Object err ) System.out.println( name + " förhindrar intrång" ); Johan Eliasson Johan Eliasson

Johan Eliasson public class Demo public static void main( String[] argv ) // Skapa ett objekt som kollar om någon försöker // hacka sig in i systemet IntrusionDetector id = new IntrusionDetector(); // Skapa ett objekt som vill veta om någon // försöker hacka sig in. Ge det ett namn // och tala om vad det ska vara intresserad av SysAdm stric = new SysAdm( "stric", id ); // Nu låtsas vi att någon försöker ta sig in id.someonetriestobreakin();