Design pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
→Collegamenti esterni: Aggiunto il template "FOLDOC" |
→Pattern di concorrenza: fix wl |
||
(5 versioni intermedie di 5 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]].
Riga 13:
== Struttura ==
*
▲Un ''design pattern'' è costituito da:
*
*
▲* ''il nome'', costituito da una o due parole che siano il più possibile rappresentative del pattern stesso;
*
▲* ''il problema'', ovvero la descrizione della situazione alla quale si può applicare il pattern. Può comprendere la descrizione di [[Classe (informatica)|classi]] o di problemi di progettazione specifici, come anche una lista di condizioni perché sia necessario l'utilizzo del pattern;
▲* ''la soluzione'', che descrive gli elementi costitutivi del progetto con le relazioni e relative implicazioni, senza però addentrarsi in una specifica implementazione. Il concetto è di presentare un problema astratto e la relativa configurazione di elementi adatta a risolverlo;
▲* ''le conseguenze'', i risultati e i vincoli che derivano dall'applicazione del pattern. Sono fondamentali in quanto possono essere l'ago della bilancia nella scelta dei pattern: le conseguenze comprendono considerazioni di tempo e di spazio, possono descrivere implicazioni del pattern con alcuni linguaggi di programmazione e l'impatto con il resto del progetto.
L'uso di [[pattern]] nella descrizione di altri pattern dà origine ai cosiddetti [[linguaggio di pattern|linguaggi di pattern]].
Line 31 ⟶ 30:
I pattern creazionali risolvono problematiche inerenti all'istanziazione degli oggetti
* L'[[
* Il [[
* Il [[
* La [[
* Il [[
* Il [[Singleton (informatica)|
* Il [[Interblocco ricontrollato|
=== Pattern strutturali ===
I pattern strutturali risolvono problematiche inerenti alla struttura delle classi e degli oggetti.
* 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.
Line 57 ⟶ 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 ==
Alcuni pattern definiti nella letteratura non operano a livello di design del sistema, non possono quindi essere definiti propriamente design pattern. Alcuni esempi sono:
Line 85 ⟶ 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 123 ⟶ 122:
* [[Anti-pattern]]
* [[Debito tecnico]]
* [[Model-
* [[Observer pattern]]
* [[Pattern]]
== Altri progetti ==
{{interprogetto|preposizione=
== Collegamenti esterni ==
Line 139 ⟶ 138:
* {{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}}
|