<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>elementi per il riuso di software ad oggetti Archivi - Cesare Bordi | Innovation Manager &amp; Back-end Developer</title>
	<atom:link href="https://cesarebordi.it/tag/elementi-per-il-riuso-di-software-ad-oggetti/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.cesarebordi.it/tag/elementi-per-il-riuso-di-software-ad-oggetti/</link>
	<description>Innovare con soluzioni software efficaci e gioco di squadra</description>
	<lastBuildDate>Sat, 22 Apr 2023 08:03:29 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://cesarebordi.it/wp-content/uploads/2016/02/CB-logo-88x88.png</url>
	<title>elementi per il riuso di software ad oggetti Archivi - Cesare Bordi | Innovation Manager &amp; Back-end Developer</title>
	<link>https://www.cesarebordi.it/tag/elementi-per-il-riuso-di-software-ad-oggetti/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Design Pattern GoF &#8211; Guida</title>
		<link>https://cesarebordi.it/design-pattern-gof-guida-oop/</link>
					<comments>https://cesarebordi.it/design-pattern-gof-guida-oop/#respond</comments>
		
		<dc:creator><![CDATA[cesarebordi]]></dc:creator>
		<pubDate>Wed, 20 May 2020 16:42:00 +0000</pubDate>
				<category><![CDATA[Lezioni]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[classi]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[elementi per il riuso di software ad oggetti]]></category>
		<category><![CDATA[esempio]]></category>
		<category><![CDATA[gang of four]]></category>
		<category><![CDATA[gof]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[metodo]]></category>
		<category><![CDATA[oggetti]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[pro]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[programmazione ad oggetti]]></category>
		<category><![CDATA[script]]></category>
		<guid isPermaLink="false">https://www.cesarebordi.it/?p=1010</guid>

					<description><![CDATA[<p>La conoscenza dei design pattern nello sviluppo di un software è fondamentale quando si passa dalla fase di analisi alla progettazione del design strutturale. </p>
<p>L'articolo <a href="https://cesarebordi.it/design-pattern-gof-guida-oop/">Design Pattern GoF &#8211; Guida</a> sembra essere il primo su <a href="https://cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">La conoscenza dei <strong>design pattern</strong> nello <strong>sviluppo di un software</strong> è fondamentale nel passaggio dalla fase di analisi alla progettazione del <strong>design strutturale</strong>. </p>



<p class="wp-block-paragraph">Progettare software ad oggetti è difficile, ma lo è ancora di più renderne i suoi componenti riutilizzabili. La scomposizione dell&#8217;applicativo in <strong>oggetti</strong> deve tener conto di molteplici fattori: <strong>incapsulamento,</strong> <strong>granularità</strong>, <strong>dipendenza</strong>, <strong>performance</strong>, <strong>ridondanza</strong>, <strong>riusabilità</strong>, <strong>modularità</strong>, <strong>estendibilità nel tempo</strong>. </p>



<p class="wp-block-paragraph">I<strong> design pattern vengono in nostro soccorso</strong> indicandoci soluzioni a problemi ricorrenti così da rendere il nostro codice riutilizzabile e mantenibile.</p>



<h2 class="wp-block-heading">La genesi</h2>



<p class="wp-block-paragraph">Il concetto di <strong>design pattern</strong> è stato mutuato dall&#8217;<strong>ingegneria del software</strong> direttamente dall&#8217;<strong>architettura</strong>. Fu l&#8217;architetto austriaco Cristopher Alexander a formalizzare tale concetto nel 1977 all&#8217;interno del libro <em>Pattern Language: Towns, Buildings, Construction</em>.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Il pattern è una <em>soluzione architetturale che può risolvere problemi in contesti eterogenei</em>.</p>
</blockquote>



<p class="wp-block-paragraph">La trasposizione del concetto di <strong>design pattern</strong> in ambito informatico è attribuita invece alla cosiddetta <strong><a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/Gang_of_Four_(scrittori)" target="_blank">Gang of Four</a></strong> (<strong>GoF</strong>) formata da Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides. Dopo quatro anni di confronto condensarono tutta la loro esperienza in un libro del 1994 che è diventato la &#8220;Bibbia della programmazione ad oggetti&#8221;: <a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/Design_Patterns" target="_blank"><strong><em>Design Patterns: elements of reusable object oriented software</em></strong>&#8220;</a> (<em><strong>Elementi per il riuso di software ad oggetti</strong></em>).</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Il design pattern descrive un problema ricorrente e fornisce una soluzione che può essere riutilizzata infinite volte senza doverla applicare mai nello stesso identico modo</p>
</blockquote>



<h2 class="wp-block-heading">Design Pattern: classificazione</h2>



<p class="wp-block-paragraph">La GoF cataloga i suoi 23 <strong>pattern</strong> suddividendoli in 3 macro categorie:</p>



<ul class="wp-block-list">
<li><strong>Pattern creazionali</strong>: soluzioni per creare oggetti.</li>



<li><strong>Pattern strutturali</strong>: soluzioni per la composizione strutturale di classi e oggetti.</li>



<li><strong>Pattern comportamentali</strong>: soluzioni per gestire le responsabilità delle classi e degli oggetti.</li>
</ul>



<p class="wp-block-paragraph">Una seconda classificazione viene fatta in base al loro ambito applicativo:</p>



<ul class="wp-block-list">
<li><strong>Class pattern</strong>: soluzioni tramite classi e sottoclassi in relazioni statiche tra loro.</li>



<li><strong>Object Pattern</strong>: soluzioni dinamiche basate sugli oggetti.</li>
</ul>



<p class="wp-block-paragraph">Infine ogni pattern viene descritto in base agli elementi che lo caratterizzano:</p>



<ul class="wp-block-list">
<li><strong>Nome</strong>/<strong>Alias</strong>: sintentizza l&#8217;essenza del pattern.</li>



<li><strong>Scopo</strong>: cosa fa il pattern.</li>



<li><strong>Motivazione</strong>: scenario del problema e soluzione offerta.</li>



<li><strong>Applicabilità</strong>: situazioni di esempio in cui si può usare il pattern.</li>



<li><strong>Struttura</strong>: rappresentazione grafica delle classi del pattern.</li>



<li><strong>Partecipanti</strong>: classi/oggetti interessati e relative responsabilità</li>



<li><strong>Collaborazioni</strong>: dei partecipanti per poter assumersi le responsabilità.</li>



<li><strong>Conseguenze</strong>: pro e contro del pattern.</li>



<li><strong>Implementazione</strong>: tecniche e consigli per implementare il pattern.</li>



<li><strong>Codice d&#8217;esempio</strong>: in C++ e SmallTalk.</li>



<li><strong>Utilizzi noti</strong>: esempi reali in sistemi esistenti.</li>



<li><strong>Correlazioni</strong>: legami con altri pattern e differenze.</li>
</ul>



<p class="wp-block-paragraph">I 23 pattern definiti dal GoF possono essere quindi così schematizzati:</p>



<style>
#containerDesignPattern {border: 1px dashed #999 !important;}
#tableDesignPattern {width:100%; margin:0 !important; }
#tableDesignPattern * {text-align:center; color:#fff}
#tableDesignPattern td { border:8px solid #fff !important; margin:5px !important;}
.color-fff { background: #fff !important; }
.color-444 { background: #444 !important; }
.color-669 { background: #669 !important; }
.color-f30 { background: #f30 !important; }
.color-630 { background: #630 !important; }
</style>
<div id="containerDesignPattern">
<table id="tableDesignPattern">
  <tbody><tr>
    <td colspan="3" class="color-444"><h2 style="margin:0">GoF Design Patterns</h2></td>
  </tr>
  <tr>
    <td width="33%" class="color-669">CREAZIONALI<br />(creational)</td>
    <td width="33%" class="color-f30">STRUTTURALI<br />(structural)</td>
    <td width="33%" class="color-630">COMPORTAMENTALI<br />(behavioral)</td>
  </tr>
  <tr>
    <td colspan="3" class="color-444">Class Scope</td>
  </tr>
  <tr>
    <td class="color-669">Factory Method</td>
    <td class="color-f30">Adapter-class</td>
    <td class="color-630">Interpreter</td>
  </tr>
  <tr>
    <td class="color-fff"></td>
    <td class="color-fff"></td>
    <td class="color-630">Template Method</td>
  </tr>
  <tr>
    <td colspan="3" class="color-444">Object Scope</td>
  </tr>
  <tr>
    <td class="color-669">Abstract Factory</td>
    <td class="color-f30">Adapter-object</td>
    <td class="color-630">Chain of responsibility</td>
  </tr>
  <tr>
    <td class="color-669"><a href="https://www.cesarebordi.it/design-pattern-builder-php/" title="Design Pattern Builder">Builder [<i class="fas fa-graduation-cap"></i>]</a></td>
    <td class="color-f30">Bridge</td>
    <td class="color-630">Command</td>
  </tr>
  <tr>
    <td class="color-669">Prototype</td>
    <td class="color-f30">Composite</td>
    <td class="color-630">Iterator</td>
  </tr>
  <tr>
    <td class="color-669"><a href="https://www.cesarebordi.it/design-pattern-singleton-php/" title="Design Pattern Singleton">Singleton [<i class="fas fa-graduation-cap"></i>]</a></td>
    <td class="color-f30">Decorator</td>
    <td class="color-630">Mediator</td>
  </tr>
  <tr>
    <td class="color-fff">&nbsp;</td>
    <td class="color-f30">Facade</td>
    <td class="color-630">Memento</td>
  </tr>
  <tr>
    <td class="color-fff">&nbsp;</td>
    <td class="color-f30">Flyweight</td>
    <td class="color-630">Observer</td>
  </tr>
  <tr>
    <td class="color-fff">&nbsp;</td>
    <td class="color-f30">Proxy</td>
    <td class="color-630">State</td>
  </tr>
  <tr>
    <td class="color-fff">&nbsp;</td>
    <td>&nbsp;</td>
    <td class="color-630"><a href="https://www.cesarebordi.it/design-pattern-strategy-php/" title="Design Pattern Strategy">Strategy [<i class="fas fa-graduation-cap"></i>]</a></td>
  </tr>
  <tr>
    <td class="color-fff">&nbsp;</td>
    <td class="color-fff">&nbsp;</td>
    <td class="color-630">Visitor</td>
  </tr>
</tbody></table>
</div>



<h2 class="wp-block-heading">Design Pattern: il catalogo della GoF</h2>



<p class="wp-block-paragraph">Riporto qui una sintesi del <strong>catalogo</strong> composto dai <strong>23 design pattern</strong> in modo da avere un&#8217;idea di massima del loro utilizzo.<br />Ricordo che con il termine &#8220;<strong><a rel="noreferrer noopener" href="https://it.wikipedia.org/wiki/Interfaccia_(informatica)#Interfaccia_nella_programmazione_orientata_agli_oggetti" target="_blank">interfaccia</a></strong>&#8221; si intende qui l&#8217;<strong>insieme delle richieste a cui un oggetto può rispondere</strong> cioè l&#8217;<strong>insieme delle proprietà e dei metodi pubblici di un oggetto.</strong> Attenzione quindi a non confondersi con le &#8220;interface&#8221; di Php!</p>



<ul class="wp-block-list">
<li><strong>Abstract Factory</strong>: fornisce un&#8217;interfaccia per la creazione di famiglie di oggetti correlati o dipendenti senza specificare o conoscere le classi concrete.</li>



<li><strong>Adapter</strong>: converte l&#8217;interfaccia di una classe in un&#8217;altra interfaccia richiesta dal client permettendo la collaborazione fra classi  tra loro incompatibili.</li>



<li><strong>Bridge</strong>: disaccoppia un&#8217;astrazione dalla sua implementazione in modo che le due possano variare indipendentemente.</li>



<li><strong><a href="https://www.cesarebordi.it/design-pattern-builder-php/">Builder</a></strong>: separa la costruzione di un oggetto complesso dalla sua rappresentazione così che lo stesso processo di creazione possa creare rappresentazioni diverse.</li>



<li><strong>Chain of Responsability</strong>: disaccoppia il mittente di una richiesta dal suo destinatario. Si ordinano gli oggetti destinatari e la richiesta viene passata di oggetto in oggetto finché non viene gestita.</li>



<li><strong>Command:</strong> incapsula una richiesta in un oggetto.</li>



<li><strong>Composite</strong>: raggruppa oggetti in strutture ad albero permettendo ai client di trattare oggetti singoli e raggruppamenti in modo uniforme.</li>



<li><strong>Decorator:</strong> aggiunge dinamicamente responsabilità ad un oggetto. E&#8217; un&#8217;aternativa flessibile all&#8217;ereditarietà.</li>



<li><strong>Facade</strong>: definisce un&#8217;interfaccia di più alto livello per facilitare l&#8217;utilizzo di un sottosistema più complesso.</li>



<li><strong>Factory Method</strong>: permette ad una classe di delegare la creazione di un oggetto alle sue sottoclassi.</li>



<li><strong>Flyweight</strong>: usa la condivisione per gestire numerosi oggetti a granularità fine.</li>



<li><strong>Interpreter</strong>: permette di implementare un proprio linguaggio con la sua grammatica ed il relativo interprete.</li>



<li><strong>Iterator</strong>: permette di accedere agli elementi di un contenitore sequenzialmente senza esporre la struttura sottostante.</li>



<li><strong>Mediator</strong>: favorisce un basso accoppiamento evitando che gli oggetti facciano riferimento l&#8217;un l&#8217;altro.</li>



<li><strong>Memento</strong>: esplicita lo stato interno di un oggetto così da poterlo riportare al suo stato originale.</li>



<li><strong>Observer</strong>: definisce una dipendenza uno-a-molti fra oggetti così che quando un oggetto cambia stato tutti gli oggetti dipendenti vengano notificati ed aggiornati.</li>



<li><strong>Prototype</strong>: specifica gli oggetti da creare utilizzando un&#8217;istanza prototipale.</li>



<li><strong>Proxy</strong>: fornisce un surrogato di un oggetto pper controllare l&#8217;accesso a quest&#8217;ultimo.</li>



<li><a href="https://www.cesarebordi.it/design-pattern-singleton-php/"><strong>Singleton</strong></a>: forza una classe ad avere una sola istanza e ne fornisce un accesso globale.</li>



<li><strong>State</strong>: permette ad un oggetto di modificare il proprio comportamento quando il suo stato interno cambia. Sembrerà che l&#8217;oggetto abbia cambiato la sua classe.</li>



<li><strong><a href="https://www.cesarebordi.it/design-pattern-strategy-php/">Strategy</a></strong>: definisce una famiglia di algoritmi, li incapsula e li rende interscambiabili tra di loro.</li>



<li><strong>Template Method</strong>: definisce lo scheletro principale dell&#8217;algoritmo in un metodo delegando alcuni passi alle sottoclassi.</li>



<li><strong>Visitor</strong>: permette di definire nuove operazioni senza cambiare le classi degli elementi su cui opera.</li>
</ul>



<h2 class="wp-block-heading">Riferimenti</h2>



<p class="wp-block-paragraph"><strong>Design Patterns: Elements of Reusable Object-Oriented Software</strong><br />Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides<br />Pearson Education</p>



<p class="wp-block-paragraph"><a href="https://designpatternsphp.readthedocs.io">https://designpatternsphp.readthedocs.io</a></p>



<p class="wp-block-paragraph"><a href="https://refactoring.guru/design-patterns">https://refactoring.guru/design-patterns</a></p>
<p>L'articolo <a href="https://cesarebordi.it/design-pattern-gof-guida-oop/">Design Pattern GoF &#8211; Guida</a> sembra essere il primo su <a href="https://cesarebordi.it">Cesare Bordi | Innovation Manager &amp; Back-end Developer</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cesarebordi.it/design-pattern-gof-guida-oop/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
