Design Patterns
Design Patterns - Elementi per il riuso di software ad oggetti | |
---|---|
Titolo originale | Design Patterns: Elements of Reusable Object-Oriented Software, |
Autore | Erich Gamma, John Vlissides, Richard Helm e Ralph Johnson |
1ª ed. originale | 1995 |
Genere | Saggio |
Sottogenere | Informatica |
Lingua originale | inglese |
Modifica dati su Wikidata · Manuale |
Design Patterns - Elementi per il riuso di software ad oggetti è un saggio del 1995. Nel libro gli autori riprendono un concetto dell'architetto Christopher Alexander, il design pattern, adattandolo all'informatica.
Anche se il concetto di pattern come soluzione ricorrente a un problema è anteriore all'uscita del libro, l'enorme successo riscosso da quest'ultimo ha contribuito notevolmente alla sua popolarizzazione, che ha dato inizio ad un'intera corrente filosofica della programmazione: il movimento pattern.
La filosofia di progettazione dei software mediante pattern mutua quella di ispirazione architettonica e urbana di Alexander, riportata in bibliografia.
I pattern sono utilizzati da molti dei migliori programmatori, quali Bruce Eckel, Andrei Alexandrescu ed Herb Sutter, e la loro conoscenza viene solitamente raccomandata a chiunque voglia progettare software a livello professionale, non solamente tramite il paradigma ad oggetti. In effetti i pattern non sono basati su di uno specifico linguaggio di programmazione, anche se nel libro gli esempi di codice sono in C++ e Smalltalk, con alcuni diagrammi di classe di tipo UML.
Il concetto stesso di pattern ne permette facilmente la traduzione in qualunque linguaggio: nel primo capitolo §1.1 della versione inglese, si dice:
«Se avessimo usato un linguaggio procedurale, avremmo incluso anche i design pattern "Ereditarietà", "Incapsulamento", "Polimorfismo" [...] Alcuni dei pattern spiegati sono implementati nativamente da alcuni linguaggi ad oggetti: ad esempio il MultiMethod del CLOS rende poco necessario il "Visitor"»
E in effetti, il meccanismo della interrupt chain usato in ambiente Intel non è che l'implementazione in assembly di un Observer pattern: gli INT costituiscono le varie notify(), mentre le funzioni registrate nella interrupt chain sono gli observer. Volendo, poi, il meccanismo che nelle versioni a 32 bit di Windows assorbe gli INT prima della chain, è una versione, sempre in assembly, del Decorator (v. Windows 95 - dentro il sistema per maggiori dettagli). Tuttavia, l'uso in un linguaggio object oriented ne facilita senz'altro l'implementazione e talvolta alcuni tipi vengono supportati nativamente.
Design pattern
Un design pattern descrive una soluzione generale a un problema di progettazione ricorrente, gli attribuisce un nome, astrae e identifica gli aspetti principali della struttura utilizzata per la soluzione del problema, identifica le classi e le istanze partecipanti e la distribuzione delle responsabilità, descrive quando e come può essere applicato. In breve definisce un problema, i contesti tipici in cui si trova e la soluzione ottimale allo stato dell'arte.
Nel libro gli autori, detti Gang of Four, cioè "banda dei quattro", identificarono 23 tipi di Design Pattern, suddivisi in 3 categorie: strutturali, creazionali e comportamentali. Inoltre, per la descrizione dei pattern, spesso si rende necessario il ricorso a pattern più semplici, dando così origine al cosiddetto linguaggio di pattern.
Edizioni
- Gamma, E., Helm, R., Johnson, R. e Vlissides, J., Design Patterns - Elementi per il riuso di software ad oggetti, Pearson Education Italia, 2002, p. 412, ISBN 88-7192-150-X.
Bibliografia
- Salingaros, N., Some notes on Christopher Alexander Archiviato il 15 aprile 2011 in Internet Archive.", UTSA
- Schulman, A. Windows 95 - dentro il sistema
Voci correlate
- Cocoa (software)
- Design pattern
- PLoP
- Nikos Salingaros
- A Pattern Language
Collegamenti esterni
- (EN) Edizioni e traduzioni di Design Patterns / Design Patterns (altra versione), su Open Library, Internet Archive.
- (EN) Design Patterns, su Goodreads.
- I 23 Design Patterns nel linguaggio Java (PDF), su eii.pucv.cl. URL consultato il 25 novembre 2010 (archiviato dall'url originale l'11 febbraio 2014).
V · D · M | |
---|---|
Creazionali | Abstract factory · Builder · Factory · Prototype · Singleton |
Strutturali | Adapter · Bridge · Composite · Container pattern · Decorator · Façade · Flyweight · Proxy |
Comportamentali | Chain-of-responsibility · Command · Interpreter · Iterator · Mediator · Memento · Observer · State · Strategy · Template method · Visitor |
Pattern di concorrenza | Active object · Balking · Binding properties · Double-checked locking · Event-based asynchronous · Guarded suspension · Join · Lock · Monitor · Proactor · Reactor · Read write lock · Scheduler · Thread pool · Thread-local storage |
Pattern architetturali | Front controller · Interceptor · MVC · n-tier · Specification · Publish–subscribe · Naked objects · Service locator · Active record · Identity map · Data Access Object · Data transfer object · ADR · Inversione del controllo |
Altri pattern | Blackboard · Business delegate · Composite entity · Dependency injection · Intercepting filter · Lazy loading · Mock object · Null object · Object pool · Servant · Twin · Type tunnel |
Libri | Design Patterns · Enterprise Integration Patterns |
Persone | Christopher Alexander · Erich Gamma · Ralph Johnson · John Vlissides · Grady Booch · Kent Beck · Ward Cunningham · Martin Fowler · Robert Martin · Jim Coplien · Douglas Schmidt · Linda Rising |
Comunità | The Hillside Group · The Portland Pattern Repository |