Design pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
fix vari Etichette: Modifica da mobile Modifica da applicazione mobile Modifica da applicazione Android App full source |
|||
(38 versioni intermedie di 24 utenti non mostrate) | |||
Riga 1:
{{nota disambigua|descrizione=il libro|titolo=Design Patterns}}
{{F|programmazione|aprile 2013}}
In [[informatica]], nell'ambito dell'[[ingegneria del software]], un '''design pattern''' (traducibile in [[lingua italiana]] come '''schema progettuale, schema di progettazione, schema architetturale'''), è un concetto che può essere definito "''una soluzione [[progetto|progettuale]] generale ad un problema ricorrente''". Si tratta di una descrizione o modello logico da applicare per la risoluzione di un problema che può presentarsi in diverse situazioni durante le fasi di [[Ciclo di vita del software|progettazione e sviluppo del software]], ancor prima della definizione dell'[[algoritmo]] risolutivo della parte computazionale. È un approccio spesso efficace nel contenere o ridurre il [[debito tecnico]].▼
▲
I design pattern [[object oriented|orientati agli oggetti]] tipicamente mostrano relazioni ed interazioni tra [[classe (informatica)|classi]] o [[oggetto (informatica)|oggetti]], senza specificare le classi applicative finali coinvolte, risiedendo quindi nel dominio dei [[modulo (software)|moduli]] e delle interconnessioni. Ad un livello più alto sono invece i pattern architetturali che hanno un ambito ben più ampio, descrivendo un pattern complessivo adottato dall'intero sistema, la cui implementazione logica dà vita a un [[framework]].▼
▲I ''design pattern'' [[
== Storia ==▼
Il termine fu inizialmente introdotto in [[architettura]] in un celebre saggio di [[Christopher Alexander]]; in seguito, proprio l'opera di Alexander ispirò la nascita di un settore dell'ingegneria del software dedicato all'applicazione del concetto di design pattern alle [[architettura software|architetture software]], soprattutto [[programmazione orientata agli oggetti|object-oriented]]. Oggi, l'espressione ''design pattern'' viene usata principalmente con riferimento a questo particolare contesto.▼
▲== Storia ==
Il tema dei pattern viene oggi considerato una delle linee principali di sviluppo dell'ingegneria del software object-oriented. Esso trova applicazioni in tutta una serie di contesti di grande interesse per l'[[industria del software]], dallo [[componente software|sviluppo di software basato su componenti]], ai [[sistema aperto|sistemi aperti]], ai [[framework]] e così via. La maggior parte dei [[linguaggio di programmazione|linguaggi di programmazione]] moderni, e di tecnologie correlate, sono stati progettati (o modificati) tenendo conto anche dell'obiettivo di essere coerenti con questo approccio emergente allo sviluppo del software.▼
▲Il termine fu inizialmente introdotto in [[architettura]] in un celebre saggio di [[Christopher Alexander]]; in seguito, proprio l'opera di Alexander ispirò la nascita di un settore dell'ingegneria del software dedicato all'applicazione del concetto di ''design pattern'' alle [[architettura software|architetture software]], soprattutto
▲Il tema dei ''pattern'' viene oggi considerato una delle linee principali di sviluppo dell'ingegneria del software
La nascita del "movimento" dei pattern in informatica si deve al celebre libro ''[[Design Patterns|Design Patterns: Elementi per il riuso di software ad oggetti]]'' di [[Erich Gamma]], [[Richard Helm]], [[Ralph Johnson (informatico)|Ralph Johnson]] e [[John Vlissides]] ([[1995]]). Grazie al successo di quest'opera, i suoi quattro autori divennero nomi talmente citati che la comunità scientifica iniziò, per brevità, a identificarli collettivamente con un nomignolo: la "banda dei quattro" (''[[Gang of Four (scrittori)|Gang of Four]]'' o ''Gof'').▼
▲La nascita del "movimento" dei ''pattern'' in informatica si deve al celebre libro ''[[Design Patterns|Design Patterns: Elementi per il riuso di software ad oggetti]]'' di [[Erich Gamma]], [[Richard Helm]], [[Ralph Johnson (informatico)|Ralph Johnson]] e [[John Vlissides]] (
== Struttura di un pattern ==▼
Un
*
*
*
*
L'uso di
== Classificazione
I design pattern possono essere classificati con diversi criteri, i più comuni dei quali sono quelli che evidenziano il tipo di problema che si cerca di risolvere. Il tipo di problema può essere legato ad uno specifico dominio progettuale ([[telecomunicazioni]], [[rete informatica|reti]], [[software]]) oppure, più comunemente, al problema progettuale in senso più ampio (nell'[[ingegneria del software]], ad esempio, si può parlare di creazione, comportamento, navigazione di oggetti o [[strutture dati]]).
Nel
=== Pattern creazionali ===
I pattern creazionali risolvono problematiche inerenti
* L'[[
* Il [[
* Il [[
* La [[
* Il [[
* Il [[Singleton (informatica)|singleton]] ("singoletto") ha lo scopo di assicurare che di una classe possa essere creata una sola istanza in sistemi con un unico thread.
* Il [[
=== Pattern strutturali ===
I pattern strutturali risolvono problematiche inerenti
* L'[[Adapter pattern|
* [[Bridge pattern|Bridge]] ("ponte") permette di separare l'astrazione di una classe dalla sua implementazione, per permettere loro di variare indipendentemente.
* Il [[
* Il [[Container pattern|
* Il [[
* [[Extensibility pattern|Extensibility]] ("estendibilità")
* Il [[Façade pattern|
* [[Flyweight pattern|Flyweight]] ("peso piuma"), che permette di separare la parte variabile di una classe dalla parte che può essere riutilizzata.
* [[Proxy pattern|Proxy]] 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.
Riga 57:
I pattern comportamentali forniscono soluzione alle più comuni tipologie di interazione tra gli oggetti.
* [[Chain of responsibility pattern|Chain of
* Il [[Command pattern|
* [[Event listener]] ("ascoltatore di eventi")
* [[Hierarchical visitor pattern|Hierarchical
* [[Interpreter pattern|Interpreter]] ("interprete") dato un linguaggio, definisce una rappresentazione della sua grammatica insieme ad un interprete che utilizza questa rappresentazione per l'interpretazione delle espressioni in quel determinato linguaggio.
* L'[[Iterator pattern|
* Il [[Mediator pattern|
* Il [[Memento pattern|
* L'[[Observer pattern|
* [[Single-serving visitor pattern|Single-serving
* [[State pattern|State]] ("stato") permette ad un oggetto di cambiare il suo comportamento al cambiare di un suo stato interno.
* Lo [[Strategy pattern|
* Il [[
* Il [[
* [[
== Altri tipi di pattern ==
Alcuni pattern definiti nella letteratura non operano a livello di design del sistema, non possono quindi essere definiti propriamente design pattern. Alcuni esempi sono:
Riga 85 ⟶ 84:
* [[Layers pattern|Layers]], architettura basata su layer
* [[Microkernel pattern|Microkernel]]
* [[Model-
* [[
* [[Naked objects]]
* [[Pipes and
* [[Presentation Abstraction Control pattern|Presentation Abstraction Control]]
* [[Reflection pattern|Reflection]], fornisce un meccanismo per cambiare la struttura e il comportamento di sistemi software in modo dinamico. Supporta la modifica di aspetti fondamentali, quali tipo di strutture e meccanismi di chiamata di funzione.
* [[Repository]], pattern architetturale legato ad aspetti di persistenza
* [[Front
* [[Data Access Object]], per la gestione della [[Persistenza (informatica)|persistenza]]: si tratta fondamentalmente di una [[Classe (informatica)|classe]] con relativi [[Metodo (informatica)|metodi]] che rappresenta un'[[Modello relazionale|entità tabellare]] di un [[RDBMS]].
* [[Data Transfer Object]], per trasferire dati tra sottosistemi di un'applicazione software. I DTO sono spesso usati in congiunzione con gli oggetti di accesso ai dati (DAO) per recuperare i suddetti da una [[base di dati]].
* [[Active record pattern]], tipicamente utilizzato in librerie di persistenza e in [[Object-relational mapping|Object-relational mapper]].
=== Pattern di metodologia ===
* [[GRASP|Responsibility]], ossia "identificare chiaramente e dividere la
* [[Make it run, make it right, make it fast, make it small]]
=== Pattern di concorrenza ===
Nel caso di processi che eseguono contemporaneamente delle attività su dati condivisi si parla di [[concorrenza (informatica)|concorrenza]]. Alcuni design pattern sono stati sviluppati per mantenere [[sincronizzazione
* [[Active Object]]
* [[Balking pattern]]
Riga 118:
* [[Erich Gamma|Gamma, E.]], [[Richard Helm|Helm, R.]], [[Ralph Johnson (informatico)|Johnson, R.]] e [[John Vlissides|Vlissides, J.]], '' [[Design Patterns]]: elementi per il riuso di software a oggetti'', Addison Wesley, 1995, ISBN 88-7192-150-X
** Originale: ''Design Patterns: Elements of Reusable Object-Oriented Software'', Addison Wesley, 1995, ISBN 0-201-63361-2
* [[Bruce Eckel|Eckel, B.]], ''[https://web.archive.org/web/20050408055821/http://www.mindview.net/Books/TIPatterns
== Voci correlate ==
* [[Pattern]]▼
* [[Anti-pattern]]
* [[Debito tecnico]]
* [[Model-
* [[Observer pattern]]
▲* [[Pattern]]
== Altri progetti ==
{{interprogetto|
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC}}
* {{cita web|http://c2.com/cgi/wiki?WelcomeVisitors|Portland Pattern Repository}}
* [http://hillside.net/patterns/ Hillside] Patterns Library
* {{cita web | 1 = http://www.inf.unitn.it/DiplomaUniversitario/JavaCampus/luca_cristoforetti/node16.html | 2 = Filosofia dei pattern | accesso = 7 aprile 2005 | urlarchivio = https://web.archive.org/web/20050316154225/http://www.inf.unitn.it/DiplomaUniversitario/JavaCampus/luca_cristoforetti/node16.html | dataarchivio = 16 marzo 2005 | urlmorto = sì }}
* {{cita web|http://www.vincehuston.org/dp/|Pagina dei pattern di Vince Huston}}
* {{cita web | 1 = http://eii.pucv.cl/pers/guidi/designpatterns.htm | 2 = GoF's Design Patterns in Java (in Italiano) | accesso = 6 giugno 2007 | dataarchivio = 27 marzo 2008 | urlarchivio = https://web.archive.org/web/20080327083712/http://eii.pucv.cl/pers/guidi/designpatterns.htm | urlmorto = sì }}
{{Design
{{Controllo di autorità}}
{{portale|informatica}}
[[Categoria:
|