SlideShare a Scribd company logo
1 of 54
Download to read offline
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
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
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
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
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
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
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
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
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
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Singleton
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
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)
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
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Prototype
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
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.
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.
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Factory Method
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.
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.
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.
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Abstract Factory
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.
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.
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
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Facade
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.
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.
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.
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Iterator
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.
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.
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.
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Access Object (DAO)
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, ...)
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.
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
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Transfer Object (DTO)
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.
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.
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
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Business Object (BO)
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.
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.
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
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Service Locator
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.
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.
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
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Front Controller
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.
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.
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

More Related Content

Similar to Design patterns

Usare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web ApplicationUsare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web Application
extrategy
 
Cap1 2 3_intro_astrazioni
Cap1 2 3_intro_astrazioniCap1 2 3_intro_astrazioni
Cap1 2 3_intro_astrazioni
Riccardo Grosso
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capture
fcospito
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capture
fcospito
 
Maurizio savoca doc flow
Maurizio savoca doc flowMaurizio savoca doc flow
Maurizio savoca doc flow
DOCFLOW
 

Similar to Design patterns (20)

Usare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web ApplicationUsare i Design System - Un approccio Frameworkless per la tua Web Application
Usare i Design System - Un approccio Frameworkless per la tua Web Application
 
Framework Concettuale - lantichi
Framework Concettuale - lantichiFramework Concettuale - lantichi
Framework Concettuale - lantichi
 
Framework concettuale
Framework concettualeFramework concettuale
Framework concettuale
 
Object Oriented Design
Object Oriented DesignObject Oriented Design
Object Oriented Design
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 
Computational thinking - Il pensiero computazionale
Computational thinking - Il pensiero computazionaleComputational thinking - Il pensiero computazionale
Computational thinking - Il pensiero computazionale
 
Design patterns - parte 1
Design patterns - parte 1Design patterns - parte 1
Design patterns - parte 1
 
Cap1 2 3_intro_astrazioni
Cap1 2 3_intro_astrazioniCap1 2 3_intro_astrazioni
Cap1 2 3_intro_astrazioni
 
Luca Tateo - Un chicco di coffee. Scenari pedagogici per la collaborazione in...
Luca Tateo - Un chicco di coffee. Scenari pedagogici per la collaborazione in...Luca Tateo - Un chicco di coffee. Scenari pedagogici per la collaborazione in...
Luca Tateo - Un chicco di coffee. Scenari pedagogici per la collaborazione in...
 
Coding, pattern e pensiero computazionale
Coding, pattern e pensiero computazionaleCoding, pattern e pensiero computazionale
Coding, pattern e pensiero computazionale
 
Catalogo corsi Emerasoft 2013 - 2014
Catalogo corsi Emerasoft 2013 - 2014Catalogo corsi Emerasoft 2013 - 2014
Catalogo corsi Emerasoft 2013 - 2014
 
Progetazione FAD (old)
Progetazione FAD (old)Progetazione FAD (old)
Progetazione FAD (old)
 
Repository pattern slides v1.1
Repository pattern slides v1.1Repository pattern slides v1.1
Repository pattern slides v1.1
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capture
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capture
 
Modelli concettuali e architetture Object-Oriented per la progettazione e lo ...
Modelli concettuali e architetture Object-Oriented per la progettazione e lo ...Modelli concettuali e architetture Object-Oriented per la progettazione e lo ...
Modelli concettuali e architetture Object-Oriented per la progettazione e lo ...
 
C#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivereC#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivere
 
Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...
Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...
Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...
 
Maurizio savoca doc flow
Maurizio savoca doc flowMaurizio savoca doc flow
Maurizio savoca doc flow
 
Verso una gestione dei processi aziendali basata sulla realtà
Verso una gestione dei processi aziendali basata sulla realtàVerso una gestione dei processi aziendali basata sulla realtà
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
  • 10. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
  • 11. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern Singleton
  • 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
  • 15. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern Prototype
  • 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.
  • 19. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern Factory Method
  • 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.
  • 23. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern Abstract Factory
  • 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
  • 27. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern Facade
  • 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.
  • 31. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern Iterator
  • 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