Classi, Oggetti e Istanze
Martedì 29 Gennaio, 2008Ho 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:
-
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:
-
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:
-
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:
-
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...






















Actionscript 3.0 for beginners: lesson #2 | Undolog.com ha detto:
[...] Per chi è proprio all’asciutto di programmazione ad oggetti, consiglio quantomeno la lettura di Classi, Oggetti e Istanze! [...]
Actionscript 3.0 for beginners: lesson #4 | Undolog.com ha detto:
[...] 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 [...]