Design Patterns

di Claudio De Sio Cesari


L'applicazione dell'Object Orientation ai processi di sviluppo software complessi, comporta non poche difficoltà. Uno dei momenti maggiormente critici nel ciclo di sviluppo, è quello in cui si passa dalla fase di analisi a quella di progettazione. In tali situazioni bisogna fare delle scelte di design, particolarmente delicate dal momento che potrebbero pregiudicare il funzionamento e la data di rilascio del software. In tale contesto (ma non solo) si inserisce il concetto di design pattern, importato nell'ingegneria del software direttamente dall'architettura. Infatti la prima definizione di pattern fu data da Cristopher Alexander, un importante architetto austriaco (insegnante all'università di Berkley - California) che iniziò a formalizzare tale concetto sin dagli anni '60. Nel suo libro "Pattern Language: Towns, Buildings, Construction" (Oxford University Press, 1977) Alexander definisce un pattern come una soluzione architetturale che può risolvere problemi in contesti eterogenei.

La formalizzazione del concetto di Design Pattern (pattern di progettazione), è ampiamente attribuita alla cosiddetta Gang of Four (brevemente GOF). La gang dei quattro, è costituita da Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, che nonostante provenissero da tre continenti diversi, in 4 anni di confronti catalogarono la prima serie di 23 pattern, che costituiscono il nucleo fondamentale della tecnica. Nel 1994 vede la luce il libro considerato la guida di riferimento per la comunità dei pattern: "Design Patterns: elements of reusable object oriented software" (Addison-Wesley). Altri autori in seguito hanno pubblicato testi che estendono il numero dei pattern noti...

Definizione di Design Pattern

I Design Patterns rappresentano soluzioni di progettazione generiche applicabili a problemi ricorrenti, all'interno di contesti eterogenei. Consapevoli che l'asserzione precedente potrebbe non risultare chiara al lettore che non ha familiarità con determinate situazioni, cercheremo di descrivere il concetto presentando, oltre che alla teoria, anche alcuni esempi di pattern. In questo modo si potranno meglio apprezzare sia i concetti sia l'applicabilità.

L'idea di base però, è piuttosto semplice. È risaputo che la bontà della progettazione è direttamente proporzionale all'esperienza del progettista. Un progettista esperto, risolve i problemi che si presentano, utilizzando soluzioni che in passato hanno già dato buoni risultati. I Gof non hanno fatto altro che confrontare le loro (ampie) esperienze nel trovare soluzioni progettuali, scoprendo così delle intersezioni abbastanza evidenti. Siccome queste intersezioni sono anche soluzioni che risolvono frequentemente problemi, in contesti eterogenei, possono essere dichiarate e formalizzate come Design Pattern. In questo modo, si mettono a disposizione soluzioni a problemi comuni, anche ai progettisti che non hanno una esperienza ampia come quella dei Gof. Quindi, stiamo parlando di una vera e propria rivoluzione!

Gof Book: formalizzazione e classificazione

I Gof hanno catalogato i pattern utilizzando un formalismo ben preciso. Ogni pattern infatti, viene presentato tramite il nome, il problema a cui può essere applicato, la soluzione (non in un caso particolare), le conseguenze. In particolare ogni pattern viene descritto tramite l'elenco degli elementi a loro parere maggiormente caratterizzanti:

  1. Nome e classificazione: importante per il vocabolario utilizzato nel progetto

  2. Scopo: breve descrizione di cosa fa il pattern e suo fondamento logico

  3. Nomi alternativi (se ve ne sono): molti pattern sono conosciuti con più nomi

  4. Motivazione: descrizione di uno scenario che illustra un problema di progettazione e la soluzione offerta

  5. Applicabilità: quando può essere applicato il pattern

  6. Struttura (o modello): rappresentazione grafica delle classi del pattern mediante una notazione (in questa sede si utilizzerà UML, ma sul libro al cui nascita è antecedente alla nascita di UML, vengono utilizzati OMT di Rumbaugh, e i diagrammi di iterazione di Booch)

  7. Partecipanti: le classi/oggetti con le proprie responsabilità

  8. Collaborazioni: come collaborano i partecipanti per poter assumersi le responsabilità

  9. Conseguenze: pro e contro dell'applicazione del pattern

  10. Implementazione: come si può implementare il pattern

  11. Codice d'esempio: frammenti di codice che aiutano nella comprensione del pattern (in questa sede si utilizzerà Java, ma sul libro al cui nascita è antecedente alla nascita di Java, vengono utilizzati C++ e SmallTalk)

  12. Pattern correlati: relazioni con altri pattern

  13. Utilizzi noti: esempi di utilizzo reale del pattern in sistemi esistenti

I 23 pattern presentati nel libro dei Gof sono classificati in tre categorie principali, basandosi sullo scopo del pattern:

Inoltre viene anche fatta una distinzione sulla base del raggio d'azione del pattern:

Possiamo riassumere i 23 pattern del libro dei Gof tramite questa tabella:

Scopo


Creazionale

Strutturale

Comportamentale

Raggio D'azione

Class


Factory Method

Adapter (class)

Interpreter
Template Method

Object

Abstract Factory
Builder
Prototype
Singleton

Adapter (object)
Bridge
Composite
Decorator
Facade
Flyweight
Proxy

Chain of responsability
Command
Iterator
Mediator
Memento
Observer
State
Strategy

 



HOME

CONTATTI