Mediator. DD2385 Programutvecklingsteknik Några bilder till föreläsning 10 6/ Designmönster: Mediator Facade State Decorator

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

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

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

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

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

Klasshierarkier - repetition

Laboration 2: Designmönster

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

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

Konstruktion av klasser med klasser

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

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

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

Laboration 2: Designmönster

Arv. Objektorienterad och komponentbaserad programmering

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

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

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

Föreläsning 13 Innehåll

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Tentamen. DD2385 Programutvecklingsteknik vt Tisdag 7 juni 2016 kl

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

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

DAT043 - Föreläsning 7

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

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

Objektorienterad Programmering (TDDC77)

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

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

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

OOP Objekt-orienterad programmering

Designmönster/Design patterns

OOP Objekt-orienterad programmering

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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

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

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

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

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

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

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

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

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

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Lösningar till tentamen i EDAF25

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen

Tentamen Programmering fortsättningskurs DIT950

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

TDDC76 - Programmering och Datastrukturer

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

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

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Android fortsättning. TDDD80 Mobila och sociala applikationer

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

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

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

Designmönster. Kapitel Kommandomönstret

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Properties. Användbara metoder som kan anropas i propertychanged:

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Agenda. Objektorienterad programmering Föreläsning 13

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

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

Tentamen NOA011 Systemarkitektprogrammet

LÖSNINGSFÖRSLAG

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

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

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

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Objektorienterad Programmering (TDDC77)

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

Föreläsning 3: Händelsestyrda program och användargränssnitt

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

Föreläsning 15: Repetition DVGA02

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

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

DAT043 - föreläsning 8

Tentamen. Grundläggande programmering i Java A 5p, DTAA

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

Tentamen. DD2385 Programutvecklingsteknik vt Tisdagen den 26 maj 2009 kl Inga hjälpmedel utom penna, sudd och linjal

Föreläsning 9: Arv och UML

Tentamen i Objektorienterad modellering och diskreta strukturer

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Transkript:

DD2385 Programutvecklingsteknik Några bilder till föreläsning 10 6/5 2014 Innehåll Designmönster: Mediator Facade State Decorator Mediator Objekt ska kommunicera ibland alla med alla! Var och en får en referens till alla andra ingen bra lösning! A B F A B F C G C G D E D E Detta är objekt, EJ klasser Detta är objekt, EJ klasser

Bättre med ett kommunikationsobjekt i mitten A B F Mediator-objekt Mönstret Mediator Två eller flera objekt interagerar ibland Objekten ska hållas oberoende av varandra (lös koppling) Gör så här: Klassernas kommunikation läggs i en Mediator - klass C D E G Mediator har referenser till objekten den kontrollerar Objekt, EJ klasser De interagerande klasserna har referens till sin (abstrakta) Mediator Mediator Kommentarer till Meditator Association kan användas istället för aggregat Mediator Colleague Viktigt att ConcColleague1 och ConcColleague2 endast har referens till den abstrakta Mediator. Varje kollega anropar sin Mediator som skickar vidare meddelandet till annan kollega ConcColleague1 ConcColleague2 Mediator-klasser är sällan återanvändbara Typexempel: Chattprogram ConcMediator Exempel från bok av Eric Braude: Harbour Application

Mediator Harbour Application PortMission Vessel + estimatetime() Ship TugBoat Mönstret Facade En enda klass representerar ett stort system Förenklar för användaren Lösare koppling mellan användaren och bibliotek Döljer klumpig uppbyggnad av bibliotek EnteringPort + estimatetime() LeavingPort + estimatetime() Facade + dosomething() BeingMaintained + estimatetime() pack1 pack2 pack3 Facade miniexempel Pattern Facade Simplifies a clients interface Facade + dosomething() pack1 pack2 pack3 import pack1. ; import pack2. ; c l a s s Facade { C l a s s 1 c l a s s 1 = new C l a s s 1 ( @XTU, 1 7 2 9 ) ; C l a s s 2 c l a s s 2 = new C l a s s 2 ( W, 3 6 2 ) ; void dosomething ( i n t k ) { c l a s s 1. method1 ( k, 3 k, HHW ) ; c l a s s 2. method2 ( 1. 0 / k, 0110 ) ; Det nya enkla gränssnittet utgörs av metoden dosomething() med en enkel parameter.

Mönstret State Ett objekts beteende ändras när dess tillstånd ändras Istället för if-satser som testar en tillståndsvariabel: Låt ett objekt ta hand om tillståndet. När tillståndet ändras, byt aktuellt tillståndsobjekt. c l a s s Game { i n t l e v e l ; void move1 ( ) { i f ( l e v e l == 1) {... // s i m p l e a c t i o n e l s e i f ( l e v e l == 2) {... // med. l e v e l a c t i o n e l s e i f ( l e v e l == 3) {... // advanced a c t i o n void move2 ( ) { i f ( l e v e l == 1) {... // s i m p l e a c t i o n e l s e i f ( l e v e l == 2) {... // med. l e v e l a c t i o n e l s e i f ( l e v e l == 3) {... // advanced a c t i o n c l a s s Game { i n t l e v e l ; S t a t e c u r r e n t S t a t e = new L e v e l 1 S t a t e ( t h i s ) ; void move1 ( ) { c u r r e n t S t a t e. move1 ( ) ; void move2 ( ) { c u r r e n t S t a t e. move2 ( ) ; void c h e c k s t a t e ( ) { // i f s t a t e change i s r e q u i r e d, change the // s t a t e o b j e c t. I f c l a u s e s needed h e r e! c u r r e n t S t a t e =... // change the s t a t e o b j e c t

State Context + request() state State + handle() ConcreteStateA ConcreteStateB + handle() + handle() Mönstret Decorator Ansvar och kompetens läggs till ett objekt dynamiskt Flexibelt alternativ till (för många) subklasser En Decorator har referens till sin Component Javas klasser för strömmar använder Decorator Annat exempel: En klass för fönster som man vill utöka med kombinationer av HScroll, VScroll, Border m.m. Decorator Component ConcreteComponent Decorator ConcreteDecoratorA - addedstate : ConcreteDecoratorB + addedioperation()

Decorator-exempel LibraryItem motsvarar Componenent Book, Audiobook motsvarar ConcreteComponent Decorator motsvarar Decorator Sellable, Borrowable motsvarar ConcreteDecorator abstract c l a s s L i b r a r y I t e m { p r i v a t e i n t numcopies ; p u b l i c i n t getnumcopies ( ) { return numcopies ; p u b l i c void setnumcopies ( i n t v ) { numcopies = v ; p u b l i c abstract void d i s p l a y ( ) ; c l a s s Book extends L i b r a r y I t e m { p r i v a t e S t r i n g a u t h o r ; p r i v a t e S t r i n g t i t l e ; p u b l i c Book ( S t r i n g author, S t r i n g t i t l e, i n t numc){ t h i s. a u t h o r = a u t h o r ; t h i s. t i t l e = t i t l e ; setnumcopies (numc ) ; p u b l i c void d i s p l a y ( ) { System. out. p r i n t l n ( \nbook ) ; System. out. p r i n t l n ( Author : + a u t h o r ) ; System. out. p r i n t l n ( T i t l e : + t i t l e ) ; System. out. p r i n t l n ( # Copies : + getnumcopies ( ) ) ; c l a s s Audiobook extends L i b r a r y I t e m { p r i v a t e S t r i n g v o i c e ; p r i v a t e S t r i n g t i t l e ; p r i v a t e i n t playtime ; // minutes p u b l i c Audiobook ( S t r i n g v o i c e, S t r i n g t i t l e, i n t numcopies, i n t playtime ) { t h i s. v o i c e = v o i c e ; t h i s. t i t l e = t i t l e ; setnumcopies ( numcopies ) ; t h i s. playtime = playtime ; p u b l i c void d i s p l a y ( ) { // p r i n t s v o i c e, t i t l e, numcopies, playtime // j u s t l i k e i n Book

abstract c l a s s D e c o r a t o r extends L i b r a r y I t e m { protected L i b r a r y I t e m l i b r a r y I t e m ; c l a s s S e l l a b l e extends D e c o r a t o r { protected i n t p r i c e ; protected i n t numbersold ; p u b l i c D e c o r a t o r ( L i b r a r y I t e m l i b r a r y I t e m ) { t h i s. l i b r a r y I t e m = l i b r a r y I t e m ; p u b l i c i n t getnumcopies ( ) { return l i b r a r y I t e m. getnumcopies ( ) ; p u b l i c void setnumcopies ( i n t c ) { l i b r a r y I t e m. setnumcopies ( c ) ; p u b l i c S e l l a b l e ( L i b r a r y I t e m l i b r a r y I t e m, i n t p r i c e ){ super ( l i b r a r y I t e m ) ; t h i s. p r i c e = p r i c e ; p u b l i c void s e l l I t e m ( ) { l i b r a r y I t e m. setnumcopies ( l i b r a r y I t e m. getnumcopies () 1); numbersold++; p u b l i c void d i s p l a y ( ) {... // next page c l a s s S e l l a b l e extends D e c o r a t o r { // as p r e v i o u s page p u b l i c void d i s p l a y ( ) { l i b r a r y I t e m. d i s p l a y ( ) ; // i m p o r t a n t import j a v a. u t i l. ; c l a s s Borrowable extends D e c o r a t o r { protected A r r a y L i s t <S t r i n g > b o r r o w e r s = new A r r a y L i s t <S t r i n g >(); p u b l i c Borrowable ( L i b r a r y I t e m l i b r a r y I t e m ){ super ( l i b r a r y I t e m ) ; System. out. p r i n t l n ( # Sold : +numbersold ) ; System. out. p r i n t l n ( P r i c e : +p r i c e+ Euro ) ; p u b l i c void borrowitem ( S t r i n g name ){ b o r r o w e r s. add ( name ) ; l i b r a r y I t e m. setnumcopies ( l i b r a r y I t e m. getnumcopies () 1); l i b r a r y I t e m. d i s p l a y ( ) skriver ut info om den komponent som dekoreras av S e l l a b l e p u b l i c void r e t u r n I t e m ( S t r i n g name ){ b o r r o w e r s. remove ( name ) ; l i b r a r y I t e m. setnumcopies ( l i b r a r y I t e m. getnumcopies ()+1); p u b l i c void d i s p l a y ( ) { s e e next page

c l a s s Borrowable extends D e c o r a t o r { // as p r e v i o u s page p u b l i c void d i s p l a y ( ) { l i b r a r y I t e m. d i s p l a y ( ) ; // f o r ( S t r i n g b orrower : b o r r o w e r s ) System. out. p r i n t l n ( b orrower : + borrower ) ; l i b r a r y I t e m. d i s p l a y ( ) skriver ut info om den komponent som dekoreras av Borrowable p u b l i c c l a s s DecoratorApp { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { // C r e a t e book and audiobook and d i s p l a y Book book = new Book ( L a u r i Lebo, The D e v i l..., 1 0 ) ; Audiobook audiobook = new Audiobook ( Stephen Fry, The Complete Harry P o t t e r C o l l e c t i o n, 23, 7 5 book. d i s p l a y ( ) ; audiobook. d i s p l a y ( ) ; // to be c o n t i n u e d // Make book s e l l a b l e, d i s p l a y, s e l l, d i s p l a y System. out. p r i n t l n ( \nbook made s e l l a b l e ) ; S e l l a b l e sbook = new S e l l a b l e ( book, 1 3 ) ; sbook. d i s p l a y ( ) ; sbook. s e l l I t e m ( ) ; sbook. d i s p l a y ( ) ; // Make audiobook borrowable, borrow and d i s p l a y System. out. p r i n t l n ( \ naudiobook made b o r r o w a b l e : ) ; Borrowable baudiobook=new Borrowable ( audiobook ) ; baudiobook. borrowitem ( P e t t e r Al ) ; baudiobook. borrowitem ( E l s i e Ek ) ; // Make audiobook a l s o s e l l a b l e, // s e l l and d i s p l a y System. out. p r i n t l n ( \ naudiobook made a l s o s e l l a b l e : ) ; S e l l a b l e sbaudiobook = new S e l l a b l e ( baudiobook, 1 8 sbaudiobook. s e l l I t e m ( ) ; sbaudiobook. s e l l I t e m ( ) ; sbaudiobook. s e l l I t e m ( ) ; sbaudiobook. d i s p l a y ( ) ; baudiobook. d i s p l a y ( ) ;