Classi, Oggetti e Istanze

Ho notato spesso confusione quando si parla di Classi, Oggetti ed Istanze. Chi non è particolarmente istruito sulla programmazione ad oggetti spesso confonde il vero significato di questi termini. Sapevo, tuttavia, che esistono due scuole di pensiero riguardo alla definizione di Classe e Oggetto. A me piace la “scuola” che indica la Classe come definizione di un possibile Oggetto e, quindi, l’Oggetto come Istanza della Classe.

Sembra banale, tuttavia mi è capitato – discorrendo con altri – di trovarmi in “conflitto” (per così dire) e poi cadere in equivoci, quando si usano questi termini, partendo casomai dal presupposto che “l’altro” li intenda esattamente come noi.

Io la vedo in questo modo; una Classe è una definizione! Viene appunto definita una classe di possibili oggetti. La Classe è l’insieme di metodi e proprietà (se volete possiamo aggiungere anche gli eventi – che altro non solo che speciali metodi…) che possiederà l’oggetto.

Ad esempio quando scriviamo in Actionscript, o qualsiasi altro linguaggio ad oggetti:

1
2
3
4
class MiaClasse {
    function MiaClass() {}
    function MioMetodo() {}
}

Abbiamo definito una Classe e non un Oggetto. Al limite abbiamo “definito” un “possibile” oggetto. Potremmo addirittura sostenere, e non a torto, che l’Oggetto esiste a runtime mentre la Classe no (in verità esistono Classi dinamiche che possono essere definite – e poi usate per creare oggetti – anche a runtime). Escludo le classi statiche, ovviamente che – alla fine – altro non sono che sotto-istanze (o istanze nascoste) e quindi oggetti veri e propri.

Quando invece abbiamo:

1
var mioOggetto:MiaClasse = new MiaClasse();

Ecco che mioOggetto è una istanza di MiaClasse()! Cioè mioOggetto è un Oggetto – appunto – di tipo MiaClasse().

Ne deriva, proprio nella filosofia ad oggetti, che di Oggetti di tipo MiaClasse() ne posso avere quanti ne voglio, cosa che non può essere – per la definizione stessa – di MiaClasse(). Ad esempio, se vale ed ha senso la relazione:

1
2
3
4
5
var mioOggetto_1:MiaClasse = new MiaClasse();
var mioOggetto_2:MiaClasse = new MiaClasse();
var mioOggetto_3:MiaClasse = new MiaClasse();
...
var mioOggetto_n:MiaClasse = new MiaClasse();

Non ha significato:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MiaClasse {
    function MiaClass() {}
    function MioMetodo_2() {}
}

class MiaClasse {
    function MiaClass() {}
    function MioMetodo_2() {}
}

class MiaClasse {
    function MiaClass() {}
    function MioMetodo_3() {}
}

Istanza e Oggetto, quindi, coincidono e sono usate alternativamente per lo stesso significato in diversi contesti.

Probabilmente non frega molto a nessuno… questione di esigenze di completezza… :)

2 commenti a: “Classi, Oggetti e Istanze”

  1. 03 set, 2008 Actionscript 3.0 for beginners: lesson #2 | Undolog.com:

    [...] Per chi è proprio all’asciutto di programmazione ad oggetti, consiglio quantomeno la lettura di Classi, Oggetti e Istanze! [...]

  2. 11 nov, 2008 Actionscript 3.0 for beginners: lesson #4 | Undolog.com:

    [...] le variabili o costanti statiche sono associate alla classe e non all’istanza della classe! Vedi Classi, Oggetti e Istanze. Questa è una differenza importantissima, infatti nel nostro caso se scriviamo – a titolo di [...]

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
					<code></code> // blocco generico
					[cc_actionscript][/cc_actionscript] // Actionscript
					[cc_actionscript3][/cc_actionscript3] // Actionscript 3
					[cc_css][/cc_css] // CSS Style Sheet
					[cc_html][/cc_html] // HTML
					[cc_js][/cc_js] // Javascript
					[cc_objc][/cc_objc] // Objective-C
					[cc_php][/cc_objc] // PHP
					[cc_sql][/cc_sql] // SQL


Stop SOPA