際際滷

際際滷Share a Scribd company logo
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
Classi鍖cazione 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 di鍖erenti situazioni. I design patterns
sono una sorta di template rispetto alla soluzione di problemi
ricorrenti in determinati campi dellinformatica
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 speci鍖che 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: identi鍖ca 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 con鍖gurazione di elementi adatta a risolverlo
 conseguenze: i risultati e i vincoli derivanti dallapplicazione 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 limpatto di questultimo
con il resto del progetto
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Classi鍖cazione dei design patterns
 Ci sono diversi criteri per classi鍖care 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
uninterfaccia
 Pattern Strutturali: permettono di riutilizzare oggetti esistenti,
utilizzando lereditariet`a e il polimor鍖smo 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 lassegnazione 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 ununica istanza, accessibile
attraverso un unico punto di ingresso alla classe stessa.
Tipicamente questo si veri鍖ca quando la classe mantiene informazioni che
devono essere condivise da pi`u parti dellapplicazione e non `e corretto
oppure non `e e鍖ciente 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 ununica istanza,
che viene memorizzata in un campo static privato della classe stessa.
Tuttavia possono esserci alcune variazioni a tale soluzione:
 listanza pu`o essere creata allinizializzazione del programma, oppure
la prima volta che viene richiesta
 listanza 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:
 laccesso alla classe `e controllato e avviene attraverso lunica istanza
che pu`o essere creata
 non occorre introdurre variabili globali per accedere allunica istanza
 `e semplice estendere la classe singleton senza modi鍖care 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 unistanza
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 e鍖ciente.
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 speci鍖cate 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 loperatore new, chiama
loperatore 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 listanza prototipale presso il
client
 permette di speci鍖care nuovi oggetti cambiando valori. Si
de鍖niscono nuovi oggetti istanziando classi esistenti e registrando le
istanze come prototipi di oggetti client.
 permette di speci鍖care 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
uninterfaccia, ma non si vuole che dipenda da una speci鍖ca
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 de鍖nirne limplementazione, oppure essere concreto
e fornire unimplementazione 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 speci鍖ca implementazione concreta tra quelle
disponibili.
Il sistema deve essere con鍖gurato 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 de鍖nisce uninterfaccia 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 unistanza 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 dallapplicazione 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 unaltra
 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
Allinterno 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 sempli鍖cata, 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 loggetto 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, linterazione con il sottosistema incapsulato
diventa pi`u semplice.
Inoltre `e possibile modi鍖care tale sottosistema senza modi鍖care
linterfaccia del Facade.
Tuttavia, non sempre tutte le funzionalit`a del sottosistema incapsulato
sono accessibili attraverso loggetto 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 e鍖cienti per una struttura
dati possono rivelarsi estremamente ine鍖cienti per unaltra.
Quello che si vuole `e consentire al client di un aggregato di accedere
allelenco degli oggetti in esso contenuti senza dipendere dalla struttura
dati e鍖ettivamente utilizzata per implementare laggregato stesso.
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Iterator
Soluzione
Si de鍖nisce uninterfaccia Iterator che rappresenta in maniera astratta
una posizione allinterno dellaggregato. Literatore fornisce metodi per
veri鍖care se ci sono altri elementi da esaminare, accedere allelemento che
si trova nella posizione attualmente scandita e per passare alla posizione
successiva.
Limplementazione dellaggregato `e associata a unimplementazione
concreta delliteratore, 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 e鍖ciente ai contenuti della
collezione senza dipendere dalla conoscenza della speci鍖ca 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 laccesso ai dati dal resto dellapplicazione, al 鍖ne di
proteggere lapplicazione da eventuali modi鍖che 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 dellapplicazione.
Inoltre, si vuole fornire unAPI 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 dellapplicazione 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 dellaccesso 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 unapplicazione. 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 dellapplicazione.
Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Transfer Object (DTO)
Conseguenze
Le conseguenze che derivano dallutilizzo dei Data Transfer Objects sono:
 riduzione del tra鍖co di rete
 sempli鍖cazione 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 unapplicazione con un modello concettuale complesso, dotato di
una logica di business so鍖sticata, con regole di validazione complesse e
oggetti complessi correlati.
Si vuole separare lo stato di business e il relativo comportamento dal
resto dellapplicazione, 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 allinterno
dellapplicazione 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 dallutilizzo 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 unarchitettura 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 sempli鍖cata 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
Lutilizzo 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 dallutilizzo di tale pattern sono:
 centralizzazione del controllo
 miglioramento della riusabilit`a
 miglioramento della manutenibilit`a
 separazione dei ruoli allinterno dellapllicazione

More Related Content

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 Classi鍖cazione 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 di鍖erenti situazioni. I design patterns sono una sorta di template rispetto alla soluzione di problemi ricorrenti in determinati campi dellinformatica
  • 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 speci鍖che 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: identi鍖ca 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 con鍖gurazione di elementi adatta a risolverlo conseguenze: i risultati e i vincoli derivanti dallapplicazione 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 limpatto di questultimo con il resto del progetto
  • 8. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern Classi鍖cazione dei design patterns Ci sono diversi criteri per classi鍖care 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 uninterfaccia Pattern Strutturali: permettono di riutilizzare oggetti esistenti, utilizzando lereditariet`a e il polimor鍖smo 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 lassegnazione 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 ununica istanza, accessibile attraverso un unico punto di ingresso alla classe stessa. Tipicamente questo si veri鍖ca quando la classe mantiene informazioni che devono essere condivise da pi`u parti dellapplicazione e non `e corretto oppure non `e e鍖ciente 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 ununica istanza, che viene memorizzata in un campo static privato della classe stessa. Tuttavia possono esserci alcune variazioni a tale soluzione: listanza pu`o essere creata allinizializzazione del programma, oppure la prima volta che viene richiesta listanza 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: laccesso alla classe `e controllato e avviene attraverso lunica istanza che pu`o essere creata non occorre introdurre variabili globali per accedere allunica istanza `e semplice estendere la classe singleton senza modi鍖care 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 unistanza 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 e鍖ciente. 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 speci鍖cate 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 loperatore new, chiama loperatore 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 listanza prototipale presso il client permette di speci鍖care nuovi oggetti cambiando valori. Si de鍖niscono nuovi oggetti istanziando classi esistenti e registrando le istanze come prototipi di oggetti client. permette di speci鍖care 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 uninterfaccia, ma non si vuole che dipenda da una speci鍖ca 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 de鍖nirne limplementazione, oppure essere concreto e fornire unimplementazione 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 speci鍖ca implementazione concreta tra quelle disponibili. Il sistema deve essere con鍖gurato 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 de鍖nisce uninterfaccia 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 unistanza 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 dallapplicazione 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 unaltra 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 Allinterno 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 sempli鍖cata, 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 loggetto 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, linterazione con il sottosistema incapsulato diventa pi`u semplice. Inoltre `e possibile modi鍖care tale sottosistema senza modi鍖care linterfaccia del Facade. Tuttavia, non sempre tutte le funzionalit`a del sottosistema incapsulato sono accessibili attraverso loggetto 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 e鍖cienti per una struttura dati possono rivelarsi estremamente ine鍖cienti per unaltra. Quello che si vuole `e consentire al client di un aggregato di accedere allelenco degli oggetti in esso contenuti senza dipendere dalla struttura dati e鍖ettivamente utilizzata per implementare laggregato stesso.
  • 33. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern Iterator Soluzione Si de鍖nisce uninterfaccia Iterator che rappresenta in maniera astratta una posizione allinterno dellaggregato. Literatore fornisce metodi per veri鍖care se ci sono altri elementi da esaminare, accedere allelemento che si trova nella posizione attualmente scandita e per passare alla posizione successiva. Limplementazione dellaggregato `e associata a unimplementazione concreta delliteratore, 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 e鍖ciente ai contenuti della collezione senza dipendere dalla conoscenza della speci鍖ca 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 laccesso ai dati dal resto dellapplicazione, al 鍖ne di proteggere lapplicazione da eventuali modi鍖che 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 dellapplicazione. Inoltre, si vuole fornire unAPI 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 dellapplicazione 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 dellaccesso 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 unapplicazione. 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 dellapplicazione.
  • 42. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern Data Transfer Object (DTO) Conseguenze Le conseguenze che derivano dallutilizzo dei Data Transfer Objects sono: riduzione del tra鍖co di rete sempli鍖cazione 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 unapplicazione con un modello concettuale complesso, dotato di una logica di business so鍖sticata, con regole di validazione complesse e oggetti complessi correlati. Si vuole separare lo stato di business e il relativo comportamento dal resto dellapplicazione, 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 allinterno dellapplicazione 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 dallutilizzo 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 unarchitettura 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 sempli鍖cata 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 Lutilizzo 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 dallutilizzo di tale pattern sono: centralizzazione del controllo miglioramento della riusabilit`a miglioramento della manutenibilit`a separazione dei ruoli allinterno dellapllicazione