Classi, Oggetti e Istanze

Martedì 29 Gennaio, 2008

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:

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

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:

Actionscript:
  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:

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

Non ha significato:

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

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... :)

Post correlati

2 commenti a: “Classi, Oggetti e Istanze”

  1. getAvatar 1.0 Mercoledì 03 Settembre, 2008 alle 16:57
    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! [...]

  2. getAvatar 1.0 Martedì 11 Novembre, 2008 alle 07:02
    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 [...]

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>

Usa <pre> per racchiudere codice