Design pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica Etichetta: Annullato |
→Pattern di concorrenza: fix wl |
||
(17 versioni intermedie di 13 utenti non mostrate) | |||
Riga 1:
{{nota disambigua|descrizione=il libro|titolo=Design Patterns}}
{{F|programmazione|aprile 2013}}
'''Design pattern''' (traducibile in [[lingua italiana]] come
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]].
== 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|
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.
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 ''
== Struttura ==
Un
*
*
*
*
L'uso di [[pattern]] nella descrizione di altri pattern dà origine ai cosiddetti [[linguaggio di pattern|linguaggi di pattern]].
Riga 28:
=== Pattern creazionali ===
I pattern creazionali risolvono problematiche inerenti
* L'[[
* Il [[
* Il [[
* La [[
* Il [[
* Il [[Singleton (informatica)|
* Il [[Interblocco ricontrollato|
=== 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 56:
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 ==
Riga 83:
* [[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]]
Line 121 ⟶ 122:
* [[Anti-pattern]]
* [[Debito tecnico]]
* [[Model-
* [[Observer pattern]]
* [[Pattern]]
== Altri progetti ==
{{interprogetto|preposizione=sul}}
== 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:
|