<?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>denisbilli.it &#187; OOP</title>
	<atom:link href="http://blog.denisbilli.it/category/programmazione/oop/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.denisbilli.it</link>
	<description>esperienze di vita di un informatico</description>
	<lastBuildDate>Tue, 11 Oct 2011 19:46:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Introduzione alla OOP &#8211; Estendere le Classi</title>
		<link>http://blog.denisbilli.it/guide-csharp-oop-estendere-classi/</link>
		<comments>http://blog.denisbilli.it/guide-csharp-oop-estendere-classi/#comments</comments>
		<pubDate>Sat, 05 Jan 2008 07:00:18 +0000</pubDate>
		<dc:creator>Denis</dc:creator>
				<category><![CDATA[Linguaggi .Net]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[enum]]></category>
		<category><![CDATA[estendere]]></category>
		<category><![CDATA[estensione di una classe]]></category>
		<category><![CDATA[extends]]></category>
		<category><![CDATA[flags]]></category>
		<category><![CDATA[interfacce]]></category>
		<category><![CDATA[interfaccia]]></category>
		<category><![CDATA[introduzione]]></category>
		<category><![CDATA[polimorfismo]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.denisbilli.it/2008/01/05/introduzione-alla-oop-parte-3-estendere-una-classe/</guid>
		<description><![CDATA[Continua il mio articolo sulla programmazione orientata agli oggetti. Abbiamo definito nei due scorsi articoli cosa è l&#8217;ereditarietà e cosa è esattamente una interfaccia e come queste due entità siano in relazione fra loro. Abbiamo però tralasciato alcuni concetti molto &#8230; <a href="http://blog.denisbilli.it/guide-csharp-oop-estendere-classi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><div style="float: right; margin-top: -5px;"><script type="text/javascript"><!--
google_ad_client = "pub-8461338432937674";
/* 250x250, creato 18/03/09 */
google_ad_slot = "9778664009";
google_ad_width = 250;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></p><p style="text-align: center"><img src="http://www.compagnia3stelle.it/billo/blog/help.jpg" alt="help" /></p>
<p>Continua il mio articolo sulla programmazione orientata agli oggetti. Abbiamo definito nei due scorsi articoli cosa è l&#8217;ereditarietà e cosa è esattamente una interfaccia e come queste due entità siano in relazione fra loro. Abbiamo però tralasciato alcuni concetti molto importanti della programmazione ad oggetti: <strong>cosa è una classe</strong>? <strong>Come interagiscono tra loro</strong> e soprattutto, <strong>come si fa ad estendere una classe</strong>?</p>
<p><span id="more-68"></span></p>
<p>Con i concetti descritti finora, possiamo già dare un significato all&#8217;entità &#8220;<strong>classe</strong>&#8220;.</p>
<p><em>Una classe altro non è che l&#8217;insieme dei metodi, delle proprietà e degli attributi di un particolare oggetto</em>.</p>
<p>Nella programmazione procedurale, come ad esempio nel C, capitava spesso di trovarsi di fronte a problemi come avere bisogno di una entità in grado di gestire da sola i propri problemi.</p>
<blockquote>
<h5>Esempio:</h5>
<p>Un esempio lampante che mi viene in mente (dovuto probabilmente alle mille ore dedicate all&#8217;esame di Reti di Calcolatori), è quello in cui bisognava realizzare una comunicazione con un server nel quale si lavorava con le varie socket e poi bisognava spedire e ricevere dati. Al tempo, per l&#8217;esame realizzai un file che aveva i metodi <strong>Connect</strong>, <strong>Send</strong>, <strong>Receive</strong>, <strong>CloseConnection </strong>(nel caso TCP ovviamente). Questo file lo importavo nel main e tramite quelle 4 funzioni lavoravo direttamente con il server. E se avessi dovuto lavorare con 2 server diversi contemporaneamente? Non potevo di certo usare le stesse funzioni perchè logicamente erano dedicate al primo server e quindi o creavo un thread parallelo (che su windows è <span style="text-decoration: line-through;">un mezzo casino</span> abbastanza complicato), oppure risolvevo creando altre 4 funzioni, <strong>Connect2</strong>, <strong>Send2</strong>, <strong>Receive2</strong>, <strong>CloseConnection2</strong>, con tutti i problemi che ne derivavano&#8230; Ovvero che se avessi dovuto contattare un 3° server sarebbe stata la fine, se poi usavo RPC con tutta la questione dei puntatori sarei completamente collassato a terra. L&#8217;esame per fortuna è passato e ora mi dedico al C#, che di questi problemi non ne ha nemmeno l&#8217;ombra. Con l&#8217;introduzione dei linguaggi a oggetti come Java, Smalltalk, C#, C++ e vari, basta creare una <em><strong>classe</strong></em> (<strong>un oggetto</strong>, <strong>un&#8217;entità a sé</strong> quindi), che contiene questi 4 metodi, poi creare 4 istanze di questa classe ed il gioco è fatto. In C# questa classe esiste già e si chiama ad esempio <strong>TcpClient</strong> che guarda caso ha i metodi <strong>Connect </strong>e <strong>Close</strong> e un metodo <strong>GetStream()</strong> che permette di inviare e ricevere i dati dal canale.</p></blockquote>
<p>C# gestisce egregiamente questa caratteristica, essendo il framework completamente basato e orientato agli oggetti. Infatti, <em><strong>ogni singola classe deriva in maniera diretta o indiretta dalla classe object</strong></em>, anche i numeri interi per capirci. Quindi, fare:</p>
<pre class="brush: csharp; title: ; notranslate">
object numeroIntero = 5;</pre>
<p>oppure</p>
<pre class="brush: csharp; title: ; notranslate">
int numeroIntero = 5;</pre>
<p>è esattamente la stessa identica cosa. Utilizzando una tecnica particolare comune a tutti i linguaggi managed (ovvero che si basano su un framework, quindi C#, VB.Net, Java ecc), la <strong>Reflection</strong>, e richiedendo il tipo di oggetto ad entrambi, in questo modo:</p>
<pre class="brush: csharp; title: ; notranslate">
numeroIntero.GetType();</pre>
<p>otterremo entrambe le volte <strong>System.Int32</strong>, che si riferisce appunto ad un numero intero.Ora che abbiamo chiarito a cosa ci riferiamo quando parliamo dell&#8217;entità <strong>classe</strong>, cerchiamo di chiarire meglio come interagiscono tra di loro diverse classi. Ritorniamo perciò al <a title="nostro problema iniziale" href="http://blog.denisbilli.it/2007/12/29/introduzione-alla-oop-parte-1-ereditarieta/trackback/" class="broken_link">nostro problema iniziale</a>. La prima cosa che balza all&#8217;occhio è che esistono 4 tipologie di acceleratore, 1 per ogni tipo di vettura. Visto che ogni acceleratore non ha funzionalità particolari, possiamo definire un enumerativo che li include tutti:</p>
<pre class="brush: csharp; title: ; notranslate">
public enum TipoAcceleratore : int {
Tipo1 = 1,
Tipo2 = 2,
Tipo3 = 3,
Tipo4 = 4
}</pre>
<p>Un&#8217;enumerativo è semplicemente una lista di oggetti, come un&#8217;insieme di categorie. L&#8217;enumerativo per antonomasia è la settimana:</p>
<pre class="brush: csharp; title: ; notranslate">
public enum Settimana : int {
Lunedì = 1,
Martedì = 2,
Mercoledì = 3,
Giovedì = 4,
Venerdì = 5,
Sabato = 6,
Domenica = 7
}</pre>
<p>Il nostro enumerativo TipoAcceleratore è definito come estensione della classe Int32, questo perchè in questo modo possiamo passare dal valore numerico dell&#8217;enumerativo a quello letterale senza problemi.Diamo ora un senso alla classe <strong>MacchinaGenerica</strong> che avevamo cominciato a vedere la volta scorsa, inseriamo perciò dei campi, ovvero dei dati appartenenti alla classe stessa:</p>
<pre class="brush: csharp; title: ; notranslate">
private TipoAcceleratore _acceleratore = TipoAcceleratore.Tipo1;
private int _valAccelerazione = 0;
private int _curvatura = 0;
private string _nome = &quot;Non ho un nome!&quot;;

//questo è il costruttore, ovvero una funzione che viene chiamata non appena viene creata la classe
public MacchinaGenerica(string nome, int accelerazione)
{
Nome = nome;
Acceleratore = (TipoAcceleratore)accelerazione;
}

public string Nome
{
get { return _nome; }
set { _nome = value; }
}

public int Curvatura
{
get { return _curvatura; }
set { _curvatura = value; }
}

public int ValoreAccelerazione
{
get { return _valAccelerazione; }
set { _valAccelerazione = value; }
}

public TipoAcceleratore Acceleratore
{
get { return _acceleratore; }
//il set è definito protetto per non fare modificare il valore dall'esterno
protected set { _acceleratore = value; }
}</pre>
<p>C&#8217;è un pò di carne al fuoco. Cominciamo subito a vedere il costruttore. Il costruttore è una funzione che viene chiamata (eseguita) non appena viene creata un&#8217;istanza della classe, rimanendo nel paragone è un pò ciò che accade non appena viene costruita una vettura, quando il telaio viene marchiato per una ed una volta soltanto. Infatti nel costruttore noi andiamo a definire la tipologia dell&#8217;acceleratore, che può essere definito solo in questo momento e mai più, in quanto il <strong>set</strong> del campo è definito <strong>protetto</strong> (è un pò come se ogni volta che andassimo ad accendere la macchina potessimo decidere se può accelerare come una Ferrari o come una Cinquecento&#8230; non avrebbe senso!). Adesso siamo pronti per vedere un esempio di vettura vera e propria, creiamo perciò la classe Fiat500:</p>
<pre class="brush: csharp; title: ; notranslate">
public class Fiat500 : MacchinaGenerica
{
public Fiat500()
: base(&quot;Fiat500&quot;, 1)
{
}
}</pre>
<p>Come vedete è una vera banalità, quindi a voi il compito di creare le altre 3 classi&#8230; però non notate nulla? Guardando attentamente, accanto a Fiat500 c&#8217;è scritto &#8220;<strong>: MacchinaGenerica</strong>&#8220;. Questo è la modalità adottata da C# per indicare che Fiat500 in realtà estende (ovvero è una classe figlia) di MacchinaGenerica, cioè ogni istanza della classe Fiat500 è anche istanza di MacchinaGenerica (attenzione: ma non sempre è anche il contrario!). Come accadeva per object con gli interi infatti, accade che scrivendo:</p>
<pre class="brush: csharp; title: ; notranslate">
Fiat500 fiat500 = new Fiat500();
MacchinaGenerica vettura = fiat500;</pre>
<p>gli oggetti <strong>fiat500</strong> e <strong>vettura</strong> sono la stessa identica cosa.Nelle prossime lezioni parleremo di alcune proprietà che derivano direttamente da questo discorso, come ad esempio il <strong>polimorfismo</strong> per citarne una. Oggi vi lascio, buon lavoro!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.denisbilli.it/guide-csharp-oop-estendere-classi/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Introduzione alla OOP &#8211; Le Interfacce</title>
		<link>http://blog.denisbilli.it/guide-csharp-oop-interfacce/</link>
		<comments>http://blog.denisbilli.it/guide-csharp-oop-interfacce/#comments</comments>
		<pubDate>Sun, 30 Dec 2007 00:16:01 +0000</pubDate>
		<dc:creator>Denis</dc:creator>
				<category><![CDATA[Linguaggi .Net]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[interfacce]]></category>
		<category><![CDATA[interfaccia]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.denisbilli.it/2007/12/30/introduzione-alla-oop-parte-2-interfacce/</guid>
		<description><![CDATA[Continua il mio articolo sulla programmazione orientata agli oggetti. Ieri ho posto un problema e ho spiegato in sintesi cosa è l&#8217;ereditarietà. Oggi voglio cercare di chiarire qual&#8217;è il concetto di interfaccia ed introdurre il concetto di estensione di una &#8230; <a href="http://blog.denisbilli.it/guide-csharp-oop-interfacce/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img src="http://www.compagnia3stelle.it/billo/blog/help.jpg" alt="help" /></p>
<p>Continua il mio articolo sulla programmazione orientata agli oggetti. <a href="http://blog.denisbilli.it/2007/12/29/introduzione-alla-oop-parte-1-ereditarieta/trackback/" class="broken_link">Ieri ho posto un problema</a> e ho spiegato in sintesi cosa è l&#8217;ereditarietà. Oggi voglio cercare di chiarire qual&#8217;è il concetto di interfaccia ed introdurre il concetto di estensione di una classe che chiarirò poi nei prossimi articoli.</p>
<p><span id="more-65"></span></p>
<p>Vi ho lasciato cercando di introdurre il concetto di interfaccia. Ciò che voglio arrivare a spiegare è questo: supponiamo di avere una <strong>vettura generica</strong> che avrà per forza la funzionalità di:</p>
<ol>
<li><em>accelerare</em></li>
<li><em>frenare</em></li>
<li><em>curvare a destra</em></li>
<li><em>curvare a sinistra</em></li>
</ol>
<p>Ogni vettura esistente al mondo è anche una vettura generica. E&#8217; logico affermare che <span style="text-decoration: underline;">una Ferrari è diversa da una Cinquecento</span>, ma è vero anche che <span style="text-decoration: underline;">entrambe sono in grado di compiere (far compiere all&#8217;autista) queste 4 azioni</span>, altrimenti non sarebbero autovetture (un treno ad esempio, che può solo accelerare in avanti o indietro e frenare, non è un autovettura per chiarirci). Ciò che quindi a noi interessa e che implicitamente facciamo quando andiamo a scuola guida, è imparare a districarci con questi comandi, indipendentemente dal modello di automobile che stiamo guidando. <span style="text-decoration: underline;">Impariamo cioè a governare un&#8217;interfaccia</span> (volante, cambio, freno, acceleratore ecc.) <span style="text-decoration: underline;">a noi <strong>familiare in</strong></span><strong><span style="text-decoration: underline;"> qualsiasi occasione</span></strong><span style="text-decoration: underline;"><strong>, </strong><strong>qualsiasi vettura ci venga data sotto mano</strong></span>.</p>
<p>Questo concetto è estremamente importante, perchè in questo modo noi generalizziamo il concetto di autovettura e ne astraiamo soltanto le proprietà comuni a tutte le macchine: che la porsche di James Bond abbia i retro-razzi è solo una condizione particolare della sua automobile, non vuol dire che tutte le auto abbiano i retro-razzi (magari!) <img src="http://blog.denisbilli.it/wp-includes/images/emoticons/smile.gif" class="wp-smiley" alt="smile emoticon" /></p>
<p>Ecco quindi che abbiamo dato un significato alla parola interfaccia, che possiamo definire come <em>astrazione concettuale di una o più entità contenente metodi e proprietà comuni ad esse e che vogliono essere mostrati alle altre entità esterne</em>.</p>
<p>Nel nostro caso particolare, volendo disegnare un diagramma potremmo definire qualcosa tipo questo:</p>
<p style="text-align: center"><img src="http://www.compagnia3stelle.it/billo/blog/oop_macchine.jpg" alt="ereditarietà macchine" width="350" height="363" /></p>
<p>Come si può vedere, in alto a sinistra ho posizionato l&#8217;interfaccia <strong>IMacchina</strong> che generalizza il concetto di macchina. Ho poi creato la classe <strong>MacchinaGenerica </strong>che altro non è che un oggetto di tipo IMacchina (si può vedere dal fatto che implementa l&#8217;interfaccia tramite il pallino sopra alla classe) e poi la gerarchia dei vari tipi di vetture definite dal problema, 4 in tutto: <strong>Fiat500</strong>, <strong>SeatLeon</strong>, <strong>FerrariF399 </strong>e <strong>PorscheBoxter</strong>, che estendono la classe MacchinaGenerica.</p>
<p>Vediamo qui sotto il codice di creazione dell&#8217;interfaccia IMacchina:</p>
<pre class="brush: csharp; title: ; notranslate">
interface IMacchina
{
void Accelera();
void Frena();
void CurvaDestra();
void CurvaSinistra();
String GetNome();
}</pre>
<p>Per il concetto di estensione di una classe, vi rimando al prossimo articolo. Per quanto riguarda invece l&#8217;implementazione di una interfaccia, la questione è abbastanza semplice. In pratica essendo che l&#8217;interfaccia è soltanto una bozza, qualcosa che noi mostriamo al mondo (vedi sopra) ma che in realtà non esiste, una classe che implenta una interfaccia deve contenere lo sviluppo codificato dei metodi abbozzati. In pratica è necessario dare un senso ai metodi e alle proprietà dell&#8217;interfaccia, tant&#8217;è che l&#8217;editor di C#, Visual Studio, dal momento che una classe implementa una interfaccia obbliga a definire tutti i metodi che vengono dichiarati.Qui sotto vi mostro il primo abbozzo della classe MacchinaGenerica:</p>
<pre class="brush: csharp; title: ; notranslate">
public class MacchinaGenerica : IMacchina
{
#region IMacchina Members

public void Accelera()
{
//qui la macchina accelera
}

public void Frena()
{
//qui la macchina frena
}

public void CurvaDestra()
{
//qui curva a destra
}

public void CurvaSinistra()
{
//qui curva a sinistra
}

public string GetNome()
{
//qui dovremo ritornare il nome della macchina
}

#endregion
}</pre>
<p>Nel prossimo articolo vedremo di dare più senso e responsabilità a questa classe, definendo inoltre il concetto di <strong>estensione di una classe</strong>. A presto!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.denisbilli.it/guide-csharp-oop-interfacce/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Introduzione alla OOP &#8211; Ereditarietà</title>
		<link>http://blog.denisbilli.it/guide-csharp-oop-ereditarieta/</link>
		<comments>http://blog.denisbilli.it/guide-csharp-oop-ereditarieta/#comments</comments>
		<pubDate>Sat, 29 Dec 2007 07:00:02 +0000</pubDate>
		<dc:creator>Denis</dc:creator>
				<category><![CDATA[Linguaggi .Net]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[classi]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[ereditarietà]]></category>
		<category><![CDATA[esempio]]></category>
		<category><![CDATA[interfacce]]></category>
		<category><![CDATA[introduzione]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.denisbilli.it/2007/12/29/introduzione-alla-oop-parte-1-ereditarieta/</guid>
		<description><![CDATA[Mi è capitata su un forum una domanda alquanto bizzarra, ma assolutamente non scontata e banale per chi non si intende di programmazione. La domanda in questione era: a cosa servono le interfacce? Effettivamente, vista da chi ha qualche anno &#8230; <a href="http://blog.denisbilli.it/guide-csharp-oop-ereditarieta/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img src="http://www.compagnia3stelle.it/billo/blog/help.jpg" alt="help" height="263" width="350" /></p>
<p>Mi è capitata su un forum una domanda alquanto bizzarra, ma assolutamente non scontata e banale per chi non si intende di programmazione. La domanda in questione era: <strong>a cosa servono le interfacce</strong>? Effettivamente, vista da chi ha qualche anno di programmazione sul groppone potrebbe sembrare una domanda stravagante, ma pensandoci meglio, è una domanda lecita che a ripensarci, me la sono posta anch&#8217;io ai tempi. In questo articolo, con qualche semplice regola, voglio illustrare cosa sono e come funzionano i principi base della programmazione Object Oriented, quindi l&#8217;uso di interfacce, classi, classi astratte e loro proprietà come l&#8217;ereditarietà o il polimorfismo, con qualche esempio in C#.</p>
<p><span id="more-64"></span></p>
<p>Innanzitutto la cosa principale che ogni buon programmatore deve chiedersi appena inizia a pensare ad un programma è: quale linguaggio di programmazione uso? Come dice il mio professore di <em>Linguaggi e modelli computazionali</em>,  non bisogna fossilizzarsi su di un linguaggio. Molto spesso, basterebbe utilizzare linguaggi più semplici o diversi per risolvere lo stesso problema in minor tempo. Faccio un esempio che può essere d&#8217;aiuto: se vi viene chiesto di realizzare un sistema di controllo per le grammatiche, che linguaggio scegliereste? C, Java, C#, VB6, Cobol, Fortrand? La risposta è che esiste un linguaggio all&#8217;infuori di tutti questi che permette di semplificare la vita in questo campo&#8230; il <strong>Prolog</strong>. Con qualche semplice istruzione avreste il vostro sistema di controllo grammaticale, senza impazzire più di tanto. Provate a fare la stessa cosa in C e molto probabilmente impazzireste! Ma non dilunghiamoci troppo, questa era solo una premessa! Detto questo, analizziamo il problema e cerchiamo di trovare un linguaggio adatto. Il problema è questo:</p>
<p><em>Si deve realizzare un sistema in grado di operare su diverse autovetture. Si supponga che l&#8217;utente, una volta scelta una qualsiasi autovettura tra quelle disponibili, possa accelerare, frenare e curvare a destra e sinistra. Le vetture disponibili sono:</em></p>
<ol>
<li><em>Fiat Cinquecento, acceleratore di tipo 1</em></li>
<li><em>Seat Leon, acceleratore di tipo 2</em></li>
<li><em>Porsche Boxter, acceleratore di tipo 3 </em></li>
<li><em>Ferrari F399, acceleratore di tipo 4<br />
</em></li>
</ol>
<p><em>Ogni acceleratore incrementa una variabile di un valore direttamente proporzionale al tipo (ad esempio l&#8217;acceleratore di tipo 4 incrementa di 4 volte, l&#8217;acceleratore di tipo 1 incrementa di 1 volta sola). Il freno decrementa la stessa variabile di 1 ogni volta che viene premuto. Destra e sinistra impostano semplicemente una variabile che indica lo stato di curvatura dell&#8217;autovettura (ad esempio sinistra decrementa di 1, destra incrementa di 1).</em></p>
<p><em>Il sistema deve inoltre poter prevedere l&#8217;immissione di un&#8217;autovettura personalizzata dell&#8217;utente, con acceleratore a sua discrezione (tra i 4 disponibili).</em></p>
<p>Bene! Il problema è bene impostato. Io personalmente porterei la mia scelta su 2 linguaggi fra quelli proposti sopra: C# e Java. Perchè proprio questi? Perchè sono ad oggetti e sono orientati agli oggetti, C# e Java in particolare. Potrebbe andar bene anche VB6, con qualche ritocco.</p>
<p>Adesso da bravi programmatori, cerchiamo di progettare il sistema in modo che quanto descritto sopra possa essere scritto sotto forma di codice ben impostato.  Personalmente, la prima cosa che mi balza all&#8217;occhio è la forte ereditarietà del sistema. Cosa intendiamo con <strong>ereditarietà</strong>? Beh è molto semplice. Se io, oggetto, ho in comune delle cose, come delle funzioni o delle proprietà, con un altro oggetto, ma sono più specializzato di lui, allora io sono una sorta di suo figlio, ho cioè una sorta di parentela con lui. <u>Ecco che nasce il concetto di ereditarietà</u>. Prendiamo come esempio le figure geometriche (escluso il cerchio): una figura generica probabilmente avrà come proprietà un numero finito di lati. Un quadrilatero sarà una particolare figura geometrica con 4 lati. Un triangolo una particolare figura geometrica con 3 lati e così via.</p>
<p style="text-align: center"><img src="http://www.compagnia3stelle.it/billo/blog/oop_figure.jpg" alt="oop figure" height="200" width="350" /></p>
<p>Nel nostro particolare problema, possiamo vedere che esiste una relazione tra le varie vetture&#8230; la prima è che tutte hanno un acceleratore, un freno e possono curvare a destra a sinistra e poi hanno tutte un nome che volendo è possibile visualizzare a video. Ecco che perciò potremmo creare una interfaccia, un oggetto che semplicemente mostra agli altri delle proprietà di diversi oggetti.</p>
<p style="text-align: center"><img src="http://www.compagnia3stelle.it/billo/blog/oop_imacchina.jpg" alt="imacchina" height="210" width="205" /></p>
<p>L&#8217;interfaccia IMacchina mostra al mondo alcuni metodi, che sono comuni a tutte le macchine: Accelera, Frena, CurvaADestra e Sinistra e una proprietà che ci restituisce il nome dell&#8217;autovettura. Per capire meglio a cosa servono le interfacce, attendete il prossimo articolo&#8230; per ora c&#8217;è già abbastanza carne al fuoco!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.denisbilli.it/guide-csharp-oop-ereditarieta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

