<?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>SlashCode &#187; guida</title>
	<atom:link href="http://davideaversa.it/slashcode/tag/guida/feed/" rel="self" type="application/rss+xml" />
	<link>http://davideaversa.it/slashcode</link>
	<description></description>
	<lastBuildDate>Thu, 03 May 2012 14:28:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Digital Mind: Nuovo Update!</title>
		<link>http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/</link>
		<comments>http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 10:39:29 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[digital mind]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=544</guid>
		<description><![CDATA[Segnalo ancora un nuovo aggiornamento. Arrivato in ritardo ma è arrivato. Purtroppo sono stato distratto da interessanti argomenti di Intelligenza Artificiale e mi è passato tutto il resto di mente! Fra le modifiche che ho fatto segnalo che ho completato la parte sui modelli astratti di algoritmi (forse approfondisco un po&#8217; le macchine a registri) <a href='http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F04%2Fdigital-mind-nuovo-update%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Digital Mind: Nuovo Update!" data-url="http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Segnalo ancora un nuovo aggiornamento. Arrivato in ritardo ma è arrivato. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Purtroppo sono stato distratto da interessanti argomenti di Intelligenza Artificiale e mi è passato tutto il resto di mente! <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Fra le modifiche che ho fatto segnalo che ho completato la parte sui modelli astratti di algoritmi (forse approfondisco un po&#8217; le macchine a registri) e ho corretto alcune sviste.</p>
<p>Ecco il solito link:</p>
<p><a href="http://davideaversa.it/digital/main.html">DIGITAL MIND</a></p>
<p>Alla prossima.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=544&amp;md5=f9698839b7d5805a630988754462dae5" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F04%2Fdigital-mind-nuovo-update%2F&amp;language=it_IT&amp;category=text&amp;title=Digital+Mind%3A+Nuovo+Update%21&amp;description=Segnalo+ancora+un+nuovo+aggiornamento.+Arrivato+in+ritardo+ma+%C3%A8+arrivato.+Purtroppo+sono+stato+distratto+da+interessanti+argomenti+di+Intelligenza+Artificiale+e+mi+%C3%A8+passato+tutto+il+resto+di+mente%21...&amp;tags=digital+mind%2Cguida%2Cupdate%2Cblog" type="text/html" />
	</item>
		<item>
		<title>SlashCode Reloaded</title>
		<link>http://davideaversa.it/slashcode/2010/03/slashcode-reloaded/</link>
		<comments>http://davideaversa.it/slashcode/2010/03/slashcode-reloaded/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 13:41:19 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[TheSlashCodeProject]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[matematica]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=529</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2010/03/slashcode-reloaded/"><img title="SlashCode Reloaded" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/03/neuroni-150x150.jpg" alt="SlashCode Reloaded"  width="200" height="200" /></a></div><br/>Penso di dover dare conto a qualcuno della mia lunghissima assenza. Ci sono molti motivi che mi hanno tenuto lontano dalle pagine di SlashCode in questi mesi. La prima è che avevo bisogno di staccare un attimo dalla vita tecnologica per dedicarmi ad altre mie passioni come la musica e la letteratura. Suono il pianoforte <a href='http://davideaversa.it/slashcode/2010/03/slashcode-reloaded/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F03%2Fslashcode-reloaded%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2010/03/slashcode-reloaded/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="SlashCode Reloaded" data-url="http://davideaversa.it/slashcode/2010/03/slashcode-reloaded/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><a href="http://davideaversa.it/slashcode/wp-content/uploads/2010/03/neuroni.jpg"><img class="alignleft size-thumbnail wp-image-530" title="Neuroni" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/03/neuroni-150x150.jpg" alt="" width="150" height="150" /></a> Penso di dover dare conto a qualcuno della mia lunghissima assenza. Ci sono molti motivi che mi hanno tenuto lontano dalle pagine di SlashCode in questi mesi. La prima è che avevo bisogno di staccare un attimo dalla <em>vita tecnologica </em>per dedicarmi ad altre mie passioni come la musica e la letteratura. Suono il pianoforte e la chitarra da anni e ultimamente le stavo lasciando troppo decadere. Il secondo punto è che, non appena ho ripreso gli studi informatici, mi sono concentrato su argomenti che sono poco da blog o quantomeno necessitano di una preparazione più specifica da parte del lettore e di un laborioso processo di semplificazione da parte mia. Ne parlerò sicuramente in un prossimo futuro ma essendo cose completamente nuove ci metto un po prima di elaborare un pensiero organico e coerente.</p>
<p>Il terzo punto invece è molto più interessante per chi mi legge. In questi mesi ho scritto gran parte di un libro dedicato a chi si avvicina alla programmazione ma anche a chi, sebbene sappia già programmare discretamente, è interessato al lato più &#8220;ingegneristico&#8221; e scientifico dell&#8217;informatica. Questo libro nasce per sostituire il vecchio <em>GaPG </em>la cui impostazione &#8220;blogghistica&#8221; cominciava da un lato a non soddisfarmi e dall&#8217;altro a limitare la mia possibilità di approfondire alcuni degli argomenti in modo coerente.</p>
<p>Prima di pubblicare la versione pdf ho preferito iniziare a rendere disponibile una versione HTML (raggiungibile da <a href="http://davideaversa.it/digital/main.html">qui</a>) che aggiornerò con cadenza circa settimanale. Ho optato per l&#8217;html in quanto mi è più facile mantenere aggiornata una versione web piuttosto che generare decine di bozze pdf con il rischio che le persone non sappiano più quale sia l&#8217;ultima versione aggiornata.</p>
<p>L&#8217;intero libro parte da un presupposto. La matematica. Non sono necessari prerequisiti matematici elevati: basta sapere un po di teoria degli insiemi e le operazioni base. Tuttavia non potevo farne a meno: chi parte con l&#8217;idea di programmare (e per programmare intendo farlo seriamente) deve mettersi in testa che la matematica è un requisito fondamentale.</p>
<p>Il volume è attualmente in lavorazione e, sebbene metto online solamente le parti che sono state già revisionate, non sono certo che siano esenti da errore ne che per adattarlo al resto faccia modifiche sostanziali sui primi capitoli.</p>
<p>Detto questo devo aggiungere due cose. Primo, il libro è dedicato a Evan (<em>DJNeophyte) </em>che mi ha incoraggiato a portarlo avanti anche quando pensavo di lasciar perdere. A lui va il più importante ringraziamento. Secondo, mi auguro che se siate interessati contribuiate con consigli di vario genere e segnalazioni di errori. Dopotutto possiamo considerarlo un libro opensource.</p>
<p>Alla prossima.</p>
<p>P.S.: Dato che non ho mai usato il LaTex per fare pagine Web mi sono arrangiato utilizzando il tool <em>mk4ht</em>. Solo che non l&#8217;ho mai usato. Se qualcuno volesse e conoscesse o lo strumento o il css e voglia contribuire a creare una versione web meno rustica mi contatti. Grazie.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=529&amp;md5=1c10cc66b616fb301d32c25ce584baed" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2010/03/slashcode-reloaded/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F03%2Fslashcode-reloaded%2F&amp;language=it_IT&amp;category=text&amp;title=SlashCode+Reloaded&amp;description=Penso+di+dover+dare+conto+a+qualcuno+della+mia+lunghissima+assenza.+Ci+sono+molti+motivi+che+mi+hanno+tenuto+lontano+dalle+pagine+di+SlashCode+in+questi+mesi.+La+prima+%C3%A8...&amp;tags=guida%2Cmatematica%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Introduzione alle PyQT &#8211; Prefazione</title>
		<link>http://davideaversa.it/slashcode/2009/11/introduzione-alle-pyqt-prefazione/</link>
		<comments>http://davideaversa.it/slashcode/2009/11/introduzione-alle-pyqt-prefazione/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 06:00:12 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[TheSlashCodeProject]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[qt]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=474</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/11/introduzione-alle-pyqt-prefazione/"><img title="Introduzione alle PyQT &#8211; Prefazione" src="http://davideaversa.it/slashcode/wp-content/uploads/2009/11/qt-150x150.jpg" alt="Introduzione alle PyQT &#8211; Prefazione"  width="200" height="200" /></a></div><br/>Verrei farvi un regalo apprezzato. Mettere in piedi un&#8217;altra serie di guide oltre alle altre due principali (GAPG e Scheme) rischia di essere un azzardo. Ma, dato che sicuramente da febbraio avrò moolto tempo libero e che &#8220;parallelizzare un processo porta quasi sempre benefici&#8221; ho deciso di preparare una &#8220;mini serie&#8221; sulla programmazione grafica e <a href='http://davideaversa.it/slashcode/2009/11/introduzione-alle-pyqt-prefazione/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F11%2Fintroduzione-alle-pyqt-prefazione%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/11/introduzione-alle-pyqt-prefazione/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Introduzione alle PyQT &#8211; Prefazione" data-url="http://davideaversa.it/slashcode/2009/11/introduzione-alle-pyqt-prefazione/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><img class="alignleft size-thumbnail wp-image-475" title="qt" src="http://davideaversa.it/slashcode/wp-content/uploads/2009/11/qt-150x150.jpg" alt="qt" width="150" height="150" />Verrei farvi un regalo apprezzato. Mettere in piedi un&#8217;altra serie di guide oltre alle altre due principali (GAPG e Scheme) rischia di essere un azzardo. Ma, dato che sicuramente da febbraio avrò moolto tempo libero e che &#8220;parallelizzare un processo porta quasi sempre benefici&#8221; ho deciso di preparare una &#8220;mini serie&#8221; sulla programmazione grafica e in particolare all&#8217;uso di <strong>Qt </strong>e <strong>Python</strong>.</p>
<p><strong>PERCHÉ QT?</strong></p>
<p>Le Qt, dal mio punto di vista, sono nettamente superiori alle Gtk per semplicità di uso, completezza, resa grafica e strumentazione. Inoltre le so usare molto meglio delle Gtk e quindi non rischio di dire troppe boiate. Terzo punto, le Qt sono stra-mega portabili e quindi questa guida può essere facilmente seguita anche da sviluppatori Win.</p>
<p><strong>PERCHÉ PYTHON?</strong></p>
<p>Le Qt sono nativamente scritte in C++ per ovvi motivi. Esistono wrapper per parecchi linguaggi ma, fra tutti, quello meglio riuscito è sicuramente quello per Python. Quindi, per non dovermi concentrare troppo su argomenti troppo tecnici ed estranei alle Qt di cui sarei costretto a parlare se usassi C++, ho scelto Python. Inoltre Python è <em>facile</em> ed è uno dei linguaggi di programmazione con cui molti nuovi arrivati cominciano a programmare.</p>
<p>Python è la scelta adatta. Inoltre da python vi sarà semplice passare al C++ in quanto sia i nomi delle classi Qt, sia i dati con cui lavoro sono pressocché identici.</p>
<p><strong>REQUISITI</strong></p>
<p>I requisiti per la guida sono:</p>
<ul>
<li>Conoscenza di Python a livello medio o medio-basso (ovvero conoscere tutti i costrutti base tipo if, for, def, while, liste, dizionari, tuple, etc&#8230;)</li>
<li>Familiarità con la programmazione a oggetti.</li>
<li>Familiarità con il terminale.</li>
<li>Cenni di Makefile.</li>
<li>Cenni di bash.</li>
</ul>
<p><strong>STRUMENTI</strong></p>
<p>Presenterò gli strumenti man mano che ci serviranno. Tuttavia la dotazione base che utilizzarò io sarà:</p>
<ul>
<li>KDevelop (o un qualsiasi altro editor/IDE)</li>
<li>PyUIC4</li>
<li>Qt-Designer</li>
<li>PyLint</li>
</ul>
<p>Oltre ad altre varie ed eventuali.</p>
<p><strong>COSA TRATTEREMO</strong></p>
<p>Gli argomenti si dislocheranno fra:</p>
<ul>
<li>Esempio di primo programma in Qt.</li>
<li>Presentazione dell&#8217;architettura della libreria Qt.</li>
<li>Presentazione di alcuni Widget comuni.</li>
<li>I Layout.</li>
<li>Gestione degli Eventi</li>
<li>I widget personalizzati</li>
</ul>
<p>Più altre cose che ancora non ho deciso. Ci metterò un po ad organizzarmi per bene il discorso.</p>
<p><strong>CONCLUSIONI</strong></p>
<p>Alla fine delle guida saprete costruirvi delle interfaccie più o meno complesse. Ovviamente non posso insegnarvi il senso estetico ma quello non mi sembra importante per ora. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Datemi qualche feedback. Se ci sono persone interessate comincio lo sviluppo altrimenti lo lascio nella lista delle cose pendenti. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=474&amp;md5=162b52c48c2801b79c8636763544ca5b" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/11/introduzione-alle-pyqt-prefazione/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F11%2Fintroduzione-alle-pyqt-prefazione%2F&amp;language=it_IT&amp;category=text&amp;title=Introduzione+alle+PyQT+%26%238211%3B+Prefazione&amp;description=Verrei+farvi+un+regalo+apprezzato.+Mettere+in+piedi+un%26%238217%3Baltra+serie+di+guide+oltre+alle+altre+due+principali+%28GAPG+e+Scheme%29+rischia+di+essere+un+azzardo.+Ma%2C+dato+che+sicuramente+da...&amp;tags=guida%2Cpython%2Cqt%2Cblog" type="text/html" />
	</item>
		<item>
		<title>C/C++ &#8211; Dichiarazione Avanzata dei Tipi</title>
		<link>http://davideaversa.it/slashcode/2008/12/cc-dichiarazione-avanzata-dei-tipi/</link>
		<comments>http://davideaversa.it/slashcode/2008/12/cc-dichiarazione-avanzata-dei-tipi/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 08:54:40 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[puntatori]]></category>
		<category><![CDATA[tipi di dato]]></category>
		<category><![CDATA[variabili]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=168</guid>
		<description><![CDATA[Questo articolo prende spunto dal corso di Ingegneria degli Algoritmi e da un articolo di Steve Friedl sulla lettura delle dichiarazione di tipo. Uno degli scogli principali per chi comincia a programmare in C è proprio quello di comprendere bene il significato dei vari * e delle funzioni più contorte. Non è inverosimile che per <a href='http://davideaversa.it/slashcode/2008/12/cc-dichiarazione-avanzata-dei-tipi/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F12%2Fcc-dichiarazione-avanzata-dei-tipi%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2008/12/cc-dichiarazione-avanzata-dei-tipi/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="C/C++ &#8211; Dichiarazione Avanzata dei Tipi" data-url="http://davideaversa.it/slashcode/2008/12/cc-dichiarazione-avanzata-dei-tipi/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Questo articolo prende spunto dal corso di Ingegneria degli Algoritmi e da<a href="http://unixwiz.net/techtips/reading-cdecl.html"> un articolo di <strong>Steve Friedl </strong>sulla lettura delle dichiarazione di tipo</a>.</p>
<p>Uno degli scogli principali per chi comincia a programmare in C è proprio quello di comprendere bene il significato dei vari <strong>*</strong> e delle funzioni più contorte. Non è inverosimile che per i principianti si sviluppi un metodo di programmazzione chiamato &#8220;<strong>proviamo e vediamo se funziona&#8221; </strong>che consiste nell&#8217;aggiungere asterischi a caso nella dichiarazione fino a quando il programma funziona come sperato.</p>
<p>Ovviamente questo metodo è sconsigliabile, contando che esiste una pratica regola che rende decifrabile anche le dichiarazioni più ingarbugliate: <strong>&#8220;go right when you can, go left when you must&#8221;</strong></p>
<p><span id="more-168"></span></p>
<p>In italiano la regola suona più o meno: <strong>vai a destra finchè puoi, vai a sinistra quando devi</strong>. Ma come tutte le regole necessita di un esempio per essere afferrata.</p>
<p>Prendiamo una dichiarazione che farebbe impazzire chiunque:</p>
<pre><span class="hl">char</span> *(*(**<span class="hl">foo</span> [][8])())[];</pre>
<p>&#8220;Oddio!&#8221; direte voi, ma manteniamo la calma. Il primo passo consiste nell&#8217;isolare il nome della variabile e il <strong>tipo base.</strong> Il nome della variabile è solitamente l&#8217;unica parola non riservata che trovate nella dichiarazione, nel nostro caso <em>foo</em>, mentre il tipo base è il tipo <strong>che si trova più a sinistra di tutti.</strong></p>
<pre><strong>foo è un ... char</strong></pre>
<p>Ora dobbiamo riempire i puntini. Per prima cosa definiamo alcune semplici regole di lettura:</p>
<ul>
<li>gli asterischi * si leggono <strong>puntatori a </strong>o <strong>puntatore a</strong></li>
<li>le parentesi quadre [] si leggono <strong>array di</strong></li>
<li>le parentesi numerate [x] si leggono <strong>array di x di</strong></li>
<li>le parentesi tonde () si leggono <strong>funzione che restituisce</strong></li>
<li>le parentesi tonde con parametri (x,y) si leggono <strong>funzione che prende come parametro x, y e restituisce</strong></li>
</ul>
<p>Con queste regole ora non ci resta che partire a seguire la regola principale cominciando dal nome della dichiarazione.</p>
<p>La prima cosa che troviamo andando a destra sono le parentesi quadre, quindi:</p>
<pre><span style="color: #ff0000;"><span class="hl">char</span></span> *(*(**<span style="color: #ff0000;"><span class="hl">foo</span></span> <strong>[]</strong>[8])())[];

<strong>foo è un <span style="color: #ff0000;">array di </span></strong><span style="color: #000000;"><strong>... char</strong></span></pre>
<p>Continuiamo ad andare a destra (ricordiamoci il &#8220;a destra finchè posso&#8221;) e troviamo altre parentesi quadre.</p>
<pre><span style="color: #ff0000;"><span class="hl">char</span></span> *(*(**<span style="color: #ff0000;"><span class="hl">foo</span></span> <span style="color: #ff0000;">[]</span><strong>[8]</strong>)())[];

<strong>foo è un <span style="color: #ff0000;"><span style="color: #000000;">array di</span> array di 8 di </span></strong><span style="color: #000000;"><strong>... char</strong></span></pre>
<p>A questo punto troviamo una parentesi chiusa, non possiamo quindi più andare a destra finchè non troviamo, a sinistra, la corrispondente parentesi aperta. Facciamo quindi un balzo a sinistra e intanto continuiamo a riempire i puntini. A sinistra troviamo due asterischi quindi:</p>
<pre><span style="color: #ff0000;"><span class="hl">char</span></span> *(*(*<strong>*</strong><span style="color: #ff0000;"><span class="hl">foo</span></span> <span style="color: #ff0000;">[]</span><span style="color: #ff0000;">[8]</span>)())[];

<strong>foo è un <span style="color: #ff0000;"><span style="color: #000000;">array di</span> <span style="color: #000000;">array di 8 di</span> puntatori a puntatori a </span></strong><span style="color: #000000;"><strong>... char</strong></span></pre>
<p>Abbiamo trovato la parentesi. Adesso quindi ci è permesso andare a destra. A destra troviamo un paio di parentesi tonde.</p>
<pre><span style="color: #ff0000;"><span class="hl">char</span></span> *(*(<span style="color: #ff0000;">*<strong>*</strong></span><span style="color: #ff0000;"><span class="hl">foo</span></span> <span style="color: #ff0000;">[]</span><span style="color: #ff0000;">[8]</span>)<strong>()</strong>)[];

<strong>foo è un <span style="color: #ff0000;"><span style="color: #000000;">array di</span> <span style="color: #000000;">array di 8 di</span> <span style="color: #000000;">puntatori a puntatori a</span> funzione che restituisce
</span></strong><span style="color: #000000;"><strong>... char</strong></span></pre>
<p>Altra parentesi chiusa. Andiamo quindi a sinistra.</p>
<pre><span style="color: #ff0000;"><span class="hl">char</span></span> *(*(<span style="color: #ff0000;">*<strong>*</strong></span><span style="color: #ff0000;"><span class="hl">foo</span></span> <span style="color: #ff0000;">[]</span><span style="color: #ff0000;">[8]</span>)<span style="color: #ff0000;">()</span>)[];

<strong>foo è un <span style="color: #ff0000;"><span style="color: #000000;">array di</span> <span style="color: #000000;">array di 8 di</span> <span style="color: #000000;">puntatori a puntatori a</span> <span style="color: #000000;">funzione che restituisce
<span style="color: #ff0000;">puntatori a </span></span></span></strong><span style="color: #000000;"><strong>... char</strong></span></pre>
<p>E cosi via finché non completiamo tutta la dichiarazione.</p>
<pre><span style="color: #ff0000;"><span class="hl">char</span></span> *(<span style="color: #ff0000;">*</span>(<span style="color: #ff0000;">*<strong>*</strong></span><span style="color: #ff0000;"><span class="hl">foo</span></span> <span style="color: #ff0000;">[]</span><span style="color: #ff0000;">[8]</span>)<span style="color: #ff0000;">()</span>)<strong>[]</strong>;

<strong>foo è un <span style="color: #ff0000;"><span style="color: #000000;">array di</span> <span style="color: #000000;">array di 8 di</span> <span style="color: #000000;">puntatori a puntatori a</span> <span style="color: #000000;">funzione che restituisce <span style="color: #ff0000;"><span style="color: #000000;">
puntatori a</span> array di</span></span></span></strong><span style="color: #000000;"><strong>... char</strong></span></pre>
<p>E cosi alla fine abbiamo che:</p>
<pre><strong>foo è un <span style="color: #ff0000;"><span style="color: #000000;">array di</span> <span style="color: #000000;">array di 8 di</span> <span style="color: #000000;">puntatori a puntatori a</span> <span style="color: #000000;">funzione che restituisce
<span style="color: #ff0000;"><span style="color: #000000;">puntatori a</span> <span style="color: #000000;">array di</span></span></span></span></strong><span style="color: #000000;"><strong> <span style="color: #ff0000;">puntatori a</span> char.</strong></span></pre>
<p>Abbiamo quindi decriptato con facilità una dichiarazione che sembrava impossibile. Ora, per vedere se avete capito e se siete bravi vi lascio una dichiarazione per esercizio:</p>
<pre>int * ( (* (* foo) () ) [5][7]) ()</pre>
<p>Buon divertimento! <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=168&amp;md5=e5efdbaf499d47b8c9288fb782212f88" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2008/12/cc-dichiarazione-avanzata-dei-tipi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F12%2Fcc-dichiarazione-avanzata-dei-tipi%2F&amp;language=it_IT&amp;category=text&amp;title=C%2FC%2B%2B+%26%238211%3B+Dichiarazione+Avanzata+dei+Tipi&amp;description=Questo+articolo+prende+spunto+dal+corso+di+Ingegneria+degli+Algoritmi+e+da+un+articolo+di+Steve+Friedl+sulla+lettura+delle+dichiarazione+di+tipo.+Uno+degli+scogli+principali+per+chi+comincia...&amp;tags=C%2Cguida%2Cpuntatori%2Ctipi+di+dato%2Cvariabili%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Java &#8211; Multithreading</title>
		<link>http://davideaversa.it/slashcode/2008/11/java-multithreading/</link>
		<comments>http://davideaversa.it/slashcode/2008/11/java-multithreading/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 08:24:08 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[thread]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=149</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2008/11/java-multithreading/"><img title="Java &#8211; Multithreading" src="http://dymios.soloingegneria.com/wp-content/uploads/2008/10/threads-281x300.png" alt="Java &#8211; Multithreading"  width="187" height="200" /></a></div><br/>Posto qui di seguito la prima di una serie di guide pratiche su Java e sul Multithread che sta portando avanti un mio amico di università Dymios sul suo blog. Per ora metto solo la prima parte. Potete continuare la lettura sul suo blog. Multithreading in Java &#8211; di Dymios Una normale applicazione che gira <a href='http://davideaversa.it/slashcode/2008/11/java-multithreading/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Fjava-multithreading%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2008/11/java-multithreading/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Java &#8211; Multithreading" data-url="http://davideaversa.it/slashcode/2008/11/java-multithreading/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><div class="entry">
<p style="text-align:justify;">Posto qui di seguito la prima di una serie di <em>guide pratiche</em> su Java e sul Multithread che sta portando avanti un mio amico di università Dymios sul suo blog. Per ora metto solo la prima parte. Potete continuare la lettura sul <a title="Dymios" href="http://dymios.soloingegneria.com">suo blog</a>.</p>
<p style="text-align:justify;"><span id="more-149"></span></p>
<p style="text-align:justify;"><em>Multithreading in Java &#8211; di Dymios</em></p>
<p style="text-align:justify;">Una normale applicazione che gira sulla nostra macchina ha un solo flusso di esecuzione: si dice che ha un <em>singolo thread attivo</em>. Con la tecnica del multithreading è possibile creare diversi flussi di istruzioni in esecuzione per una singola applicazione. In questo modo possiamo delegare un certo compito ad un thread mentre noi nel programma principale eseguiamo qualche altra operazione. Possiamo cioè effettuare più calcoli ed operazioni <strong>in parallelo</strong>.</p>
<p style="text-align:center;"><a href="http://dymios.soloingegneria.com/wp-content/uploads/2008/10/threads.png"><img class="size-medium wp-image-219 aligncenter" title="threads" src="http://dymios.soloingegneria.com/wp-content/uploads/2008/10/threads-281x300.png" alt="" width="281" height="300" /></a></p>
<p style="text-align:justify;">Java offre due possibilità per fare questo, vediamole una per volta:</p>
<p><strong>1) Estendere la classe Thread<br />
</strong>Le operazioni da eseguire in un thread vanno scritte nel metodo run() di un oggetto che estende la classe java predefinita Thread. La classe chiamante dovrà creare un oggetto di tale classe ed invocare il metodo start(). La JVM a questo punto creerà il nuovo thread e invocherà il metodo run().</p>
<div class="wp_syntax">
<div class="code">
<pre class="java java" style="font-family:monospace;"><span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> Main <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">static</span> <span style="color:#000066;font-weight:bold;">void</span> main<span style="color:#009900;">(</span><span style="color:#003399;">String</span> args<span style="color:#009900;">[</span><span style="color:#009900;">]</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      MioThread t <span style="color:#339933;">=</span> <span style="color:#000000;font-weight:bold;">new</span> MioThread<span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
      t.<span style="color:#006633;">start</span><span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span>

<span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> MioThread <span style="color:#000000;font-weight:bold;">extends</span> <span style="color:#003399;">Thread</span> <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> MioThread<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span> ...<span style="color:#006633;">costruttore</span>... <span style="color:#009900;">}</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000066;font-weight:bold;">void</span> run<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      <span style="color:#003399;">System</span>.<span style="color:#006633;">out</span>.<span style="color:#006633;">println</span><span style="color:#009900;">(</span><span style="color:#0000ff;">"Sono il Thread t!"</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span></pre>
</div>
</div>
<p><strong>2) Implementare l’interfaccia Runnable</strong><br />
Metodo molto simile al precedente.</p>
<div class="wp_syntax">
<div class="code">
<pre class="java java" style="font-family:monospace;"><span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> Main <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">static</span> <span style="color:#000066;font-weight:bold;">void</span> main<span style="color:#009900;">(</span><span style="color:#003399;">String</span> args<span style="color:#009900;">[</span><span style="color:#009900;">]</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      MioRunnable runnable <span style="color:#339933;">=</span> <span style="color:#000000;font-weight:bold;">new</span> MioRunnable<span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
      <span style="color:#003399;">Thread</span> t <span style="color:#339933;">=</span> <span style="color:#000000;font-weight:bold;">new</span> <span style="color:#003399;">Thread</span><span style="color:#009900;">(</span>MioRunnable<span style="color:#009900;">)</span>;
      t.<span style="color:#006633;">start</span><span style="color:#009900;">(</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span>

<span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000000;font-weight:bold;">class</span> MioRunnable <span style="color:#000000;font-weight:bold;">implements</span> <span style="color:#003399;">Runnable</span> <span style="color:#009900;">{</span>
   <span style="color:#000000;font-weight:bold;">public</span> MioRunnable<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span> ...<span style="color:#006633;">costruttore</span>... <span style="color:#009900;">}</span>
   <span style="color:#000000;font-weight:bold;">public</span> <span style="color:#000066;font-weight:bold;">void</span> run<span style="color:#009900;">(</span><span style="color:#009900;">)</span> <span style="color:#009900;">{</span>
      <span style="color:#003399;">System</span>.<span style="color:#006633;">out</span>.<span style="color:#006633;">println</span><span style="color:#009900;">(</span><span style="color:#0000ff;">"Sono il Thread t!"</span><span style="color:#009900;">)</span>;
   <span style="color:#009900;">}</span>
<span style="color:#009900;">}</span></pre>
</div>
</div>
</div>
<p><!-- You can start editing here. --> <!-- If comments are open, but there are no comments. --></p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=149&amp;md5=123764062f07e46d14374aedc2265c43" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2008/11/java-multithreading/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Fjava-multithreading%2F&amp;language=it_IT&amp;category=text&amp;title=Java+%26%238211%3B+Multithreading&amp;description=Posto+qui+di+seguito+la+prima+di+una+serie+di+guide+pratiche+su+Java+e+sul+Multithread+che+sta+portando+avanti+un+mio+amico+di+universit%C3%A0+Dymios+sul+suo+blog....&amp;tags=classe%2Cguida%2Cjava%2Cthread%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Programmazione #11 &#8211; Oggetti &#8211; Generalità</title>
		<link>http://davideaversa.it/slashcode/2008/11/programmazione-11-oggetti-generalita/</link>
		<comments>http://davideaversa.it/slashcode/2008/11/programmazione-11-oggetti-generalita/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 17:15:45 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[attributi]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[interfaccia]]></category>
		<category><![CDATA[linguaggi]]></category>
		<category><![CDATA[metodi]]></category>
		<category><![CDATA[oggetti]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=143</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2008/11/programmazione-11-oggetti-generalita/"><img title="Programmazione #11 &#8211; Oggetti &#8211; Generalità" src="http://slashcode.files.wordpress.com/2008/11/oggetto_esterno.png?w=300" alt="Programmazione #11 &#8211; Oggetti &#8211; Generalità"  width="" /></a></div><br/>Continuiamo la serie di lezioni sulla programmazione generale, questa volta cercando di approfondire molti degli aspetti che nelle prime 10 parti introduttive avevamo lasciato appesi. Cominciamo perciò dal concetto che (dopo i puntatori) spiazza di più chi non ha confidenza con la programmazione: gli oggetti. Abbiamo già visto nelle parti precedenti il principio base su <a href='http://davideaversa.it/slashcode/2008/11/programmazione-11-oggetti-generalita/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Fprogrammazione-11-oggetti-generalita%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2008/11/programmazione-11-oggetti-generalita/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Programmazione #11 &#8211; Oggetti &#8211; Generalità" data-url="http://davideaversa.it/slashcode/2008/11/programmazione-11-oggetti-generalita/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Continuiamo la serie di <em>lezioni</em> sulla programmazione generale, questa volta cercando di approfondire molti degli aspetti che nelle prime 10 parti introduttive avevamo lasciato appesi. Cominciamo perciò dal concetto che (dopo i puntatori) spiazza di più chi non ha confidenza con la programmazione: <strong>gli oggetti</strong>.</p>
<p>Abbiamo già visto nelle parti precedenti il principio base su cui si fondano i linguaggi di programmazione orientati agli oggetti. In particolare abbiamo parlato del concetto di oggetto come del concetto di <strong>entità</strong> dotata di caratteristiche e abilità particolari.</p>
<p>Adesso cercheremo di entrare più in dettaglio su alcuni aspetti per ottenere le basi per futuri approfondimenti.</p>
<p><span id="more-143"></span>Dobbiamo innanzitutto tenere presente che un oggetto può essere visto da due punti di vista:</p>
<ul>
<li>Il punto di vista <strong>esterno</strong> che corrisponde al modo in cui un oggetto viene visto <strong>dal mondo esterno</strong>, cioè <strong>da tutti gli oggetti all&#8217;infuori di se stesso.</strong></li>
<li>Il punto di vista <strong>interno</strong> che corrisponde a come l&#8217;oggetto <strong>vede e interpreta se stesso.</strong></li>
</ul>
<p>Per chiarire un po la situazione considerate che l&#8217;interno di un oggetto è di interesse solamente per chi programma l&#8217;oggetto mentre il punto di vista esterno è di interesse per chiunque lo usi.</p>
<div id="attachment_144" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-144" title="oggetto_esterno" src="http://slashcode.files.wordpress.com/2008/11/oggetto_esterno.png?w=300" alt="Struttura esterna di un oggetto." width="300" height="119" /><p class="wp-caption-text">Struttura esterna di un oggetto.</p></div>
<p>Dall&#8217;esterno un oggetto è assimilabile ad una scatola sigillata. L&#8217;accesso e il funzionamento di questa scatola è garantito solamente dalle <em>leve</em> esterne chiamate <strong>metodi</strong>. L&#8217;insieme dei metodi esterni prende il nome di <strong>interfaccia esterna di un oggetto</strong> (spesso chiamata anche con l&#8217;acronimo <strong>API di un oggetto</strong>).</p>
<p>A livello esterno quindi un oggetto non è altro che un dispositivo accessibile dall&#8217;esterno grazie alla sua interfaccia esterna. E&#8217; da tenere presente che l&#8217;effettivo funzionamento di un oggetto, ovvero gli algoritmi che utilizza per rispondere ai metodi, non sono (ed è giusto che non siano) a conoscenza di un eventuale utilizzatore.</p>
<p>Come anticipato, i metodi caratterizzano <strong>cio che un oggetto sa fare</strong>, ma a questo punto potremmo essere più precisi definendo i metodi come <strong>le richieste a cui un oggetto sa rispondere. </strong>Alcuni linguaggi di programmazione ad oggetti (ad esempio ObjC) permettono di <em>invocare</em> su di un oggetto metodi qualunque e, ovviamente, l&#8217;oggetto reagirà solamente per i metodi per i quali era stato definito un comportamento.</p>
<p>Facciamo un esempio:</p>
<div id="attachment_145" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-145" title="orologio" src="http://slashcode.files.wordpress.com/2008/11/orologio.png?w=300" alt="L'oggetto Orologio visto dall'esterno." width="300" height="76" /><p class="wp-caption-text">L&#39;oggetto Orologio visto dall&#39;esterno.</p></div>
<p>L&#8217;oggetto <em>Orologio</em> è rappresentato in figura. Noi non sappiamo nulla di come e quali dati contenga e gestisca l&#8217;oggetto <em>Orologio</em>. Come è rappresentata l&#8217;ora? Con tre interi (ore, minuti, secondi)? Con il numero di secondi dalla mezzanotte? Non lo sappiamo e non ci importa.</p>
<p>Quello che ci interessa è che se noi invochiamo su <em>Orologio</em> il metodo <em>ottieniOra</em> riceveremo l&#8217;ora esatta e invocanto <em>impostaOra</em> potremo modificare l&#8217;ora.</p>
<p>Uno dei vantaggi di questo approccio è che se un giorno il programmatore che gestisce l&#8217;oggetto <em>Orologio</em> volesse stravolgere l&#8217;oggetto <em>Orologio, </em>purchè non modifichi l&#8217;interfaccia esterna, noi utilizzatori non dovremo preoccuparci perché tutto continuerà a funzionare tranquillamente.</p>
<p>Ma non possiamo limitarci ad usare oggetti altrui, prima o poi, saremo costretti a creare i nostri oggetti. Diamo quindi uno sguardo all&#8217;interno di un oggetto.</p>
<div id="attachment_147" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-147" title="oggetto_interno" src="http://slashcode.files.wordpress.com/2008/11/oggetto_interno.png?w=300" alt="Autopsia di un oggetto." width="300" height="141" /><p class="wp-caption-text">Autopsia di un oggetto.</p></div>
<p>Entrare nella struttura interna di un oggetto è simile ad aprire il cofano di un auto. La differenza principale con la struttura esterna è la presenza degli <strong>attributi</strong>. Gli attributi rappresentano <strong>ciò che un oggetto sa di se</strong>. Vengono perciò gestiti dall&#8217;oggetto stesso: è buona norma infatti non permettere mai l&#8217;accesso diretto esterno agli attributi ma permettere la loro modifica/lettura solo attraverso i metodi di interfaccia.</p>
<p>Altra differenza importante è la presenza di metodi accessibili solo dall&#8217;oggetto stesso. Questi metodi consistono spesso in <em>metodi ausiliari</em> <strong>che non hanno rilevanza esplicita per l&#8217;esterno ma sono utilizzati solo dai metodi dell&#8217;oggetto stesso.</strong></p>
<p>Un esempio di metodo interno potrebbe essere un algoritmo che converte dei valori di un attributo in un qualche formato che un altro metodo (probabilmente un metodo esterno) elaborerà e restituirà all&#8217;esterno.</p>
<p>Ovviamente nella realtà non ci troveremo spesso a vestire i panni di utilizzatore e di programmatore di un oggetto contemporaneamente. Quindi bisogna fare dimestichezza in tutte e due le &#8220;divise&#8221;.</p>
<p>Ora che conosciamo per bene <strong>cosa è</strong> un oggetto, andremo ad analizzare <strong>cosa rappresentare</strong> con un oggetto. Penso che alcuni di voi abbiano già intuito la cosa, ma ci sono due aspetti e alcune problematiche da approfondire: le differenze fra <strong>oggetti come entità</strong> e <strong>oggetti come valori</strong>.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=143&amp;md5=f85355fa9d3832d7d995cdadc08159aa" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2008/11/programmazione-11-oggetti-generalita/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Fprogrammazione-11-oggetti-generalita%2F&amp;language=it_IT&amp;category=text&amp;title=Programmazione+%2311+%26%238211%3B+Oggetti+%26%238211%3B+Generalit%C3%A0&amp;description=Continuiamo+la+serie+di+lezioni+sulla+programmazione+generale%2C+questa+volta+cercando+di+approfondire+molti+degli+aspetti+che+nelle+prime+10+parti+introduttive+avevamo+lasciato+appesi.+Cominciamo+perci%C3%B2+dal+concetto+che...&amp;tags=API%2Cattributi%2Cguida%2Cinterfaccia%2Clinguaggi%2Cmetodi%2Coggetti%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>GAPG &#8211; Bozza 01</title>
		<link>http://davideaversa.it/slashcode/2008/11/gapg-bozza-01/</link>
		<comments>http://davideaversa.it/slashcode/2008/11/gapg-bozza-01/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 07:47:37 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=141</guid>
		<description><![CDATA[Come già ho annunciato sto convertendo, ampliando e correggendo i 10 articoli di Guida alla Programmazione Generale in pdf. L&#8217;università ha rallentato molto questo processo e quindi per mostrarvi la mia buonafede inizio a darvi il link per la prima bozza. Per il momento contiene gli articoli da 1 a 6 con alcune imprecisioni corrette. <a href='http://davideaversa.it/slashcode/2008/11/gapg-bozza-01/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Fgapg-bozza-01%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2008/11/gapg-bozza-01/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="GAPG &#8211; Bozza 01" data-url="http://davideaversa.it/slashcode/2008/11/gapg-bozza-01/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Come già ho annunciato sto convertendo, ampliando e correggendo i 10 articoli di Guida alla Programmazione Generale in pdf. L&#8217;università ha rallentato molto questo processo e quindi per mostrarvi la mia buonafede inizio a darvi il link per la prima bozza.</p>
<p>Per il momento contiene gli articoli da 1 a 6 con alcune imprecisioni corrette. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a title="GAPG Bozza" href="http://dl.getdropbox.com/u/89889/GAPG_Bozza01.pdf">GAPG &#8211; Bozza01</a></p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=141&amp;md5=976dee5e8c5699e47b6b0d4be2d9c179" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2008/11/gapg-bozza-01/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Fgapg-bozza-01%2F&amp;language=it_IT&amp;category=text&amp;title=GAPG+%26%238211%3B+Bozza+01&amp;description=Come+gi%C3%A0+ho+annunciato+sto+convertendo%2C+ampliando+e+correggendo+i+10+articoli+di+Guida+alla+Programmazione+Generale+in+pdf.+L%26%238217%3Buniversit%C3%A0+ha+rallentato+molto+questo+processo+e+quindi+per+mostrarvi+la...&amp;tags=guida%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Lisp &#8211; Come iniziare a scrivere in Lisp</title>
		<link>http://davideaversa.it/slashcode/2008/11/lisp-come-iniziare-a-scrivere-in-lisp/</link>
		<comments>http://davideaversa.it/slashcode/2008/11/lisp-come-iniziare-a-scrivere-in-lisp/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 17:39:15 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Lisp/Scheme]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[gcl]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=138</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2008/11/lisp-come-iniziare-a-scrivere-in-lisp/"><img title="Lisp &#8211; Come iniziare a scrivere in Lisp" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Parentesi_Tonde.svg/70px-Parentesi_Tonde.svg.png" alt="Lisp &#8211; Come iniziare a scrivere in Lisp"  width="" /></a></div><br/>Nel corso di Modelli e Complessità che sto seguendo è stato introdotto il Lisp (List Processor o meglio Lots of Infuriating &#38; Silly Parenthesis) come esempio di linguaggio funzionale. Come ho accennato in passato la programmazione funzionale è un tipo di paradigma che pone l&#8217;accento sulla definizione di funzioni poichè il flusso del programma assume <a href='http://davideaversa.it/slashcode/2008/11/lisp-come-iniziare-a-scrivere-in-lisp/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Flisp-come-iniziare-a-scrivere-in-lisp%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2008/11/lisp-come-iniziare-a-scrivere-in-lisp/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Lisp &#8211; Come iniziare a scrivere in Lisp" data-url="http://davideaversa.it/slashcode/2008/11/lisp-come-iniziare-a-scrivere-in-lisp/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><div class="wp-caption alignleft" style="width: 80px"><img title="Parentesi" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Parentesi_Tonde.svg/70px-Parentesi_Tonde.svg.png" alt="Vi verrà lo sturbo." width="70" height="93" /><p class="wp-caption-text">Vi verrà lo sturbo.</p></div>
<p>Nel corso di <strong>Modelli e Complessità</strong> che sto seguendo è stato introdotto il <strong>Lisp</strong> (<em>List Processor</em> o meglio <em>Lots of Infuriating &amp; Silly Parenthesis</em>) come esempio di <strong>linguaggio funzionale</strong>.</p>
<p>Come ho accennato in passato la <strong>programmazione funzionale</strong> è un tipo di paradigma che pone l&#8217;accento sulla definizione di funzioni poichè <strong>il flusso del programma assume la forma di valutazione di funzioni matematiche</strong> e in particolare delle <strong>funzioni ricorsive.</strong></p>
<p>Senza addentrarci troppo in tecnicismi di informatica teorica passiamo subito ad affrontare la &#8220;pratica&#8221; con il linguaggio Lisp.</p>
<p><span id="more-138"></span></p>
<p>E&#8217; importante precisare però che il Lisp, sebbene funzionale, può benissimo essere usato come linguaggio imperativo. Tuttavia non affronteremo questo argomento in questo momento.</p>
<p>In questo <em>tutorial </em>useremo come shell di interprete <strong>GCL </strong>(<em>GNU Common Lisp</em>) e come editor <strong>Emacs </strong>(utilizzeremo Emacs non solo perchè è esso stesso scritto in Lisp <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ma perchè ci fornisce facilmente la colorazione della sintassi e altre cosine utili che altri editorn non forniscono).</p>
<p><strong>Installare CGL.</strong></p>
<p>Per prima cosa dobbiamo installare l&#8217;interprete. Di interpreti per il Lisp ed i relativi dialetti esistono una montagna di shell (ad esempio <strong>clisp</strong>, <strong>cmucl</strong>, e altri) ma noi useremo GCL perchè l&#8217;ho trovata la meno &#8220;incasinata&#8221; per molti comandi essenziali ed è conforme agli altri applicativi GNU.</p>
<p>Per installarla è veramente molto semplice. Basta digitare il classico</p>
<p><em>apt-get install gcl</em></p>
<p>e eventualmente</p>
<p><em>apt-get install gcl-doc</em></p>
<p>con privilegi di root (con <em>sudo </em>o <em>su</em>) per avere la nostra shell (e la sua documentazione) completamente funzionante avviabile con un semplice:</p>
<p><em>gcl</em></p>
<p><strong>Installare EMACS.</strong></p>
<p>Anche installare EMACS è qualcosa di semplicissimo, basta digitare:</p>
<p><em>apt-get install emacs emacs22-gtk</em></p>
<p><em>PS: </em>Esistono centinaia di pacchetti ed estenzioni di emacs per fargli fare qualunque cosa, dal giocare a scacchi, ad usarlo come client per MSN e Jabber, ma ovviamente credo sia roba superflua per ora!</p>
<p><strong>Scrivere il nostro primo file Lisp.</strong></p>
<p>Potremmo utilizzare il Lisp anche direttamente dalla shell gcl ma, come forse noterete, è molto più comodo scrivere su un file tutto il codice e passarlo direttamente alla shell. In questo modo potremmo salvare il nostro programma, creare moduli da riutilizzare in seguito o semplicemente evitare di riscrivere ogni volta da capo funzioni complesse.</p>
<p>Per fare questo apriamo Emacs.</p>
<p>Ora io utilizzerò le scorciatoie da tastiera, sebbene gli stessi comandi si possono fare per via grafica, perché le trovo estremamente più veloci.</p>
<p>Aprite un file (esistente o non) premendo:</p>
<p><em>CTRL + x<br />
CTRL + f</em></p>
<p>E digitando il nome del file e il relativo percorso (si può navigare facilmente con TAB).</p>
<p>Creiamo ad esempio il file <em>primo_lisp.lisp</em>.</p>
<p>Ora possiamo scrivere il programma che ci pare. Una volta finito salviamo premendo:</p>
<p><em>CTRL + x<br />
CTRL + s</em></p>
<p>Adesso che il nostro file è salvato abbiamo due modi per eseguirlo:</p>
<ol>
<li>Digitando da terminale <strong>gcl -f primo_lisp.lisp</strong></li>
<li>O ancora meglio aprendo gcl da terminale e importando il file direttamente dalla shell con il comando <strong>(load &#8220;primo_lisp.lisp&#8221;)</strong></li>
</ol>
<p>Grazie a questo secondo metodo potremo fare prove sulle funzioni definite in &#8220;primo_lisp.lisp&#8221;. Ad esempio possiamo usare due ottime funzioni di debugging:</p>
<ul>
<li>il comando <strong>(describe A)</strong> che stampa a schermo la descrizione dell&#8217;oggetto A (ovvero se è una funzione, un numero, una lista, ecc&#8230;</li>
<li>il comando <strong>(step A)</strong> che esegue le funzioni specificate in A <strong>passo per passo!!</strong> Veramente ottimo per il debug.</li>
</ul>
<p>Non vi resta che provare a scrivere alcune funzioni e provare questi comandi per prendere confidenza!</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=138&amp;md5=eacc442747e0ac858db0b7211cbcd918" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2008/11/lisp-come-iniziare-a-scrivere-in-lisp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2008%2F11%2Flisp-come-iniziare-a-scrivere-in-lisp%2F&amp;language=it_IT&amp;category=text&amp;title=Lisp+%26%238211%3B+Come+iniziare+a+scrivere+in+Lisp&amp;description=Nel+corso+di+Modelli+e+Complessit%C3%A0+che+sto+seguendo+%C3%A8+stato+introdotto+il+Lisp+%28List+Processor+o+meglio+Lots+of+Infuriating+%26amp%3B+Silly+Parenthesis%29+come+esempio+di+linguaggio+funzionale.+Come...&amp;tags=emacs%2Cgcl%2Cguida%2Clisp%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>

