corso di ingegneria del softwareingsoft1/lezioni2008-2009/...ingegneria del software lezione11design...
TRANSCRIPT
![Page 1: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/1.jpg)
Corso di Ingegneria del Software
Paolo Bottoni
Lezione 11: Pattern di progetto
![Page 2: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/2.jpg)
Lezione11Design PatternIngegneria del Software 2
Obiettivi
• Introdurre il concetto di Pattern di Progetto
• Illustrare alcuni pattern significativi
• Mostrarne la specifica originale
• Introdurre una notazione per variabilità
![Page 3: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/3.jpg)
Design pattern
• Introdotti (23 pattern) in:Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, Design
Patterns: Elements of Reusable Object-Oriented Software, Wiley, 1995
• Soluzioni generiche a problemi ricorrenti
• Definiscono ruoli e comportamenti di classi
• Associati con:
– Descrizioni
– Esempi
– Motivazioni
– Varianti,
– Conseguenze
Lezione11Design PatternIngegneria del Software 3
![Page 4: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/4.jpg)
Principi
• Program to an 'interface', not an 'implementation'
• Favor 'object composition' over 'class inheritance'
• Astrazione da caratteristiche oggetti
Lezione11Design PatternIngegneria del Software 4
![Page 5: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/5.jpg)
Catalogazione
• Creational
– Singleton, AbstractFactory, FactoryMethod, Builder,
Prototype
• Structural
– Adapter, Bridge, Composite, Decorator, Façade, Proxy
• Behavioural
– Chain of responsibility, Command, Interpreter, Iterator,
Mediator, Memento, Observer, State, Strategy,
Template method, Visitor
Lezione11Design PatternIngegneria del Software 5
![Page 6: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/6.jpg)
Pattern di creazione
• Astrazione processo instanziazione
• Rendono sistema indipendente da creazione,
composizione, rappresentazione oggetti
• Orientati a classi
– Usano ereditarietà per variazione classe
• Orientati a oggetti
– Istanziazione delegata ad altro oggetto
Lezione11Design PatternIngegneria del Software 6
![Page 7: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/7.jpg)
Abstract factory
• Esempio: supporto LaF multipli
Lezione11Design PatternIngegneria del Software 7
![Page 8: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/8.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 8
![Page 9: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/9.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 9
+ createX()
<<Abstract Factory>>
AbstractFactory
<<Concrete Factory>>
Y+”Factory”
factories
<<Abstract Product>>
X
absProducts
+ “create”+X ()
<<Concrete Product>>
X+Y
concProducts
AbstractFactory>=0, factories>0, absProducts>0, factories=concProducts
AbstractFactory
<<creationOp>>
<<Client>>
Client
![Page 10: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/10.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 10
:Y+”Factory”
<<creationOp>>”create”+X ()
<<create>>
absProductsconcProducts
:X+Y
class
<<Concrete Product>>
X+Y
factories<<Concrete Factory>>
Y+”Factory”
class
AbstractFactory
:Client
<<Client>>
Client
class
![Page 11: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/11.jpg)
Builder
• Esempio: conversione da RTF ad altri formati
Lezione11Design PatternIngegneria del Software 11
![Page 12: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/12.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 12
![Page 13: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/13.jpg)
Descrizione comportamentale
Lezione11Design PatternIngegneria del Software 13
![Page 14: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/14.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 14
+ Director (Builder) <<constructor>>
+ Construct () <<builderOP>>
<<Director>>
Director<<Builder>>
BuilderBUILDER
<<ConcreteBuilder>>
ConcreteBuilder
+GetResult () <<getResults>>
<<Product>>
Product
concreteBuilders
Builder
Builder>=0, concreteBuilders>0, parts>0
+ BuildPart () <<buildParts>>
parts
<<builderRole>>
For all objects in structure {
BUILDER.BuildPart ()
}
![Page 15: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/15.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 15
aClient :
<<create>>CB : ConcreteBuilder
: Director<<create>>
new Director (CB)
<<builderOP>>
Construct () <<buildParts>>
BuildPart ()
concreteBuilders
parts
<<Director>>
Director<<ConcreteBuilder>>
ConcreteBuilder
classclass
Builder
![Page 16: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/16.jpg)
Factory method
• Esempio: framework per definire
applicazioni che creano documenti
– Classi principali sono astratte
Lezione11Design PatternIngegneria del Software 16
Specifica formale: struttur
![Page 17: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/17.jpg)
Usabile anche per dipendenze fra gerarchie
Lezione11Design PatternIngegneria del Software 17
![Page 18: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/18.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 18
![Page 19: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/19.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 19
<<Creator>>
Creator
+OP() <<opUsrFactMethod>>
+FactoryMethod () <<factoryMethod>><<Product>>
Product
<<ConcreteProduct>>
ConcreteProduct<<ConcreteCreator>>
ConcreteCreator
+FactoryMethod ( ) <<concFactoryMethod>>
creatorsreturn new ConcreteProduct ()
FactoryMethod
FactoryMethod>=0, ops>0, creators>0
ops
![Page 20: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/20.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 20
CC : ConcreteCreator
OP ()
FactoryMethod () <<concFactoryMethod>>
CP: ConcreteProduct<<create>>
return CP
creators
FactoryMethod
<<ConcreteProduct>>
ConcreteProduct<<ConcreteCreator>>
ConcreteCreator
class class
<<opUsrFactMethod>>
ops
![Page 21: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/21.jpg)
Prototype
• Esempio: ambiente grafico da specializzare
a creazione musicale
Lezione11Design PatternIngegneria del Software 21
![Page 22: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/22.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 22
![Page 23: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/23.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 23
+ Clone () <<cloneOp>>
<<Prototype>>
Prototype
+ Clone () <<concCloneOp>>
<<ConcretePrototype>>
ConcretePrototype
prototypes
Prototype
Prototype>=0, prototypes>0
<<Client>>
Client
+ Operation () <<clientOp>>
prototype
<<prototypeRel>>
prototype.Clone()
![Page 24: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/24.jpg)
Singleton
• Motivazione: garantire unicità istanza di
classe in applicazione
Lezione11Design PatternIngegneria del Software 24
![Page 25: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/25.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 25
![Page 26: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/26.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 26
- Instance : Singleton <<instance>>
- Singleton (…) <<constructor>>
+ GetInstance(…) : Singleton <<getter>>
+ Singleton (…)
# Singleton (…)
<<Singleton>>
Singleton
X
X
Singleton
Singleton>=0
![Page 27: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/27.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 27
<<Singleton>>
Singleton
GetInstance (…)
<<getter>><<instance>>
Instance: Singleton<<create>>
[Instance==null]opt
return Instance
class
Singleton
![Page 28: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/28.jpg)
Pattern strutturali
• Riguardano composizione di classi e oggetti in
strutture più ampie
• Composizione a livello di classe, basata su
ereditarietà
• Composizione a livello di istanza, basata su
composizione per ottenere nuove funzionalità
Lezione11Design PatternIngegneria del Software 28
![Page 29: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/29.jpg)
Adapter
• Esempio: riuso di classe per gestire testo
Lezione11Design PatternIngegneria del Software 29
![Page 30: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/30.jpg)
Descrizione struttura (classe o oggetto)
Lezione11Design PatternIngegneria del Software 30
![Page 31: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/31.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 31
<<Target>>
Target<<Adaptee>>
Adaptee<<Adapter>>
Adapter
+ X () <<request>> + X () <<AdapterRequest>> + Y () <<SpecificRequest>>
<<Target>>
Target<<Adaptee>>
Adaptee
<<Adapter>>
Adapter
+ X () <<request>> + X () <<AdapterRequest>> + Y () <<SpecificRequest>>
ad
ClassAdapter
requests
requests
ObjectAdapter
ClassAdapter >=0, requests>0
ObjectAdapter >=0, requests>0
<<adRole>>
<<Client>>
Client
<<Client>>
Client
![Page 32: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/32.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 32
:Adapter
<<request>>X ()
ad:Adaptee
<<SpecificRequest>>Y ()
requests
:Adapter
<<request>>
X ()
<<SpecificRequest>>Y ()
requests
:Client
<<Client>>
Client
class
<<Target>>
:Adapter
class
:Client
<<Client>>
Client<<Target>>
Adapter<<Adaptee>>
Adaptee
class classclass
ClassAdapter ObjectAdapter
![Page 33: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/33.jpg)
Bridge • Esempio: sviluppo multipiattaforma
Lezione11Design PatternIngegneria del Software 33
X
![Page 34: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/34.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 34
![Page 35: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/35.jpg)
Composite
• Esempio: gestione grafica astraendo da
natura oggetti presenti
Lezione11Design PatternIngegneria del Software 35
![Page 36: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/36.jpg)
Descrizione struttura
Lezione11Design PatternIngegneria del Software 36
![Page 37: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/37.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 37
* CHILDREN<<children>>
<<Component>>
Component
<<Leaf>>
Leaf
Composite
+ Add (Component) <<add>>
+ Remove (Component) <<remove>>
+ GetChild (int) : Component <<getChild>>
+ OP (…) <<absOperation>>
leafs
X
+OP (…)
for all c in CHILDREN:
c.OP (…)
<<Composite>>
Composite
operations
Composite>=0, operations>0, leafs>0
<<compOperation>>
<<Client>>
Client
![Page 38: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/38.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 38
C in CHILDRENloop
: Composite
<<compOperation>>
OP (…)
C: Component
OP (…)
operations
<<Composite>>
Composite<<Component>>
Component
class class
Composite
![Page 39: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/39.jpg)
Specifica formale
Lezione11Design PatternIngegneria del Software 39
<<Abstraction>>
Abstraction
<<Refined Abstraction>>
RefinedAbs
refinements
<<Implementor>>
Implementor
<<Concrete Implementor>>
CY
implementors
Bridge>=0, operations>0, implementors>0, refinements>0, extInterface>0
Bridge
IMP
+ OP () + OPI () <<operImpl>>
<<oper>>operations
+ ROP () <<refOper>>
extInterface
<<impRole>>
![Page 40: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/40.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 40
Bridge
: RefinedAbs
<<oper>>
OP ()
: Implementor
OPI ()<<operImpl>>
operations
<<Refined Abstraction>>
RefinedAbs<<Implementor>>
Implementor
class class
![Page 41: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/41.jpg)
Decorator
• Motivazione: aggiunta flessibile di
comportamenti a oggetti
Lezione11Design PatternIngegneria del Software 41
![Page 42: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/42.jpg)
Esempio e descrizione strutturale
Lezione11Design PatternIngegneria del Software 42
![Page 43: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/43.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 43
+ OP (…) <<operation>>
<<Component>>
Component
<<Decorator>>
Decorator
<<ConcreteDecorator>>
ConcDecorator
<<ConcreteComponent>>
ConcComponent
COMPONENT
concComps
concDecos
Decorator
Decorator>=0, concComps>0, concDecos>0
0..1 <<compRole>>
XX<<Strategy::Context>>
![Page 44: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/44.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 44
D: Decorator<<operation>>
1: OP (…)C: Component
COMPONENT<<operation>>
1.1: OP (…)
<<compRole>>
<<Decorator>>
Decorator<<Component>>
Component
class class
Decorator
![Page 45: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/45.jpg)
Facade
• Esempio: compilatore nasconde fasi diverse
Lezione11Design PatternIngegneria del Software 45
![Page 46: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/46.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 46
![Page 47: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/47.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 47
<<Facade>>
Facade
<<Subsystem Class>>
SUBClass
{isAbstract=ANY}
subsystems
+ OP () <<operation>>
facInterface
Facade
Facade>=0, facInterface>0, subsystems>0
<<Client>>
Client
XX
![Page 48: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/48.jpg)
Flyweight
• Esempio: riuso di istanze in molte situazioni
in un editor
Lezione11Design PatternIngegneria del Software 48
![Page 49: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/49.jpg)
Esempio
e
struttura
Lezione11Design PatternIngegneria del Software 49
![Page 50: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/50.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 50
<<FlyweightFactory>>
FlyweightFactory
+GetFlyWeight (key) <<getFW>>
<<Flyweight>>
Flyweight
+Operation (exState) <<oper>>
FLYWTS
<<ConcreteFlyweight>>
ConcFlyweight<<UnsharedConcreteFlyweight>>
UnsharedConcFlyweight
concFlyweights unsharedFlyweights
If (FLYWTS[key] exists) {
return existing flyweight
}
else {
create new flyweight;
add it to FLYWTS;
return the new flyweight;
}
Flyweight
Flyweight>=0, concFlyweights>0, unsharedFlyweights>=0
<<fwRole>>
X <<intrinsicState>> Y <<allState>>
![Page 51: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/51.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 51
CF: ConcFlyweight
aClient : X
<<create>>
concFlyweightsX
UF: UnsharedConcFlyweight
unsharedFlyweights
aClient : X
<<create>>
X
<<ConcreteFlyweight>>
ConcFlyweight
<<UnsharedConcreteFlyweight>>
UnsharedConcFlyweight
class
class
Flyweight
![Page 52: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/52.jpg)
Proxy
• Esempio e motivazioni: editor presenta immagine
solo quando necessario. In generale istanza
"esterna" a applicazione che la usa
Lezione11Design PatternIngegneria del Software 52
![Page 53: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/53.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 53
![Page 54: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/54.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 54
+ Request () <<absReqOp>>
<<Subject>>
Subject
+ Request () <<proxyReq>>
<<Proxy>>
Proxy
+ Request () <<realReq>>
<<RealSubject>>
RealSubject
requests
Proxy
Proxy>=0, requests>0
RSubject<<rsRole>>
![Page 55: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/55.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 55
P: Proxy
Request ()
<<proxyReq>>
RS: RealSubject
Request ()
<<realReq>>
requests
Proxy <<Proxy>>
Proxy<<RealSubject>>
RealSubject
class class
![Page 56: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/56.jpg)
Behavioral patterns
• Specializzazione algoritmi e assegnazione
responsabiltà tra oggetti
• Specificano anche forme di comunicazione e flussi di
controllo complessi
• Versione classi distribuisce comportamento fra classi
• Versione oggetti descrive cooperazione fra gruppi
Lezione11Design PatternIngegneria del Software 56
![Page 57: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/57.jpg)
Chain of Responsibility
• Esempio: livelli di help contestuali diversi o
risposta a eventi. Risponde il primo, in struttura
ordinata, in grado di farlo
Lezione11Design PatternIngegneria del Software 57
![Page 58: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/58.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 58
![Page 59: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/59.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 59
+ HandleRequest () <<absRequest>>
<<Handler>>
Handler
successor
+ HandleRequest () <<concRequest>>
<<Concrete Handler>>
ConcreteHandler
concreteHandlers
ChainOfResponsibility
ChainOfResponsibility>=0, concreteHandlers>0
0..1<<succRole>>
<<Client>>
Client
![Page 60: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/60.jpg)
Specifica formale comportamento
Lezione11Design PatternIngegneria del Software 60
h1 : Handler h2 : Handlersuccessor<<absRequest>>
1: HandleRequest () 1.1: HandleRequest ()
<<absRequest>>
<<Handler>>
Handler
class
class
:Client
<<Client>>
Client
class
ChainOfResponsibility
![Page 61: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/61.jpg)
Command
• Motivazione ed esempio: in framework,
permettere attivazione di comportamenti,
senza conoscerne l'interfaccia
• Comportamento reificato in oggetto
Lezione11Design PatternIngegneria del Software 61
![Page 62: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/62.jpg)
Contesto di esecuzione comando
Lezione11Design PatternIngegneria del Software 62
![Page 63: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/63.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 63
![Page 64: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/64.jpg)
Descrizione comportamento
Lezione11Design PatternIngegneria del Software 64
![Page 65: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/65.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 65
+ Execute () <<absExecuteOp>>
<<Command>>
Command<<Invoker>>
Invoker
<<Receiver>>
Receiver
+ Action () <<action>> + Execute () <<executeOp>>
+ ConcreteCommand (Receiver r)<<constructor>>
<<ConcreteCommand>>
ConcreteCommandREC
concreteCommands
Command
Command>=0, concreteCommands>0
+ Store (Command c) <<storeCommand>>
<<recRole>>
<<Client>>
Client
![Page 66: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/66.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 66
: Client
CC : ConcreteCommand
RO: Receiver
new ConcreteCommand (RO)<<constructor>>
IN: Invoker
Store (CC)<<storeCommand>>
Execute ()<<executeOp>>Action ()
<<action>>
concreteCommands
<<Client>>
Client
class
<<Receiver>>
Receiver<<Invoker>>
Invoker<<ConcreteCommand>>
ConcreteCommand
class classclass
Command
![Page 67: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/67.jpg)
Interpreter
• Rimpiazzare algoritmi specifici per ogni caso con
definizione di struttura di linguaggio dei casi.
Lezione11Design PatternIngegneria del Software 67
![Page 68: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/68.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 68
![Page 69: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/69.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 69
<<AbstractExpression>>
AbstractExpression
+Interpret (ctxt) <<intOp>>
<<TerminalExpression>>
TerminalExpression<<NonTerminalExpression>>
NonTerminalExpressions
terminals nonTerminals
+Interpret (ctxt) <<concIntOp>> +Interpret (ctxt) <<concIntOp>>
X
Interpreter
Interpreter>=0, terminals>0, nonTerminals>0
<<Client>>
Client
<<Context>>
Context
![Page 70: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/70.jpg)
Iterator
• Motivazione: esplorare una struttura secondo un
ordine, senza conoscerne l'implementazione
• Capacità di esplorazione dettata da oggetto esplorato
Lezione11Design PatternIngegneria del Software 70
![Page 71: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/71.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 71
![Page 72: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/72.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 72
<<Iterator>>
Iterator
+First <<first>>
+Next () <<next>>
+IsDone () <<isDone>>
+CurrentItem () <<current>>
<<Aggregate>>
Aggregate
+createIterator () <<absCreate>>
<<ConcreteAggregate>>
ConcreteAggregate
+CreateIterator () <<concCreate>>
<<ConcreteIterator>>
ConcreteIterator
return new ConcreteIterator (this)
concreteAggregates
Iterator
Iterator>=0, concreteAggregates>0, concreteIterators>0
+ CreateIterator () <<concCreate>>
concreteIterators
![Page 73: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/73.jpg)
Mediator • Motivazione: gestione
centralizzata di dipendenze
fra diversi oggetti
• Esempio: finestra di dialogo
complessa
Lezione11Design PatternIngegneria del Software 73
![Page 74: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/74.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 74
![Page 75: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/75.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 75
<<Colleague>>
Colleague
<<ConcreteColleague>>
ConcColleague
<<Mediator>>
MediatorMED
<<ConcreteMediator>>
ConcMediator
concColleagues
Mediator
Mediator>=0, concColleagues>0
<<medRole>>
![Page 76: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/76.jpg)
Memento
• Memorizza stato interno di un oggetto a un
determinato istante e permette di recuperarlo
Esempio: gestione undo
Lezione11Design PatternIngegneria del Software 76
![Page 77: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/77.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 77
![Page 78: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/78.jpg)
Descrizione comportamento
Lezione11Design PatternIngegneria del Software 78
![Page 79: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/79.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 79
<<Originator>>
Originator
+SetMemento (Memento m) <<setMemOp>>
+CreateMemento () <<createMemOp>>
<<Memento>>
Memento
+GetState () <<getStOp>>
+SetState () <<setStOp>>
- State <<stateProp>> - State <<statePropMem>>
<<Caretaker>>
Caretaker
MEM
Memento
Memento>=0
<<memRole>>
![Page 80: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/80.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 80
m->GetState()
St:
m: Memento
SetMemento
State=St
CreateMemento
new Memento(State)
m: Memento
Activity diagrams
![Page 81: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/81.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 81
CT: Caretaker O: Originator
CreateMemento ()<<createMemOp>>
M: Memento<<create>>
SetState () <<setStOp>>
SetMemento (M)<<setMemOp>> GetState ()
<<getStOp>>
Memento<<Caretaker>>
Caretaker<<Originator>>
Originator
<<Memento>>
Memento
class class
classSequence
diagram
![Page 82: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/82.jpg)
Observer
• Esempio: mantenere coerenza vista con
cambiamenti oggetto rappresentato
Lezione11Design PatternIngegneria del Software 82
![Page 83: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/83.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 83
![Page 84: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/84.jpg)
Descrizione comportamento
Lezione11Design PatternIngegneria del Software 84
![Page 85: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/85.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 85
+ Attach (Observer) <<attachOp>>
+ Detach (Observer) <<detachOp>>
+ Notify () <<notifyOp>>
<<Subject>>
Subject
<<ConcreteSubject>>
ConcreteSubject
+ Update () <<updateOp>>
<<Observer>>
Observer
Observers
+ GetState () <<getStateOp>>
+ SetState (…) <<setStateOp>>
<<ConcreteObserver>>
ConcreteObserver
+ Update () <<updateOp>>
Subject
subjects
observers
Observer
Observer>=0, subjects>0, observers>0
<<obsRole>>
<<subjRole>>
![Page 86: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/86.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 86
: ConcreteSubject
SetState ()Notify ()<<notifyOp>>
O: Observer
Update ()<<updateOp>>
GetState ()<<updateOp>>
<<setStateOp>>
subjects
O in Observersloop
<<ConcreteSubject>>
ConcreteSubject<<Observer>>
Observer
class class
Observer
![Page 87: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/87.jpg)
State
• Esempio: gestione stati protocollo, sistema
risponde in modo diverso a stessi messaggi
Lezione11Design PatternIngegneria del Software 87
![Page 88: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/88.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 88
![Page 89: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/89.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 89
<<Context>>
Context
+Request () <<reqOP>>
<<State>>
State
+Handle () <<handleOP>>
state
<<ConcreteState>>
ConcreteState
+Handle () <<concHandleOP>>
states
State>=0, states>0
State
![Page 90: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/90.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 90
: Context
Request ()
<<reqOP>>
state: State
Handle ()
<<handleOP>>
State <<Context>>
Context<<State>>
State
classclass
![Page 91: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/91.jpg)
Strategy
• Motivazione: situazioni in cui ci possono essere
diversi algoritmi per uno stesso problema. Scelta
dipende da varie circostanze. Non si vogliono
codificare tutte le scelte
• Esempio: gestione interruzioni di linea
Lezione11Design PatternIngegneria del Software 91
![Page 92: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/92.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 92
![Page 93: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/93.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 93
<<Context>>
Context<<Strategy>>
Strategy
+OPSTR () <<strAlgOP>>
strategy
<<ConcreteStrategy>>
ConcreteStrategy
strategies
Strategy>=0, strategies>0, algInterface>0
Strategy
algInterface
![Page 94: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/94.jpg)
Template method
• Motivazione: operazioni definite in termini astratti e
raffinate da implementazioni concrete
• Esempio: applicazione con diversi tipi di documenti
Lezione11Design PatternIngegneria del Software 94
![Page 95: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/95.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 95
![Page 96: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/96.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 96
+TempMethod () <<tempMethod>>
+ PrimOP () <<primOP>>
<<AbstractClass>>
AbstractClass
primOperations
<<ConcreteClass>>
ConcreteClass
TemplateMethod
TemplateMethod>=0, primOperations>0,
subclasses>0
subclasses
![Page 97: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/97.jpg)
Visitor
• Motivazione: esplorazione di strutture con
tipi diversi per eseguire operazioni diverse
• Esempio: attraversamento AST per controllo
dei tipi e generazione di codice
Lezione11Design PatternIngegneria del Software 97
![Page 98: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/98.jpg)
Meccanismo dj base
Lezione11Design PatternIngegneria del Software 98
![Page 99: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/99.jpg)
Descrizione strutturale
Lezione11Design PatternIngegneria del Software 99
![Page 100: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/100.jpg)
Descrizione comportamento
Lezione11Design PatternIngegneria del Software 100
![Page 101: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/101.jpg)
Specifica formale: struttura
Lezione11Design PatternIngegneria del Software 101
![Page 102: Corso di Ingegneria del Softwareingsoft1/Lezioni2008-2009/...Ingegneria del Software Lezione11Design Pattern 2 Obiettivi • Introdurre il concetto di Pattern di Progetto • Illustrare](https://reader033.vdocuments.pub/reader033/viewer/2022050214/5f6097abbd2e0a042a3b2a31/html5/thumbnails/102.jpg)
Specifica formale: comportamento
Lezione11Design PatternIngegneria del Software 102