Classi

Il mondo reale è pieno di oggetti che possiamo classificare.  Ad esempio, un bambino molto piccolo probabilmente dice "bau bau" quando vede un cane, incurante della razza; noi naturalmente vediamo il mondo in termini di queste categorie.

Nella terminologia della programmazione OO, una categoria di oggetti come il "cane" è chiamata classe, ed alcuni specifici oggetti appartenenti ad una classe sono chiamati istanze di quella classe.

Generalmente, per creare un oggetto in ruby o in qualsiasi altro linguaggio OO, bisogna prima definire le caratteristiche della classe, e quindi creare una instanza.  Per illustrare il processo, lasciatemi prima definire una semplice classe Cane.

ruby> class Cane
    |   def abbaia
    |     print "Bau Bau"
    |   end
    | end
   nil

In ruby, la definizione di una classe è una regione di codice tra le parole chiave class e end.  La parola chiave def all'interno di questa regione inizia la definizione di un metodo della classe, che come abbiamo detto nel capitolo precedente, corrisponde a qualche specifico comportemento di un oggetto di quella classe.

Ora che abbiamo definito una classe Cane, possiamo usarla per fare un cane:

ruby> fido = Cane.new
   #<Cane:0xbcb90>

Abbiamo creato una nuova istanza della classe Cane, e l'abbiamo chiamata fido.  Il metodo new di ogni classe crea una nuova istanza.  Poiché fido è un Cane in accordo alla definizione della nostra classe, ha le proprietà che noi decidiamo debba avere un Cane.  Poiché la nostra idea di Cane è molto semplice, c'è solo una cosa che possiamo chiedere a fido di fare.

ruby> fido.abbaia
Bau Bau
   nil

 

Creare una nuova istanza di una classe è talvolta detto istanziare quella classe.  Dobbiamo avere un cane prima di avere il piacere della sua conversazione; non possiamo semplicemente chiedere alla classe Cane di abbaiare per noi.

ruby> Cane.abbaia
ERR: (eval):1: undefined method `abbaia' for Cane:class

 

Non ha più senso che cercare di mangiare il concetto di sandwich.

D'altra parte, se vogliamo ascoltare il suono di un cane senza avere legami affettivi, possiamo creare (istanziare) un cane effimero e temporaneo, e ottenere un piccolo rumore da esso prima che sparisca.

ruby> (Cane.new).abbaia   # o più comunemente, Cane.new.abbaia
Bau Bau
   nil

 

"Aspetta," starete dicendo, "cos'è questa storia di questo poveretto che scompare subito dopo?" E' vero: se non ci prendiamo il fastidio di dargli un nome (come abbiamo fatto per fido), l'automatic garbage collection di ruby decide che è un cane abbandonato, e spietatamente se ne disfà.  In realtà questo è giusto perché non possiamo avere tutti i cani che vogliamo.

Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Staff
Ti interessano altri articoli su questo argomento?
Chiedi alla nostra Redazione!