Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. ·...

34
Marco Faella Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern in Java”, di Cay Horstmann

Transcript of Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. ·...

Page 1: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

Marco Faella

Alcuni Design Pattern in Java

basato su “Progettazione del Software e Design Pattern in Java”,di Cay Horstmann

Page 2: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

Pattern ITERATOR

● Contesto:

1) Un oggetto (aggregato) contiene altri oggetti (elementi)

2) I clienti devono accedere a tutti gli elementi

3) L'aggregato non deve esporre la sua struttura interna

4) Più clienti devono poter accedere contemporaneamente

● Soluzione:

1) Definire una classe iteratore che recupera un elemento per volta

2) L'aggregato ha un metodo che restituisce un iteratore

Page 3: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

Diagramma del pattern ITERATOR

Page 4: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

Iteratori in Java

Page 5: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

5

Paradigma Model­View­Controller (MVC)

● Dividere le responsabilità tra:– i dati di interesse (model)– la loro presentazione (view)– l'interazione con l'utente (controller)

Page 6: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

6

Esempio: editor di pagine HTML

– Model: i caratteri che compongono la pagina● classe HtmlPage

– View: una vista carattere per carattere, o una vista WYSIWYG (what you see is what you get)

● classi HtmlRawView, HtmlRenderedView

– Controller: l'observer che riceve gli eventi dall'utente e produce modifiche sul modello 

● classe InsertListener

Page 7: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

7

Esempio: pagine HTML

Page 8: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

8

Pattern OBSERVER

● Contesto:– Un oggetto (soggetto) genera eventi

– Uno o più oggetti (osservatori) vogliono essere informati del verificarsi di tali eventi

● Soluzione:– Definire un'interfaccia con un metodo notify, che sarà implementata dagli 

osservatori

– Il soggetto ha un metodo (attach) per registrare un osservatore

– Il soggetto gestisce l'elenco dei suoi osservatori registrati

– Quando si verifica un evento, il soggetto informa tutti gli osservatori registrati, chiamando il loro metodo notify

Page 9: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

9

Diagramma del pattern OBSERVER

Page 10: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

10

Applicazione del pattern OBSERVER

Page 11: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

11

Esempio: funzioni matematiche

● Studio di funzioni parametriche di una variabile reale

● Ad esempio, parabole–   a x2 + b x + c; variabile: x; parametri: a, b, c

● Model: la funzione

● View: il suo grafico, o una tabella di valori

● Controller: le classi che rispondono allo spostamento degli slider e modificano i parametri della funzione

Page 12: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

12

Esempio: funzioni matematiche

Page 13: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

13

Pattern STRATEGY

● Contesto:1) Una classe (Context) può sfruttare diverse varianti di un algoritmo

2) I clienti della classe vogliono fornire versioni particolari dell'algoritmo

● Soluzione:1) Definire un'interfaccia (Strategy) che rappresenti un'astrazione 

dell'algoritmo

2) Per fornire una variante dell'algoritmo, un cliente costruisce un oggetto di una classe (ConcreteStrategy) che implementa l'interfaccia Strategy e lo passa alla classe Context

3) Ogni volta che deve eseguire l'algoritmo, la classe Context invoca il corrispondente metodo dell'oggetto che concretizza la strategia

Page 14: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

14

Diagramma del pattern STRATEGY

Page 15: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

15

Applicazione del pattern STRATEGY (1)

Page 16: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

16

Applicazione del pattern STRATEGY (2)

Page 17: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

17

Contenitori e componenti

// un contenitoreContainer x = new Container();x.setLayout(new FlowLayout());// aggiungo un componente al contenitorex.add(new Jbutton(“qui”));// aggiungo un altro componente al contenitorex.add(new Jbutton(“qua”));

// la finestraJFrame f = new JFrame();       Container c = f.getContentPane();c.setLayout(new FlowLayout());c.add(x); // x si comporta come un componente!c.add(new JButton(“quo”));...

output:

Page 18: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

18

Pattern COMPOSITE

● Contesto:1) Oggetti primitivi possono essere combinati in un oggetto composito

2) I clienti possono trattare un oggetto composito come primitivo● Soluzione:

1) Definire un'interfaccia (Primitive) che rappresenti un'astrazione dell'oggetto primitivo

2) Un oggetto composito contiene una collezione di oggetti primitivi 

3) Sia gli oggetti primitivi che quelli compositi implementano l'interfaccia Primitive

4) Nel realizzare un metodo dell'interfaccia Primitive, un oggetto composito applica il metodo corrispondente a tutti i propri oggetti primitivi, e poi combina i risultati ottenuti

Page 19: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

19

Diagramma del pattern COMPOSITE

Page 20: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

20

Applicazione del pattern COMPOSITE

Page 21: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

21

Barre di scorrimento

/* un'area di testo con 10 righe e 25 colonne */

Component area = new JTextArea(10, 25);

/* aggiungiamo le barre di scorrimento */

Component scrollArea = new JScrollPane(area);

Page 22: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

22

Pattern DECORATOR

● Contesto:

1) Si vuole decorare (ovvero migliorare, ovvero aggiungere funzionalità a) una classe componente

2) Un componente decorato può essere utilizzato nello stesso modo di uno normale

3) La classe componente non vuole assumersi la responsabilità della decorazione

4) L'insieme delle decorazioni possibili non è limitato

Page 23: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

23

Pattern DECORATOR

● Soluzione:

1) Definire un'interfaccia (Component) che rappresenti un'astrazione di un componente

2) Le classi concrete che definiscono componenti implementano l'interfaccia Component

3) Definire una classe (Decorator) che rappresenta la decorazione

4) Un oggetto decoratore contiene e gestisce l'oggetto che decora

5) Un oggetto decoratore implementa l'interfaccia Component 

6) Nel realizzare un metodo di Component, un oggetto decoratore applica il metodo corrispondente all'oggetto decorato e ne combina il risultato con l'effetto della decorazione

Page 24: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

24

Diagramma del pattern DECORATOR

Page 25: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

25

Applicazione del pattern DECORATOR

Page 26: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

26

COMPOSITE vs DECORATOR

Page 27: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

27

Pattern TEMPLATE METHOD

● Contesto:1) Un algoritmo è applicabile a più tipi di dati

2) L'algoritmo può essere scomposto in operazioni primitive. Le operazioni primitive possono essere diverse per ciascun tipo di dato

3) L'ordine di applicazione delle operazioni primitive non dipende dal tipo di dato

Page 28: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

28

Pattern TEMPLATE METHOD

● Soluzione:1) Definire una superclasse che abbia un metodo che realizza 

l'algoritmo e un metodo per ogni operazione primitiva

2) Le operazioni primitive non sono implementate nella superclasse (metodi astratti), oppure sono implementate in modo generico

3) Ridefinire in ogni sottoclasse i metodi che rappresentano operazioni primitive, ma non il metodo che rappresenta l'algoritmo

Page 29: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

29

Diagramma del patternTEMPLATE METHOD

Page 30: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

30

Applicazione del patternTEMPLATE METHOD

Page 31: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

31

Pattern FACTORY METHOD

● Contesto:1)Un tipo (creatore) crea oggetti di altro tipo (prodotto)

2)Le sottoclassi del tipo creatore devono creare prodotti di tipi diversi

3)I clienti non hanno bisogno di sapere il tipo esatto dei prodotti

Page 32: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

32

Pattern FACTORY METHOD

● Soluzione:1)Definire un tipo per un creatore generico

2)Definire un tipo per un prodotto generico

3)Nel tipo creatore generico, definire un metodo (detto metodo fabbrica) che restituisce un prodotto generico

4)Ogni sottoclasse concreta del tipo creatore generico realizza il metodo fabbrica in modo che restituisca un prodotto concreto

Page 33: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

33

Diagramma del patternFACTORY METHOD

Page 34: Alcuni Design Pattern in Javawpage.unina.it/m.faella/Didattica/LpII/pattern.pdf · 2016. 8. 2. · Alcuni Design Pattern in Java basato su “Progettazione del Software e Design Pattern

34

Applicazione del patternFACTORY METHOD