<?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>Alessandro Stella - Appunti di informatica &#187; programmazione a oggetti</title>
	<atom:link href="http://www.alessandrostella.it/tag/programmazione-a-oggetti/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alessandrostella.it</link>
	<description>Appunti sparsi di informatica</description>
	<lastBuildDate>Tue, 07 Feb 2012 17:20:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Dissertazione sulla programmazione in Italia</title>
		<link>http://www.alessandrostella.it/varie/2010/03/dissertazione-sulla-programmazione-italia/</link>
		<comments>http://www.alessandrostella.it/varie/2010/03/dissertazione-sulla-programmazione-italia/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 14:03:09 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[varie]]></category>
		<category><![CDATA[programmazione a oggetti]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=776</guid>
		<description><![CDATA[Non son sicuro che ci sia qualcuno che legge quello che scrivo , ma se c&#8217;è si sarà di sicuro accorto che non scrivo nulla da un mese. Sono andato in giro per il mondo a vedere come si lavora (in ambito informatico) negli altri Paesi&#8230; Inghilterra, Germania, Francia, Australia (bellissima! Prima o poi mi [...]<div id="artCorr">
            <h4>Articoli correlati</h4>
        <ol>
	    	    <li><a href="http://www.alessandrostella.it/programmazione/2009/10/java-i-reference-e-la-programmazione-a-oggetti/" rel="bookmark">Java, i reference e la RAM</a><!-- (4.5)--></li>
	            </ol>
    </div>]]></description>
			<content:encoded><![CDATA[<p>Non son sicuro che ci sia qualcuno che legge quello che scrivo <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> , ma se c&#8217;è si sarà di sicuro accorto che non scrivo nulla da un mese. Sono andato in giro per il mondo a vedere come si lavora (in ambito informatico) negli altri Paesi&#8230; Inghilterra, Germania, Francia, Australia (bellissima! Prima o poi mi ci trasferirò!).<br />
Erano anni che ne avevo il sospetto, ma ora che sono finalmente riuscito ad andare a vedere come si lavora all&#8217;estero posso dire di averne la certezza: <strong>in Italia i professionisti nella programmazione ad oggetti sono pochi, molto pochi, troppo pochi (almeno in ambito java)!</strong> Sono invece molto, ma molto diffusi i quaqquaraqquà! Ciò che colpisce e che ferisce è che molti di questi &#8220;quaqquaraqquà&#8221; vorrebbero non esserlo perché non lo sono né per indole né per formazione, ma si sono dovuti &#8220;piegare&#8221; alla realtà italiana&#8230; <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
Andiamo con ordine.<br />
Da sempre mi trovo fianco a fianco con persone che utilizzano tecnologie evolute e utili come struts, spring, hibernate, jsf e chi più ne ha più ne metta. Da sempre ho il sospetto che queste persone, chiamate &#8220;professionisti&#8221;, usino tali tecnologie senza sapere <strong>perché</strong> sono state pensate, realizzate e <strong>perché</strong> sono così diffusamente utilizzate. Ora il mio sospetto è una certezza: non lo sanno!<br />
Non lo sanno e non si pongono il problema di saperlo perché in Italia è giudicato &#8220;poco produttivo&#8221; porsi domande, migliorarsi, evolvere&#8230; <strong>In Italia non vengono assunte le menti delle persone, in Italia si cercano manovali, ossia uomini e donne che si siedono ad una scrivania ed eseguono ordini!</strong><br />
<span id="more-776"></span>Ok. Non si può e non si deve fare di tutte le erbe un solo fascio, sono d&#8217;accordo, ma le mie variegate esperienze da nord a sud della nostra Nazione lasciano poco spazio alla speranza che tale abitudine sia di una minoranza&#8230; non è così. Ecco perché, in breve tempo, tutto ciò che è stato studiato per anni all&#8217;Università finisce in un cassetto e l&#8217;unico obiettivo da raggiungere diventa saper usare la tecnologia X. Sto ancora disperatamente cercando un collega in grado di motivare l&#8217;uso di questa piuttosto che quella tecnologia. L&#8217;unica motiviazione che ho ottenuto è più o meno sempre la stessa: &#8220;la usano tutti, significherà qualcosa!&#8221;. Quando poi incalzo e inizio la solita sequenza di domande:</p>
<ul>
<li>Perché l&#8217;hanno creata?</li>
<li>Perché è così utilizzata?</li>
<li>E&#8217; utile nel contesto in cui ti trovi?</li>
<li>Quali sono le alternative?</li>
<li>Perché, tra tutte le alternative possibili, hai scelto proprio questa tecnologia?</li>
</ul>
<p>Nessuno mi risponde perché nessuno ha scelto! <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
Eppure all&#8217;Università ci hanno inculcato con la forza il concetto di scouting e, fuori dall&#8217;Italia, hanno saputo rispondere alle stesse domande con estrema precisione! Tutto ciò è scrupolosamente osservato in quasi tutti i posti di lavoro visitati in Germania, Inghilterra, Australia&#8230; ma non in Italia! Noi siamo bravissimi ad andare su un qualunque forum, chiedere a qualcuno il codice per ottenere un determinato obiettivo e copiarlo con &#8220;creatività&#8221; <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /><br />
Questa è la realtà che ho toccato con mano per dieci anni. Mi avevano quasi convinto che il mio essere critico e il mio pormi tutte quelle domande, il mio volermi sempre migliorare e il mio voler imparare fosse davvero sbagliato! E in verità nel contesto Italia&#8230; è sbagliato!<br />
Del resto per capire i motivi che hanno spinto i nostri &#8220;colleghi&#8221; (spero non si offendano) a creare struts, spring e tutti gli altri, bisogna necessariamente avere una forte competenza della programmazione ad oggetti, molto prima di conoscere java e il mondo infinito che lo circonda. Invece, parlando con i &#8220;professionisti&#8221; di cui sopra, si scopre molto facilmente che non conoscono concetti come &#8220;coesione&#8221; o &#8220;basso accoppiamento&#8221; né hanno un&#8217;idea troppo precisa di cosa siano i patterns o altri concetti fondamentali nella programmazione ad oggetti. Non solo. Se si prova a intraprendere con suddetti professionisti un tale discorso, si viene puntualmente snobbati e il discorso bollato come &#8220;teorico&#8221; e quindi &#8220;lontano dalla pratica aziendale&#8221;. Già, vero. Magari è proprio per questo che non esportiamo una riga di codice e riscriviamo lo stesso software ogni 2 anni! <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /><br />
Proseguiamo&#8230;<br />
Da quando lavoro nell&#8217;ambito della programmazione ad oggetti (e non) non ho mai (e sottolineo mai) visto uno unit test e tanto meno un integration test. L&#8217;unico test visto più volte è il test funzionale. In verità non ho neanche visto un documento di analisi e pochissimi di progettazione, comunque senza analisi <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  Eppure in tutti i miei studi ho sempre letto e imparato che il software va accuratamente progettato, che tutto parte da una corretta e attenta analisi, ecc. ecc. Ma quando mai? In Italia? E chi segue queste &#8220;follie&#8221;? Non c&#8217;è tempo per pensare a queste &#8220;stupidaggini&#8221; e, sopratuttto, molte aziende sono convinte che tali accortezze non producano soldi, anzi pensano che esse rallentino soltanto il processo produttivo. Non c&#8217;è quindi da meravigliarsi se:</p>
<ul>
<li>non ho mai trovato un collega in grado di fare un&#8217;analisi professionale di un software</li>
<li>ho visto una progettazione UML solo un paio di volte (una delle quali l&#8217;ho imposta io!)</li>
<li>ho visto DB senza constraints e senza un diagramma E-R</li>
</ul>
<p>Purtroppo non ho lavorato per piccole realtà aziendali che quindi, producendo piccoli software, possono permettersi di trascurare certi aspetti (siamo sicuri che possono permetterselo?). Nel mio curriculum si trovano multinazionali come H3G, GlobalValue o enti importanti come Regione Lombardia, la federazione degli ingegneri di Puglia&#8230; in poche parole ho realizzato o gestito applicazioni (quasi sempre web) con un numero spropositato di potenziali utenti! Utenti che usavano (e usano) applicazioni costituite da jsp da 8000 righe nelle quali troviamo query SQL mischiate a codice java, database senza capo né coda e potrei continuare.<br />
Proseguiamo&#8230;<br />
<strong>Vogliamo poi parlare di sicurezza?</strong><br />
In Italia &#8220;sicurezza&#8221; per le applicazioni web significa 2 cose:</p>
<ul>
<li>firewall</li>
<li>proxy</li>
</ul>
<p>Fine.<br />
E se, per esempio, installo un proxy in locale, intercetto i parametri http, li modifico e invio roba fuori di testa alla tua applicazione web, cosa succede??? Il firewall e il proxy non possono farci nulla! A questa domanda o spalancano gli occhi o mi rispondono con qualcosa del tipo: &#8220;che razza di ipotesi strampalata stai facendo? Questa è fanta informatica!&#8221;. Scusate, ma non posso non pormi una domanda!<br />
<strong>Per quale motivo i miei colleghi agiscono e reagisocno in questo modo?</strong> Eppure hanno i miei stessi titoli e io non son mai stato un genio! E allora? Il problema l&#8217;ho esposto all&#8217;inizio e l&#8217;ho identificato solo dopo aver visto come &#8220;ragionano&#8221; fuori dalla nostra Nazione e sapete cosa vi dico?<br />
<strong>Non sono le Università italiane a essere lontane dal mondo lavorativo! E&#8217; il mondo lavorativo italiano ad essere lontano dalle pratiche internazionali nella produzione del codice!</strong>.<br />
Questa è la verità in ambito informatico!<br />
Ecco il tipico ragionamento di un&#8217;azienda inglese (tedesca, francesce, americana, australiana). &#8220;Ehi man, tu hai studiato all&#8217;Università come si crea un software? Hai studiato i princìpi dell&#8217;ingegneria del software? Hai studiato come si fa un test, come si procede nella fase di analisi, di progettazione e di implementazione di un software? Bene! Noi cerchiamo proprio te! Paghiamo le tue competenze perché tu possa metterle al nostro servizio nella produzione del nostro business! Tu metti in pratica le tue competenze acquisite all&#8217;Università e noi ti paghiamo! Non solo! Se ci indichi quali sono le competenze che ritieni opportuno approfondire per migliorare la produzione del software, noi ti paghiamo i migliori corsi perché tu possa diventarne padrone e usarle per noi.&#8221;. Lo so, in Italia queste frasi sono pura fantascienza e infatti i nostri laureati sono tutti andati via! Uno dei problemi che ci impedisce di essere concorrenziali è che molte (troppe) delle nostre aziende sono ancora di stampo &#8220;padronale&#8221; e quindi i dirigenti pretendono di indicare ai tecnici come produrre il software, quali strumenti usare e magari anche come! Mi viene in mente un brano musicale dal titolo <a href="http://www.angolotesti.it/G/testi_canzoni_giorgio_gaber_4285/testo_canzone_io_non_mi_sento_italiano_157445.html" target="_blanck">&#8220;io non mi sento italiano&#8221;</a> <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
<strong>Vogliamo quindi aggiungere qualche parolina sulle retribuzioni italiane e sulle nostre &#8220;aziende&#8221;?</strong><br />
Dai, proviamoci!<br />
Le cose stanno esattamente nei seguenti termini.<br />
Un neo-laureato in (ingegneria) informatica in Italia inizia a lavorare a non meno di 27 anni. Se si occupa di programmazione software il suo stipendio iniziale non supererà mai i 1200 euro al mese. Dopo 5 anni guadagnerà circa il 15% in più, producendo software come sopra descritto <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  Quando questo povero cristo inzierà la sua ricerca di un impiego <strong>in Italia</strong>, troverà annunci di aziende che recitano puntualmente così: &#8220;lo stipendio sarà commisurato alla reali capacità del candidato&#8221;. <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  Ma dai! Non mi dire! Speravo mi pagassi il doppio di quello che valgo!<br />
<strong>Nel resto del mondo</strong> invece gli annunci recitano puntualmente così: &#8220;se sarai valutato idoneo per questo lavoro il tuo stipendio sarà di n euro (dollari, sterline) all&#8217;ora, oppure nk euro (dollari, sterline) all&#8217;anno&#8221;.<br />
Trovate per caso una qualche differenza? <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /><br />
Ma non c&#8217;è da meravigliarsi!<br />
Potrebbe mai un&#8217;azienda cercare un ingegnere informatico con 5 anni di esperinza su java e offrirgli 10 euro l&#8217;ora??? In Germania te ne danno 20; in Inghilerra ti danno 30 sterline l&#8217;ora; addirittura in Spagna offrono 15 euro l&#8217;ora <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  Lasciamo poi perdere USA e Australia: potremmo sembrare terzo mondo <img src='http://www.alessandrostella.it/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
Ovviamente potete non credere alle mie parole. Posso scrivere quello che mi pare! Fate bene. Dubitate sempre e cercate sempre conferme; in ogni campo.<br />
Ecco perché vi indico qualche luogo dovo potrete verificare quello che vi ho scritto:</p>
<ul>
<li><a href="http://www.jobserve.co.uk/">Cerca un lavoro e verifica gli stipendi in UK</a></li>
<li><a href="http://www.jobber.de/">Cerca lavoro in Germania</a></li>
<li><a href="http://mycareer.com.au/">Lavorare in Australia</a></li>
<li><a href="http://content.mycareer.com.au/salary-centre/it-telecommunications/-/australia">Stipendi medi per il settore IT  in Australia</a></li>
</ul>
<p>Ovunque nel mondo occidentale, tranne che in Italia, negli anunci di lavoro trovate il salario che vi spetta per quel lavoro! Ovunque, tranne che in Italia, coloro che studiano all&#8217;Università vengono messi al centro del business aziendale (almeno in campo informatico).<br />
Quando questa Nazione, poverina, capirà che senza le competenze universitarie e senza i giovani dai 25 ai 45 anni, senza il loro entusiasmo, senza le loro competenze, senza la loro forza non c&#8217;è futuro&#8230; sarà troppo tardi&#8230; troppo tardi&#8230;<br />
Per questi e altri motivi voglio concludere con un consiglio.<br />
Sei laureato in (ingegneria) informatica? Impara questo benedetto inglese (che noi italiani non conosciamo!) e lascia l&#8217;Italia nel più breve tempo possibile! Se superi i 35 anni avrai grosse difficoltà ad andare via da questo baraccone di improvvisati!</p>
<div id="artCorr">
            <h4>Articoli correlati</h4>
        <ol>
	    	    <li><a href="http://www.alessandrostella.it/programmazione/2009/10/java-i-reference-e-la-programmazione-a-oggetti/" rel="bookmark">Java, i reference e la RAM</a><!-- (4.5)--></li>
	            </ol>
    </div>]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/varie/2010/03/dissertazione-sulla-programmazione-italia/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Java, i reference e la RAM</title>
		<link>http://www.alessandrostella.it/programmazione/2009/10/java-i-reference-e-la-programmazione-a-oggetti/</link>
		<comments>http://www.alessandrostella.it/programmazione/2009/10/java-i-reference-e-la-programmazione-a-oggetti/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 12:32:27 +0000</pubDate>
		<dc:creator>Alessandro</dc:creator>
				<category><![CDATA[programmazione]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[programmazione a oggetti]]></category>
		<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.alessandrostella.it/?p=166</guid>
		<description><![CDATA[Questo è un argomento ostile, nel quale è facile perdersi, ma nello stesso tempo è la prima porta da aprire se si vuole entrare a pieno titolo nel mondo della programmazione java&#8230; Innanzitutto distinguiamo tra reference value e object reference. Un reference value rappresenta un valore (value) e precisamente il valore che viene restituto quando [...]<div id="artCorr">
            <h4>Articoli correlati</h4>
        <ol>
	    	    <li><a href="http://www.alessandrostella.it/programmazione/2009/11/java-e-i-dati-primitivi-e-la-ram/" rel="bookmark">Java, i dati primitivi e la RAM</a><!-- (23.7)--></li>
	    	    <li><a href="http://www.alessandrostella.it/programmazione/2009/12/java-lereditarieta-e-i-reference/" rel="bookmark">Java, l&#8217;ereditarietà e i reference</a><!-- (17.5)--></li>
	    	    <li><a href="http://www.alessandrostella.it/programmazione/2009/11/java-e-il-passaggio-di-parametri/" rel="bookmark">Java e il passaggio di parametri</a><!-- (15.7)--></li>
	            </ol>
    </div>]]></description>
			<content:encoded><![CDATA[<p>Questo è un argomento ostile, nel quale è facile perdersi, ma nello stesso tempo è la prima porta da aprire se si vuole entrare a pieno titolo nel mondo della programmazione java&#8230;</p>
<p>Innanzitutto distinguiamo tra <strong>reference value</strong> e <strong>object reference</strong>.<br />
Un <strong>reference value</strong> rappresenta un valore (value) e precisamente il valore che viene restituto quando viene creato un particolare oggetto.<br />
Un <strong>object reference</strong> (o semplicemnte reference) rappresenta invece una variabile che può memorizzare un reference value.<br />
Questa differenza deve essere chiara perché altrimenti niente sarà mai chiaro con i reference in java!<br />
Ora traduciamo questi concetti in codice.<br />
Creiamo 2 object reference di tipo MiaClasse:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">MiaClasse refOggetto1, refOggetto2<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Scrivendo questa riga di codice abbiamo comunicato a java di creare due variabili (nella RAM del calcolatore) di tipo <em>MiaClasse</em> e gli abbiamo anche detto che in queste 2 variabili DOVRANNO essere inseriti dei valori che si riferiranno (reference) a 2 oggetti di tipo <em>MiaClasse</em>. Stiamo parlando di &#8220;reference&#8221;! Questo significa che in queste 2 variabili java NON inserirà MAI gli oggetti veri e propri, ma il rifeimento a tali oggetti!!!<br />
Rileggete bene l&#8217;ultimo paragrafo: è molto importante!</p>
<p>Bene. Inseriamo allora tali riferimenti ai 2 oggetti:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">refOggetto1 <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MiaClasse<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
refOggetto2 <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MiaClasse<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>A questo punto java assegna un valore a <em>refOggetto1</em> e un altro valore a <em>refOggetto2</em>. Ribadisco ancora che tale valore NON indica l&#8217;oggetto vero e proprio, ma indica la posizione (in RAM) dell&#8217;oggetto; il suo &#8220;riferimento&#8221;.<br />
Si può rappresentare graficamente quanto detto con la seguente figura (scusate la poca eleganza).</p>
<p><img src="http://www.alessandrostella.it/wp-content/uploads/2009/10/ram.gif" alt="Oggetti in RAM" title="Oggetti in RAM" width="412" height="230" class="alignnone size-full wp-image-399" /></p>
<p>In questa figura c&#8217;è rappresentato tutto quello che bisogna sapere sui reference!<br />
<span id="more-166"></span><br />
Perché i reference <em>refOggetto1</em> e <em>refOggetto2</em> hanno uno sfondo bicolore?<br />
La risposta a questa domanda svelerà uno dei segreti di java&#8230;<br />
<strong>Nei reference non viene inserito soltanto l&#8217;indirizzo di memoria in cui è memorizzato l&#8217;oggetto, ma anche l&#8217;intervallo di memoria che sarà occupato dall&#8217;oggetto!</strong><br />
Quindi è come se nella parte verde chiaro ci fosse scritto l&#8217;indirizzo RAM dove &#8220;inizia&#8221; l&#8217;oggetto che ci interessa, mentre nella parte verde scuro fosse indicato lo spazio da sommare al punto iniziale per contenere l&#8217;oggetto.<br />
Vi siete mai chiesti perché scrivere:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>MiaClasse.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>procuri un output simile al seguente?</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">MiaClasse@c3c749</div></td></tr></tbody></table></div>
<p>La @ è il separatore tra la parte verde chiaro e quella verde scuro!</p>
<p>Ora comprendere a fondo questo concetto sarà di fondamentale importanza quando parleremo di polimorfismo e di metodi virtuali!</p>
<p>In java NON avremo mai a che fare con gli oggetti veri e propri (indicati con lo sfondo rosa nella figura), ma solo con i loro riferimenti (sfondo verde).<br />
Ecco perché quando noi scriviamo:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">refOggetto2 <span style="color: #339933;">=</span> refOggetto1<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>NON stiamo rendendo uguali gli oggetti e in realtà non stiamo rendendo uguali neanche i reference, ma solo una parte dei reference, cioè la parte che indica dove inizia l&#8217;oggetto in memoria.<br />
Questo significa che dopo tale istruzione refOggetto2 punterà allo stesso indirizzo di memoria a cui punta refOggetto1 e quindi se noi apportiamo una modifica all&#8217;oggetto puntato da refOggetto2 la ritroviamo anche sull&#8217;oggetto puntato da refOggetto1; per forza! Entrambi puntano allo stesso oggetto!<br />
<img src="http://www.alessandrostella.it/wp-content/uploads/2009/10/ram2.gif" alt="Uguagliare 2 reference" title="Uguagliare 2 reference" width="412" height="230" class="size-full wp-image-405" /><br />
L&#8217;oggetto a cui puntava refOggetto2 rimarrà in memoria fino a quando java, tramite il suo garbage collector, non si accorgerà che nessuno lo &#8220;cerca&#8221; e lo eliminerà.</p>
<p>Ma tutto quanto detto è valido solo e soltanto se i 2 reference sono stati dichiarati dello stesso tipo (come nel nostro caso)!<br />
Se invece avessimo scritto:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">MiaClasse refOggetto1<span style="color: #339933;">;</span><br />
MiaClasse2 refOggetto2<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>e se non ci fosse legame tra le 2 classi, scrivere:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">refOggetto2 <span style="color: #339933;">=</span> refOggetto1<span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>produrrebbe un errore in compilazione!</p>
<p>Abbiamo già visto che con i dati primitivi le cose funzionano ben diversamente, ma vi rimando ai relativi post.<br />
<a href="http://www.alessandrostella.it/java/2009/11/java-e-i-dati-primitivi-e-la-ram/">I dati primitivi</a><br />
<a href="http://www.alessandrostella.it/java/2009/11/java-e-il-passaggio-di-parametri/">Il passaggio dei parametri</a><br />
Gli argomenti sono strettamente collegati.<br />
Per &#8220;evolvere&#8221; il pensiero invece, è bene leggere questo post: java il polomorfismo e i metodi virtuali.<br />
Mal di testa? E&#8217; normale&#8230; passerà!</p>
<div id="artCorr">
            <h4>Articoli correlati</h4>
        <ol>
	    	    <li><a href="http://www.alessandrostella.it/programmazione/2009/11/java-e-i-dati-primitivi-e-la-ram/" rel="bookmark">Java, i dati primitivi e la RAM</a><!-- (23.7)--></li>
	    	    <li><a href="http://www.alessandrostella.it/programmazione/2009/12/java-lereditarieta-e-i-reference/" rel="bookmark">Java, l&#8217;ereditarietà e i reference</a><!-- (17.5)--></li>
	    	    <li><a href="http://www.alessandrostella.it/programmazione/2009/11/java-e-il-passaggio-di-parametri/" rel="bookmark">Java e il passaggio di parametri</a><!-- (15.7)--></li>
	            </ol>
    </div>]]></content:encoded>
			<wfw:commentRss>http://www.alessandrostella.it/programmazione/2009/10/java-i-reference-e-la-programmazione-a-oggetti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

