• No results found

Mönster. n n n n n. Visitor Decorator Extension Object State Taskmaster

N/A
N/A
Protected

Academic year: 2022

Share "Mönster. n n n n n. Visitor Decorator Extension Object State Taskmaster"

Copied!
33
0
0

Loading.... (view fulltext now)

Full text

(1)

Design mönster

(2)

Mönster

n

Visitor

n

Decorator

n

Extension Object

n

State

n

Taskmaster

(3)

Visitor

n Används för komplicerade datastrukturer där det finns en växande mängd operationer på denna

n Grafik exempel igen:

Line draw() ps()ink() svg()

Circle draw() ps()ink() svg()

Rec tangle draw() ps()ink() svg()

Group draw() ps()ink() svg() Shape

draw() ps()ink() svg()

0..*

0..*

(4)

Visitor

n

Varje ny operation kräver ändring av varje subklass

¤ Problem då ny funktionalitet ska sättas till i ett existerande system

¤ Klasser blir nertyngda med operationer

¤ Operationerna har inte nödvändigtvis mycket gemensamt

(5)

Visitor

n Introducera en visitor för varje funktion

ShapeVisitor visit(l : Line) visit(c : Circle) visit(r : Rectangle) visit(g : Group)

DrawVisitor Inkvisitor PsVisitor SvgVisitor

(6)

Visitor

n Klasshierarkin för Shapes får nu följande struktur

Line accept()

Circle accept()

Rec tangle accept()

Group accept() Shape

accept(s v : ShapeVisitor)

0..*

0..*

(7)

Visitor

n

Varje accept metod är implementerad på följande sätt:

n

Group klassen skickar dessutom besökaren vidare till sina gruppmedlemmar:

public void accept(ShapeVisitor v){

v.visit(this);

}

public void accept(ShapeVisitor v){

for ( Shape s : members) s.accept(v);

v.visit(this);

}

(8)

Visitor

n

Nu är det lätt att få operationer utförda på godtyckligt komplicerade Shape strukturer

¤ exempel: konvertering av ritning till postscript

Shape complexDrawing;

complexDrawing=//...bygge av komplex ritning ShapeVisitor ps=new ShapeVisitor();

complexDrawing.accept(ps);

(9)

Visitor

n Exempel på enkel Shape hierarki

n Anropen av metoder i objekten illustreras av följande sekvensdiagram:

ps : PsVisitor

complexDrawing : Group

: Line : Circle

(10)

Visitor

aClient

aClient ps :

ShapeVisitorps :

ShapeVisitor : Circle : Circle : Line : Line complexDrawing : Group complexDrawing :

Group 1: accept(ps)

2: acc ept(ps) 3: visit(this)

4: accept(ps) 5: visit(this)

6: visit(this)

(11)

Visitor - Sammanfattning

n

Separerar datastrukturen från operationerna på den

n

Ska endast användas då datastrukturen (Shape hierarkin) är stabil

¤ Om datastrukturen ändras är Visitor ganska meningslös

n

Visitor förhindrar att datastrukturklasserna blir fyllda av diverse orelaterade operationsuppsättningar som var och borde spridas ut i varje datastrukturklass

¤ Plugins för nya operationer

(12)

Decorator

n

Om man vill utöka beteendet hos en klass kan det ske med arv

¤ Kan inte ändras dynamiskt

¤ Vill man ge ett objekt flera nya egenskaper vid körningen fungerar inte arv

n

Bättre om objektet behåller sitt gamla gränssnitt och bara

utökas med nya egenskaper

(13)

Decorator

n

Fönster för att visa komponent

n

TextArean kanske inte får plats i fönstret – Dekorerar med rullister

Container contentPane getContentPane();

JTextArea textArea =new JTextArea(200,200);

contentPane.add(textArea);

Container contentPane getContentPane();

JTextArea textArea =new JTextArea(200,200);

JScrollPAne scrollPane=new JSCrollPane(textArea);

contentPane.add(scrollPane);

(14)

Decorator

n

Visar bara rullister när fönstret är för litet

n JScrollPane, Container och JTextArea ärver Component

¤ De ingående objektens gränssnitt bevaras

¤ Den utökade funktionaliteten är ett rent tillägg

(15)

Decorator

n Javas IO-arkitektur

n Olika streams för läsning – kan kopplas ihop på flera sätt

BufferedReader in =new BufferedReader(new FileReader(”text.txt”));

String line= in.readLine();

FileReader BufferedReader PushbackReader

Reader read() close()

(16)

Decorator generellt

ConcreteComponent

ConcreteDecorator1 addedState

addedBehaviour()

ConcreteDecorator2 Decorator

Component operation()

(17)

Decorator - sammanfattning

n

Större flexibilitet och dynamik än statiskt arv

¤ Varje kombination av dekorationer skulle behöva en egen klass

¤ Funktionalitet kan läggas till efter hand

n

En dekorator är inte identisk med originalobjektet även om den har samma gränssnitt

¤ Kan bli problem med jämförelseoperationer

¤ Man kan få många objekt att hålla reda på (jämför java.io paketet)

(18)

Extension object

n Varje objekt i en hierarki håller reda på en lista av extension objekts

¤ Mera komplicerat än decorator

¤ Men också mera flexibelt

PartExtension1<<interface>>

Part getExtension() addExtension()

PartExtension<<marker>>

PiecePartExtension1 PiecePart

AssemplyExtension1 Assemply

0..*

0..*

<<Map<String,PartExtension>>>

(19)

State

n

Implementation av ändlig tillståndsmaskin (finite state automata)

n

Erbjuder ett enkelt och elegant sätt att beskriva beteendet för komplicerade system.

n

Användbart till allt från grafiska användargränssnitt till

kommunikationsprotokoll

(20)

State

n Exempel: Parkeringsautomat

n Två händelser

¤ euro: Sätter in en euro i automaten

¤ ticket: Begär att man får en parkeringsbiljett

n Reaktionen på händelserna är olika beroende på tillstånd

idle coinInserted

euro / incSum()

euro / incSum()

ticket / giveTick et()

(21)

Tillstånds maskiner (Statemachines)

n Här består de av

n Händelser (events)

¤ Händelser från omvärlden som maskinen reagerar på

n Tillstånd (states)

¤ Reaktionen på en händelse bestäms av tillståndet som maskinen befinner sej i

n Aktioner (actions)

¤ Aktioner beskriver den effekt som en händelse har på omgivningen då maskinen är i ett visst tillstånd

(22)

State

n Informationen kan också presenteras i tabellform

idle coinInserted

idle

idle coinInserted

coinInserted

ticket euro

(23)

State - Implementation

n

Switch case

public void euro(){

switch ( state) { case IDLE:

state=COIN_INSERTED;

incSum();

break;

case COIN_INSERTED;

incSum();

break;

} }

public void ticket(){...}

(24)

State - Implementation

n

Enkelt och snabbt sätt att implememtera FSMs

¤ Fungerar bra för små tillståndsmaskiner

¤ Stora swítch-case block blir ofta oöverskådliga och svåra att hantera

¤ Dålig separation mellan logiken för tillståndsförändringar och aktioner

(25)

State - Transitionstabell

n

Kan också implementeras som tabell motsvarande tabell

representationen av tillståndsmaskinen

(26)

State - implementation

n

Enkelt att översätta från tabellrepresentation av tillståndsmaskinen

n

Lätt att underhålla jämfört med switch-case

n

Enkelt att ändra beteendet hos tillståndsmaskinen då programmet körs

n

Nackdelar:

¤ Långsam – Det tar tid att söka i tabeller

¤ En hel del kod måste skrivas för att få allt och funka

(27)

State - mönster

Idle CoinInserted

ParkingTicketDispenser state

incSum() giveTicket()

ParkingState

euro(p : ParkingTicketDispenser) ticket(p : ParkingTicketDispenser)

<<interface>>

(28)

State - implementation

n

Implementation av IDLE tillståndet

class Idle implements State{

public void euro(ParkingTicketDispenser p){

p.incSum();

p.setCoinInsertedState();

}public void ticket(){

} }

(29)

State - generellt

S1 S2 S3

Context state action1() action2()

State event1() event2() event3()

<<interface>>

(30)

State

n

Bra separering mellan aktioner och logiken för transitioner mellan tillstånd

¤ Lätt att ändra en utan att påverka den andra

n

Snabbare än tabell

¤ Antagligen lika snabbt som switch-case

¤ Bästa egenskaperna av båda tidigare lösningarna

n

Nackdelar

¤ Kräver en del arbete att skapa alla State subklasser - Många metoder gör ingenting

¤ Ingen centralt ställe att för att få överblick över logiken – svårt att underhålla

(31)

UML statemachines

s1 r1 entry/ AR1 exit/ AR2 do/ AR3

H r2

r1 entry/ AR1 exit/ AR2 do/ AR3

H r2

e2[ G2 ] / A2 ^E2 e1( p1,p2 )[ G1 ] / A1

s2

e3

e4

(32)

Taskmaster

n

Arkitektur för att hantera komplicerade sekvenser av händelser

n

Använder tillståndsmaskiner

n

Olika uppgifter (=tasks)

n

Exempel: MeasureTask

¤ Mäter avståndet mellan två punkter i ett ritprogram

¤ Användaren markerar vilka två punkter

(33)

Taskmaster

n Tillståndsmaskin beskriver interaktionen

GettingPoints Get FirstPoint

Get SecondPoint Get FirstPoint

MovePoint / Init

Get SecondPoint

GetPoint / RecordStartPt GetPoint / RecordEndPt

MouseUp

DoubleClick Cancel / ClearTask MovePoint / DragLine

References

Related documents

Endast definitioner och trigonometriska r¨ aknelagar f˚ ar anv¨ andas utan att de f¨ orst bevisas. Sida 2

[r]

[r]

V pr6cije nevhodn6 pouZit dvoji zp0sob odkazfr - odkaz na dilo v seznamu literatury na konci pr5ci a odkaz pod 6arou (navic stani

Föreningen registreras härmed för lotteriverksamhet under nedanstående period med ett insatsbelopp motsvarande högst 33 och 1/3 basbelopp under en femårsperiod.. Kommunen

y.cvcc adorarent lupplicesqve rogarent, ne ejus efient ad- petentiores muneris, fed inde defumerent, quantum noneftum eflet &amp; utile: qvod vero poft hoc pocuium miniflrabatur,

Men till skillnad från Bolivia och Honduras, som har en BNP per capita ungefär som Nicaragua, lever här närmare 80 procent av befolkningen med en.. inkomst under fattigdomströsklarna

Drag the pick along the neck until you reach the 5:th fret.. Make sure pick mutes the low