Design pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Annullate le modifiche di Francescost (discussione), riportata alla versione precedente di Michele.gaiga |
mNessun oggetto della modifica |
||
Riga 1:
{{nota disambigua|descrizione=il libro|titolo=[[Design Patterns]]}}
Nell'[[ingegneria del software]], un '''design pattern''' (modello, tipo di progettazione) può essere definito "una soluzione progettuale generale a un problema ricorrente". Esso non è una libreria o un componente di [[software]] riusabile, quanto una descrizione o un modello da applicare per risolvere un problema che può presentarsi in diverse situazioni durante la progettazione e lo sviluppo del software.
La differenza tra un [[algoritmo]] e un design pattern (modello di progettazione) è che il primo risolve problemi computazionali, mentre il secondo è legato agli aspetti progettuali del software.
==Storia==
Riga 31:
I pattern creazionali nascondono i costruttori delle classi e mettono dei metodi al loro posto creando un'interfaccia. In questo modo si possono utilizzare oggetti senza sapere come sono implementati.
* L'[[Abstract factory]] (fabbrica astratta) fornisce un'interfaccia per creare famiglie di oggetti connessi o dipendenti tra loro, in modo che non ci sia necessità da parte degli utilizzatori di specificare i nomi delle classi concrete all'interno del proprio codice.
* [[Anonymous subroutine objects]]
* Il [[Builder]] (costruttore) separa la costruzione di un oggetto complesso dalla sua rappresentazione, in modo che il processo di costruzione stesso possa creare diverse rappresentazioni.
* Il [[Factory method]] (metodo fabbrica) fornisce un'interfaccia per creare un oggetto, ma lascia che le sottoclassi decidano quale oggetto istanziare.
* La [[Lazy initialization]] (inizializzazione pigra) è la tattica di instanziare un oggetto solo nel momento in cui deve essere usato per la prima volta. È utilizzato spesso insieme al pattern ''factory method''.
* Il [[Prototype]] (prototipo) permette di creare nuovi oggetti clonando un'oggetto iniziale, o prototipo.
* [[Singleton]], il cui scopo è assicurare che di una classe possa essere creata una sola istanza.
Riga 42:
I pattern strutturali consentono di riutilizzare degli oggetti esistenti fornendo agli utilizzatori un'interfaccia più adatta alle loro esigenze.
* L'[[Adapter pattern|Adapter]] (adattatore) converte l'interfaccia di una classe in una interfaccia diversa
* [[Bridge pattern|Bridge]] permette di separare l'astrazione di una classe dalla sua implementazione, per permettere loro di variare indipendentemente.
* Il [[Composite]] (compostito), utilizzato per dare la possibilità all'utilizzatore di manipolare gli oggetti in modo uniforme, organizza gli oggetti in una struttura ad albero.
* [[Container pattern|Container]] (contenitore)
* Il design pattern [[Decorator]] (decoratore) consente di aggiungere metodi a classi esistenti durante il ''run-time'' (cioè durante lo svolgimento del programma), permettendo una maggior flessibilità nell'aggiungere delle funzionalità agli oggetti.
* [[Extensibility pattern|Extensibility]] (estendibilità)
* Il [[Façade pattern|Façade]] (facciata) permette, attraverso un'interfaccia più semplice, l'accesso a sottosistemi che espongono interfaccie complesse e diverse tra loro.
* [[Flyweight pattern|Flyweight]] ("peso piuma"), che permette di separare la parte variabile di una classe dalla parte che può essere riutilizzata.
* [[Proxy pattern|Proxy]] (delegato) fornisce una rappresentazione di un oggetto di accesso difficile o che richiede un tempo importante per l’accesso o creazione. Il Proxy consente di posticipare l’accesso o creazione al momento in cui sia davvero richiesto.
* [[Pipes and filters|Pipes and filters]] (condotti e filtri)
* [[Private class data pattern|Private class data]] (dati di classe privati)
===Pattern comportamentali===
I pattern comportamentali forniscono soluzione alle più comuni tipologie di interazione tra gli oggetti.
* [[Chain of responsibility pattern|Chain of Responsibility]] (catena di responsabilità) diminuisce l'accoppiamento fra l'oggetto che effettua una richiesta e quello che la soddisfa, dando a più oggetti la possibilità di soddisfarla
* Il [[Command pattern|Command]] (comando) permette di isolare la porzione di codice che effettua un'azione dal codice che ne richiede l'esecuzione.
* [[Event listener|Event Listener]] (ascoltatore di eventi)
* [[Hierarchical visitor pattern|Hierarchical Visitor]] (visitatore di gerarchia)
* [[Interpreter pattern|Interpreter]] (internprete)
* L'[[Iterator (design pattern)|Iterator]] (iteratore) risolve diversi problemi connessi all'accesso e alla navigazione attraverso gli elementi di una struttura dati, senza esporre i dettagli dell'implementazione e della struttura interna del contenitore.
* Il [[Mediator pattern|Mediator]] (mediatore) si interpone nelle comunicazioni tra oggetti, allo scopo di aggiornare lo stato del sistema quando uno qualunque di essi comunica un cambiamento del proprio stato.
* Il design pattern [[Memento pattern|Memento]] è l'operazione di estrarre lo stato interno di un oggetto, senza violarne l’incapsulazione, e memorizzarlo per poterlo ripristinare in un momento successivo.
* L'[[Observer pattern|Observer]] (osservatore) definisce una dipendenza uno a molti fra oggetti diversi, in maniera tale che se un oggetto cambia il suo stato, tutti gli oggetti dipendenti vengono notificati del cambiamento avvenuto e possono aggiornarsi.
* [[Single-serving visitor pattern|Single-serving Visitor]]
* [[State pattern|State]] (stato) permette ad un oggetto di cambiare il suo comportamento al cambiare di un suo stato interno.
* Il design pattern [[Strategy pattern|Strategy]] (strategia) è utile in quelle situazioni dove è necessario modificare dinamicamente gli algoritmi utilizzati da un'applicazione.
* Il [[Template method]] permette di definire la struttura di un algoritmo lasciando alle sottoclassi il compito di implementarne alcuni passi come preferiscono.
* Il [[Visitor]] (visitatore) permette di separare un algoritmo dalla struttura di oggetti composti a cui è applicato, in modo da poter aggiungere nuovi comportamenti senza dover modificare la struttura stessa.
==Altri tipi di pattern==
|