SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
DESIGN PATTERN
Talk 7
1
mercoledì 10 luglio 13
Fallingwater, Frank Lloyd Wright, 1939
2
mercoledì 10 luglio 13
DESIGN PATTERN
Una soluzione progettuale generale
ad un problema ricorrente.
Wikipedia
Da: Christopher Alexander, 1977
3
mercoledì 10 luglio 13
DESIGN PATTERN
• Non sono algoritmi.
• Riguardano il come combinare gli oggetti.
• Risolvono problemi ricorrenti.
• Danno un linguaggio comune.
• Aumentano la comprensibilità del codice.
4
mercoledì 10 luglio 13
CODE SMELL
• Codice duplicato
• Metodo troppo lungo
• Classe troppo grande
• Troppi parametri
• Commenti di che?
• Nomi oscuri
• Dead code
5
mercoledì 10 luglio 13
DESIGN PATTERN
Creazionali Comportamentali Strutturali
6
mercoledì 10 luglio 13
DESIGN PATTERN
Creazionali Comportamentali Strutturali
7
mercoledì 10 luglio 13
SINGLETON
• Come assicurarmi di avere una unica istanza di
una certa classe?
8
mercoledì 10 luglio 13
FACTORY METHOD
•Come fa una classe astratta a istanziare un
oggetto senza saperne la classe concreta?
9
mercoledì 10 luglio 13
PROTOTYPE
• Come istanziare oggetti della stessa classe di un altro, senza
avere dipendenze sulla sua classe?
• La PrototypeFactory ha al suo interno dei prototipi.
• I prototipi implementano clone().
• La PrototypeFactory crea i nuovi oggetti per nome, clonando il
prototipo con quel nome.
10
mercoledì 10 luglio 13
STRATEGY
• Come cambio il comportamento di un oggetto,
dato che non posso cambiargli la classe?
11
mercoledì 10 luglio 13
STATE
• Come cambio in modo sicuro il comportamento
di un oggetto al variare del suo stato interno?
12
mercoledì 10 luglio 13
OBSERVER
O LISTENER
• Come posso far cambiare lo stato di tanti oggetti
quando un certo oggetto cambia stato?
13
mercoledì 10 luglio 13
ITERATOR
• Come posso iterare tra tutti gli elementi di una
collezione senza sapere come è fatta la
collezione?
• Come posso iterare tra tutti gli elementi di una
collezione senza averli a priori?
14
mercoledì 10 luglio 13
ADAPTER
• Come permetto a due classi di scambiarsi
messaggi, se il client non conosce l’interfaccia del
server (o se non la può usare)?
15
mercoledì 10 luglio 13
DECORATOR
• Come estendo il comportamento di un oggetto,
senza estendere la sua classe?
16
mercoledì 10 luglio 13
• Singleton
• Factory Method
• Prototype
• Strategy
• State
• Observer
• Iterator
• Adapter
• Decorator
mercoledì 10 luglio 13
SIMPLETON
• Pattern sovracomplicato per la soluzione di
problemi sempici.
• Utile per misurare la competenza degli
sviluppatori.
18
mercoledì 10 luglio 13
FALLACY METHOD
• Metodo ignoto che funziona, la cui esistenza
diventa evidente all’occorrenza di casi particolari.
19
mercoledì 10 luglio 13
PROTOTRY
• Tentativo quick & dirty: l’impegno è di riscriverlo
appena trovata una soluzione migliore. Mai.
20
mercoledì 10 luglio 13
ADOPTER
• È la casa dei metodi orfani. Diventa una grande
classe non mantenibile che contiene di tutto e di
più.
21
mercoledì 10 luglio 13
DETONATOR
• Molto comune ma difficile da rilevare.
• Esempio: calcoli degli anni a 2 cifre.
• Prima o poi scoppierà.
22
mercoledì 10 luglio 13
WORKFLOW E
STRUMENTI WEB
Prossima puntata:
mercoledì 10 luglio 13

Más contenido relacionado

Más de Federico Russo (20)

23 Sicurezza in BBox
23 Sicurezza in BBox23 Sicurezza in BBox
23 Sicurezza in BBox
 
21 Buzzwords
21 Buzzwords21 Buzzwords
21 Buzzwords
 
18 - InfluxDB
18 - InfluxDB18 - InfluxDB
18 - InfluxDB
 
19 - The Highlander Project
19 - The Highlander Project19 - The Highlander Project
19 - The Highlander Project
 
22 - Better Coding
22 - Better Coding22 - Better Coding
22 - Better Coding
 
20 - Ottimizzare le query
20 - Ottimizzare le query20 - Ottimizzare le query
20 - Ottimizzare le query
 
17 - Web Application Threats
17 - Web Application Threats17 - Web Application Threats
17 - Web Application Threats
 
BBox e vaadin7
BBox e vaadin7BBox e vaadin7
BBox e vaadin7
 
12 java modifiers
12 java modifiers12 java modifiers
12 java modifiers
 
10 Data caching
10 Data caching10 Data caching
10 Data caching
 
11 Java 7
11 Java 711 Java 7
11 Java 7
 
08 Workflow e strumenti web
08 Workflow e strumenti web08 Workflow e strumenti web
08 Workflow e strumenti web
 
06 Refactoring
06 Refactoring06 Refactoring
06 Refactoring
 
09 Transactions
09 Transactions09 Transactions
09 Transactions
 
05 unit testing
05 unit testing05 unit testing
05 unit testing
 
04-JVM
04-JVM04-JVM
04-JVM
 
03 - Ricorsione
03 - Ricorsione03 - Ricorsione
03 - Ricorsione
 
02 - Collezioni
02 - Collezioni02 - Collezioni
02 - Collezioni
 
01 - Ereditarietà e polimorfismo
01 - Ereditarietà e polimorfismo01 - Ereditarietà e polimorfismo
01 - Ereditarietà e polimorfismo
 
DataSnap
DataSnapDataSnap
DataSnap
 

07 Design Patterns

  • 2. Fallingwater, Frank Lloyd Wright, 1939 2 mercoledì 10 luglio 13
  • 3. DESIGN PATTERN Una soluzione progettuale generale ad un problema ricorrente. Wikipedia Da: Christopher Alexander, 1977 3 mercoledì 10 luglio 13
  • 4. DESIGN PATTERN • Non sono algoritmi. • Riguardano il come combinare gli oggetti. • Risolvono problemi ricorrenti. • Danno un linguaggio comune. • Aumentano la comprensibilità del codice. 4 mercoledì 10 luglio 13
  • 5. CODE SMELL • Codice duplicato • Metodo troppo lungo • Classe troppo grande • Troppi parametri • Commenti di che? • Nomi oscuri • Dead code 5 mercoledì 10 luglio 13
  • 6. DESIGN PATTERN Creazionali Comportamentali Strutturali 6 mercoledì 10 luglio 13
  • 7. DESIGN PATTERN Creazionali Comportamentali Strutturali 7 mercoledì 10 luglio 13
  • 8. SINGLETON • Come assicurarmi di avere una unica istanza di una certa classe? 8 mercoledì 10 luglio 13
  • 9. FACTORY METHOD •Come fa una classe astratta a istanziare un oggetto senza saperne la classe concreta? 9 mercoledì 10 luglio 13
  • 10. PROTOTYPE • Come istanziare oggetti della stessa classe di un altro, senza avere dipendenze sulla sua classe? • La PrototypeFactory ha al suo interno dei prototipi. • I prototipi implementano clone(). • La PrototypeFactory crea i nuovi oggetti per nome, clonando il prototipo con quel nome. 10 mercoledì 10 luglio 13
  • 11. STRATEGY • Come cambio il comportamento di un oggetto, dato che non posso cambiargli la classe? 11 mercoledì 10 luglio 13
  • 12. STATE • Come cambio in modo sicuro il comportamento di un oggetto al variare del suo stato interno? 12 mercoledì 10 luglio 13
  • 13. OBSERVER O LISTENER • Come posso far cambiare lo stato di tanti oggetti quando un certo oggetto cambia stato? 13 mercoledì 10 luglio 13
  • 14. ITERATOR • Come posso iterare tra tutti gli elementi di una collezione senza sapere come è fatta la collezione? • Come posso iterare tra tutti gli elementi di una collezione senza averli a priori? 14 mercoledì 10 luglio 13
  • 15. ADAPTER • Come permetto a due classi di scambiarsi messaggi, se il client non conosce l’interfaccia del server (o se non la può usare)? 15 mercoledì 10 luglio 13
  • 16. DECORATOR • Come estendo il comportamento di un oggetto, senza estendere la sua classe? 16 mercoledì 10 luglio 13
  • 17. • Singleton • Factory Method • Prototype • Strategy • State • Observer • Iterator • Adapter • Decorator mercoledì 10 luglio 13
  • 18. SIMPLETON • Pattern sovracomplicato per la soluzione di problemi sempici. • Utile per misurare la competenza degli sviluppatori. 18 mercoledì 10 luglio 13
  • 19. FALLACY METHOD • Metodo ignoto che funziona, la cui esistenza diventa evidente all’occorrenza di casi particolari. 19 mercoledì 10 luglio 13
  • 20. PROTOTRY • Tentativo quick & dirty: l’impegno è di riscriverlo appena trovata una soluzione migliore. Mai. 20 mercoledì 10 luglio 13
  • 21. ADOPTER • È la casa dei metodi orfani. Diventa una grande classe non mantenibile che contiene di tutto e di più. 21 mercoledì 10 luglio 13
  • 22. DETONATOR • Molto comune ma difficile da rilevare. • Esempio: calcoli degli anni a 2 cifre. • Prima o poi scoppierà. 22 mercoledì 10 luglio 13
  • 23. WORKFLOW E STRUMENTI WEB Prossima puntata: mercoledì 10 luglio 13