Design pattern: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
ArthurBot (discussione | contributi)
m Bot: Modifico: zh:设计模式 (计算机); modifiche estetiche
Riga 5:
La differenza tra un [[algoritmo]] e un design pattern è che il primo risolve problemi computazionali, mentre il secondo è legato agli aspetti progettuali del software.
 
== 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.
 
Riga 12:
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]] 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|Gang of Four]]'' o ''Gof'').
 
== Struttura di un pattern ==
 
Un ''design pattern'' è costituito da:
Riga 23:
L'uso di [[pattern]] nella descrizione di altri pattern dà origine ai cosiddetti [[linguaggio di pattern|linguaggi di pattern]].
 
== Classificazione dei design pattern ==
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, 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 loro [[Design Patterns|libro]] la "[[Gang of four|banda dei quattro]]" identificò 23 tipi di design pattern, suddivisi in 3 categorie: strutturali, creazionali e comportamentali.
 
=== Pattern creazionali ===
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.
 
Riga 38:
* Il [[Singleton]] ("singoletto") ha lo scopo di assicurare che di una classe possa essere creata una sola istanza.
 
=== Pattern strutturali ===
I pattern strutturali consentono di riutilizzare degli oggetti esistenti fornendo agli utilizzatori un'interfaccia più adatta alle loro esigenze.
 
Riga 53:
* [[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.
 
Riga 71:
* 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 ==
 
Alcuni pattern definiti nella letteratura non operano a livello di design del sistema, non possono quindi essere definiti propriamente design pattern. Alcuni esempi sono:
 
=== Pattern architetturali ===
I pattern architetturali operano ad un livello diverso (e più ampio) rispetto ai design pattern, ed esprimono schemi di base per impostare l'organizzazione strutturale di un sistema software. In questi schemi si descrivono sottosistemi predefiniti insieme con i ruoli che essi assumono e le relazioni reciproche.
 
Riga 89:
* [[Blackboard pattern|Blackboard]]
 
=== Pattern di metodologia ===
* [[Responsibility (design patter)|Responsibility]], ossia "identificare chiaramente e dividere la ''responsabilità''" assegnata a ciascun oggetto o componente del sistema, è il pattern metodologico basilare indicato nel libro ''Design Patterns''.
* [[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 (informatica)|sincronizzato]] lo stato dei dati in tali situazioni:
* [[Active Object]]
Riga 108:
* [[Reactor pattern]]
 
== Voci correlate ==
* [[Anti-pattern]]
* [[Framework]] orientato agli oggetti
 
== Bibliografia ==
* [[Erich Gamma|Gamma, E.]], [[Richard Helm|Helm, R.]], [[Ralph Johnson|Johnson, R.]] e [[John Vlissides|Vlissides, J.]], '' [[Design Patterns]]: elementi per il riuso di software a oggetti'', Addison Wesley, [[1995]], ISBN 887192150X88-7192-150-X
** Originale: ''Design Patterns: Elements of Reusable Object-Oriented Software'', Addison Wesley, [[1995]], ISBN 02016336120-201-63361-2
* [[Bruce Eckel|Eckel, B.]], ''[http://www.mindview.net/Books/TIPatterns/ Thinking in Patterns with Java], MindView (draft)
== Collegamenti esterni ==
* [http://c2.com/cgi/wiki?WelcomeVisitors Portland Pattern Repository]
* [http://hillside.net/patterns/ Hillside] Patterns Library
* [http://www.inf.unitn.it/DiplomaUniversitario/JavaCampus/luca_cristoforetti/node16.html Filosofia dei pattern]
* [http://www.vincehuston.org/dp/ Pagina dei pattern di Vince Huston ]
* [http://eii.pucv.cl/pers/guidi/designpatterns.htm GoF's Design Patterns in Java (in Italiano)]
 
 
{{Design Patterns Patterns}}
 
 
[[Categoria:Teorie della programmazione]]
Riga 164 ⟶ 163:
[[uk:Шаблони проектування програмного забезпечення]]
[[vi:Mẫu thiết kế (khoa học máy tính)]]
[[zh:软件设计模式 (计算机)]]