Verso una gestione dei processi aziendali basata sulla realtà
Design patterns
1. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Universit`a degli Studi di Roma Tor Vergata
Facolt`a di Scienze Matematiche Fisiche Naturali
Design Patterns
Adriana Farina
Anno Accademico 2012 / 2013
2. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Overview
Overview
• Design Patterns
Struttura di un pattern
Classificazione dei design patterns
• Pattern creazionali
Singleton
Prototype
Factory Method
Abstract Factory
• Pattern Strutturali
Facade
• Pattern Comportamentali
Iterator
Template Method
3. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
• Altri tipi di pattern
Data Access Object (DAO)
Data Tranfer Object (DTO)
Business Object (BO)
Service Locator
Front Controller
4. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Design Patterns
• I design patterns sono soluzioni ricorrenti a problemi comuni nel
campo del software design
• I design patterns in ambito informatico vengono formalmente
descritti per la prima volta nel libro Design Patterns: Elements of
Reusable Object-Oriented Software, i cui autori vengono spesso
chiamati la Gang of Four o GoF o Go4
• I design patterns NON rappresentano la progettazione completa di
una soluzione, che pu`o essere trasformata direttamente in codice
• Essi rappresentano piuttosto la descrizione di come risolvere un
problema che pu`o sorgere in differenti situazioni. I design patterns
sono una sorta di template rispetto alla soluzione di problemi
ricorrenti in determinati campi dell’informatica
5. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
• I design patterns possono velocizzare il processo di sviluppo del
software fornendo paradigmi di programmazione provati e testati
• I design patterns forniscono soluzioni generali, documentate in un
formato che non richiede specifiche legate ad un particolare problema
6. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Struttura di un pattern
• Un pattern pu`o avere una precisa struttura che lo descrive
Struttura di un pattern
• nome: identifica il pattern e deve rappresentarlo il pi`u possibile
• problema: rappresenta la descrizione della situazione alla quale si
pu`o applicare il pattern
7. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Struttura di un pattern
• soluzione: rappresenta la descrizione degli elementi costitutivi del
progetto con le loro relazioni, senza per`o scendere nei dettagli
implementativi. Quello che si vuole descrivere infatti `e un problema
astratto e la relativa configurazione di elementi adatta a risolverlo
• conseguenze: i risultati e i vincoli derivanti dall’applicazione del
pattern. Essi sono fondamentali, in quanto possono risultare
determinanti nella scelta del pattern stesso: le conseguenze
comprendono considerazioni legate alle risorse computazionali
(tempo e memoria), possono descrivere le implicazioni del pattern
con alcuni linguaggi di programmazione e l’impatto di quest’ultimo
con il resto del progetto
8. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Classificazione dei design patterns
• Ci sono diversi criteri per classificare i design patterns, i pi`u comuni
dei quali sono quelli che evidenziano il tipo di problema che si cerca
di risolvere
• Nel suo libro, la Gang Of Four individu`o 23 design pattern suddivisi
in 3 categorie
9. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Categorie dei design patterns
• Pattern Creazionali: rendono i componenti del sistema che usano
determinati oggetti indipendenti da come tali oggetti sono stati
creati, composti e rappresentati. I pattern creazionali nascondono i
costruttori delle classi e mettono al loro posto dei metodi creando
un’interfaccia
• Pattern Strutturali: permettono di riutilizzare oggetti esistenti,
utilizzando l’ereditariet`a e il polimorfismo per comporre interfacce
diverse o implementazioni di una stessa interfaccia. I pattern
strutturali riguardano il modo in cui pi`u oggetti sono collegati tra
loro per formare strutture complesse
• Pattern Comportamentali: riguardano l’assegnazione di
responsabilit`a agli oggetti, incapsulando il comportamento in un
oggetto e delegando ad esso determinate richieste. I pattern
comportamentali forniscono soluzione alle pi`u comuni tipologie di
interazione tra gli oggetti
12. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Singleton
Problema
Bisogna garantire che la classe abbia un’unica istanza, accessibile
attraverso un unico punto di ingresso alla classe stessa.
Tipicamente questo si verifica quando la classe mantiene informazioni che
devono essere condivise da pi`u parti dell’applicazione e non `e corretto
oppure non `e efficiente che queste informazioni siano duplicate
13. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Singleton
Soluzione
Si rende il costruttore della classe privato, in modo che non sia possibile
creare direttamente istanze di tale classe.
La classe viene dotata di un metodo static per ottenere un’unica istanza,
che viene memorizzata in un campo static privato della classe stessa.
Tuttavia possono esserci alcune variazioni a tale soluzione:
• l’istanza pu`o essere creata all’inizializzazione del programma, oppure
la prima volta che viene richiesta
• l’istanza pu`o appartenere a una sottoclasse della classe singleton
(come accade nel Factory Method)
14. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Singleton
Conseguenze
Con il singleton si ha che:
• l’accesso alla classe `e controllato e avviene attraverso l’unica istanza
che pu`o essere creata
• non occorre introdurre variabili globali per accedere all’unica istanza
• `e semplice estendere la classe singleton senza modificare il codice
che usa
• `e semplice passare da una singola istanza a pi`u istanze
16. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Prototype
Problema
Il tipo degli oggetti da creare deve essere determinato da da un’istanza
prototipale, che viene clonata per produrre nuovi oggetti. E’ necessario
copiare o clonare un oggetto gi`a esistente, piuttosto che istanziarlo e
settarne i valori, in quanto la prima soluzione risulta pi`u efficiente.
Inoltre, si hanno i seguenti requisiti:
• il sistema deve essere indipendente da come gli oggetti sono creati,
composti e rappresentati
• le classi da istanziare sono specificate a run-time
• le istanze di una classe possono avere solo poche combinazioni di
stati diversi
17. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Prototype
Soluzione
Si dichiara una classe astratta dotata di un metodo clone() e di un
dizionario di tutte le classi concrete ”clonabili”. Ogni altra classe per cui
questa classe astratta rappresenta un prototipo: deriva se stessa dalla
classe astratta, registra la propria istanza ”prototipale”, implementa il
metodo clone().
Il client invece di scrivere il codice che invoca l’operatore new, chiama
l’operatore clone sulla classe astratta, fornendo una stringa che indica la
particolare classe concreta derivata che desidera.
18. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Prototype
Conseguenze
Le conseguenze di questo pattern sono molteplici:
• si ha la possibilit`a di aggiungere e/o rimuovere prodotti a run-time.
Prototype permette di di aggiungere la classe di un nuovo prodotto
concreto semplicemente registrandone l’istanza prototipale presso il
client
• permette di specificare nuovi oggetti cambiando valori. Si
definiscono nuovi oggetti istanziando classi esistenti e registrando le
istanze come prototipi di oggetti client.
• permette di specificare nuovi oggetti cambiando struttura.
20. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Factory Method
Problema
Una classe ha bisogno di creare un oggetto (prodotto) che implementa
un’interfaccia, ma non si vuole che dipenda da una specifica
implementazione concreta tra quelle disponibili.
Un altro caso `e quello in cui una classe vuole delegare alle sottoclassi la
creazione d determinati oggetti.
21. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Factory Method
Soluzione
Si incapsula la creazione degli oggetti in un metodo.
Il metodo pu`o essere nella stessa classe che deve usare gli oggetti oppure
essere un metodo static di una classe diversa.
Altra soluzione, il metodo pu`o essere abstract, richiedendo quindi che
sia una sottoclasse a definirne l’implementazione, oppure essere concreto
e fornire un’implementazione di default.
22. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Factory Method
Conseguenze
Le sottoclassi hanno agganci (hooks) per estendere il comportamento
della classe base cambiando il tipo di prodotto che viene creato.
Inoltre `e possibile stabilire legami tra gerarchie di classi parallele.
24. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Abstract Factory
Problema
Il problema che si vuole risolvere `e per certi versi simile a quello del
factory method. Si ha una classe che ha bisogno di creare un insieme di
oggetti che implementano delle interfacce correlate, ma si vuole evitare
che dipenda da una specifica implementazione concreta tra quelle
disponibili.
Il sistema deve essere configurato con famiglie multiple di prodotti
(oggetti), dove una famiglia `e progettata per essere usata nel suo insieme.
Si vuole distribuire una libreria di prodotti rivelando solo le interfacce e
non le classi concrete che le implementano.
25. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Abstract Factory
Soluzione
Si definisce un’interfaccia AbstractFactory con metodi per creare diversi
prodotti e una o pi`u classi concrete che implementano questa interfaccia
in riferimento a una singola famiglia di prodotti.
Quindi, a run-time si costruisce un’istanza di una factory concreta che
viene usata per creare i prodotti stessi.
26. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Abstract Factory
Conseguenze
Le conseguenze che derivano dall’applicazione di questo pattern sono:
• nasconde le classi concrete: solo la factory sa quale classe concreta
viene istanziata
• consente di sostituire facilmente una famiglia di oggetti con un’altra
• garantisce che i prodotti usati insieme siano della stessa famiglia
28. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Facade
Problema
All’interno di uno stesso sistema ci sono sottosistemi complessi, costituiti
da numerose interfacce e classi.
Si vuole rendere le funzioni di un sottosistema, o un sottinsieme di esse,
accessibili in maniera semplificata, interagendo con una singola classe.
29. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Facade
Soluzione
Si realizza una classe di ”facciata” (facade appunto), istanziata con i
riferimenti agli oggetti che compongono il sottosistema da incapsulare.
Il client vede solo l’oggetto Facade; le operazioni su questo oggetto
provvedono ad attivare gli oggetti del sottosistema incapsulato.
30. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Facade
Conseguenze
Utilizzando questo pattern, l’interazione con il sottosistema incapsulato
diventa pi`u semplice.
Inoltre `e possibile modificare tale sottosistema senza modificare
l’interfaccia del Facade.
Tuttavia, non sempre tutte le funzionalit`a del sottosistema incapsulato
sono accessibili attraverso l’oggetto Facade: in alcune situazioni il client
deve comunque accedere alle funzioni di basso livello fornite direttamente
dalle classi del sottosistema.
32. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Iterator
Problema
Molte strutture dati, come collezioni o ”contenitori”, rappresentano
”aggregati” di oggetti.
Meccanismi di accesso che sono estremamente efficienti per una struttura
dati possono rivelarsi estremamente inefficienti per un’altra.
Quello che si vuole `e consentire al client di un aggregato di accedere
all’elenco degli oggetti in esso contenuti senza dipendere dalla struttura
dati effettivamente utilizzata per implementare l’aggregato stesso.
33. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Iterator
Soluzione
Si definisce un’interfaccia Iterator che rappresenta in maniera astratta
una posizione all’interno dell’aggregato. L’iteratore fornisce metodi per
verificare se ci sono altri elementi da esaminare, accedere all’elemento che
si trova nella posizione attualmente scandita e per passare alla posizione
successiva.
L’implementazione dell’aggregato `e associata a un’implementazione
concreta dell’iteratore, che il client pu`o ottenere attraverso un Factory
Method.
34. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Iterator
Conseguenze
Come conseguenza della presenza degli iteratori, si ha che il client di una
collezione di oggetti pu`o accedere in maniera efficiente ai contenuti della
collezione senza dipendere dalla conoscenza della specifica struttura dati
utilizzata.
35. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Access Object (DAO)
36. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Access Object (DAO)
Problema
Si vuole separare l’accesso ai dati dal resto dell’applicazione, al fine di
”proteggere” l’applicazione da eventuali modifiche allo strato di
persistenza, come ad esempio il cambiamento da un database a un altro.
Quello che si vuole `e implementare meccanismi per accedere e manipolare
i dati in una base di dati riuscendo per`o a disaccoppiare lo strato di
persistenza dal resto dell’applicazione.
Inoltre, si vuole fornire un’API uniforme per un meccanismo di
persistenza che sia adatta a diversi tipi di sorgenti di dati (RDBMS,
LDAP, OOODB, ...)
37. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Access Object (DAO)
Soluzione
Si usa uno strato intermedio, il Data Access Object (DAO), per astrarre e
incapsulare tutti gli accessi al database. Il Data Access Object gestisce le
connessioni con il database per caricare e salvare i dati.
Tale strato `e costituito da un insieme di classi dotato di metodi che si
occupano di gestire qualsiasi interazione con la sorgente dati.
38. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Access Object (DAO)
Conseguenze
Alcune delle conseguenze dell’applicazione di tale pattern sono:
• abilita la trasparenza
• rende possibile una pi`u facile migrazione verso altri storage engine
• fornisce una visione object-oriented e incapsula gli schemi del
database
• organizza tutto il codice che si occupa dell’accesso ai dati in un layer
separato
39. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Transfer Object (DTO)
40. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Transfer Object (DTO)
Problema
Si vogliono trasferire molti dati lungo pi`u layers di un’applicazione. In
particolare, si vuole che il client possa accedere ai componenti di diversi
layer per recuperare o aggiornare dati.
Inoltre, in uno scenario di invocazione remota, sorge il probema del
network overhead a causa delle numerose chiamate al server, sia per il
recupero dei dati sia per il salvataggio degli stessi.
41. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Transfer Object (DTO)
Soluzione
Utilizzare un Data Transfer Object per incapsulare i dati di business. Una
singola chiamata a un metodo `e usata per inviare e recuperare il Transfer
Object. Quando il cliente richiede dei dati di business, il DTO viene
istanziato e popolato con i rispettivi valori e poi passato al client. Esso
viaggia lungo tutti gli strati dell’applicazione.
42. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Transfer Object (DTO)
Conseguenze
Le conseguenze che derivano dall’utilizzo dei Data Transfer Objects sono:
• riduzione del traffico di rete
• semplificazione delle interfacce remote
• riduzione del codice duplicato
• trasferimento di una maggior quantit`a di dati in meno chiamate
remote
43. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Business Object (BO)
44. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Business Object (BO)
Problema
Si ha un’applicazione con un modello concettuale complesso, dotato di
una logica di business sofisticata, con regole di validazione complesse e
oggetti complessi correlati.
Si vuole separare lo stato di business e il relativo comportamento dal
resto dell’applicazione, incrementandone cos`ı coesione e riusabilit`a .
Inoltre, si vuole evitare la duplicazione del codice.
45. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Business Object (BO)
Soluzione
Si utilizza un insieme di Business Objects per separare i dati di business
dalla logica di business usando un object model. Si implementano un
insieme di classi che rappresentano un ulteriore strato all’interno
dell’applicazione che incapsulino i dati di business, cos`ı da separare la
logica di business dai dati di business.
46. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Business Object (BO)
Conseguenze
Tra le conseguenze che derivano dall’utilizzo di tale pattern abbiamo:
• evita la duplicazione del codice e favorisce la manutenibilit`a dello
stesso
• separa la logica di persistenza dalla logica di business
• promuove un’architettura di tipo service-oriented
• aggiunge un ulteriore strato di indirezione
47. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Service Locator
48. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Service Locator
Problema
Si vuole garantire una modalit`a uniforme e semplificata di localizzazione
delle risorse, utilizzando un sistema di lookup per i componenti di business
come ad esempio le API JNDI (Java Naming and Directory Interface).
Inoltre di vogliono isolare eventuali operazioni di lookup ”vendor
dependent” e nascondere eventuali problematiche di networking.
49. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Service Locator
Soluzione
Si usa un Service Locator per implementare e incapsulare i servizi e le
componenti di lookup. Un Service Locator nasconde i dettagli
implementativi dei meccanismi di lookup e incapsula le relative
dipendenze.
50. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Service Locator
Conseguenze
L’utilizzo di questo pattern consente di:
• fornire al client un servizio di lookup uniforme
• migliorare le performance di rete
• migliorare le performance lato client attraverso il caching
51. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Front Controller
52. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Front Controller
Problema
Si vuole fornire un punto di accesso centralizzato per la gestione delle
richieste al livello dello strato di presentazione, in modo da sparare la
logica di presentazione da quella di processamento delle richieste stesse.
Inoltre si vuole evitare di avere del codice duplicato e si vuole applicare
una logica comune a pi`u richieste.
53. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Front Controller
Soluzione
Si utilizza un Front Controller come punto di accesso iniziale per gestire
tutte le richieste connesse tra loro. Il Front Controller centralizza la logica
di controllo che dovrebbe altrimenti essere replicata per ogni richiesta.
54. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Front Controller
Conseguenze
Le conseguenze che derivano dall’utilizzo di tale pattern sono:
• centralizzazione del controllo
• miglioramento della riusabilit`a
• miglioramento della manutenibilit`a
• separazione dei ruoli all’interno dell’apllicazione