Classi

Il mondo reale è pieno di oggetti che possiamoclassificare.  Ad esempio, un bambino molto piccoloprobabilmente dice "bau bau" quando vede un cane,incurante della razza; noi naturalmente vediamo il mondo intermini di queste categorie.

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

Generalmente, per creare un oggetto in ruby o in qualsiasialtro linguaggio OO, bisogna prima definire lecaratteristiche della classe, e quindi creare unainstanza.  Per illustrare il processo, lasciatemi primadefinire una semplice classe Cane.

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

In ruby, la definizione di una classe è una regione dicodice tra le parole chiave class eend.  La parola chiave defall'interno di questa regione inizia la definizione di unmetodo della classe, che come abbiamo detto nelcapitolo precedente, corrisponde a qualche specificocomportemento 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 classeCane, e l'abbiamo chiamatafido.  Il metodo new di ogniclasse crea una nuova istanza.  Poichéfido è un Cane in accordoalla 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 possiamochiedere a fido di fare.

ruby> fido.abbaiaBau Bau   nil

 

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

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

 

Non ha più senso che cercare di mangiare ilconcetto di sandwich.

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

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

 

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



Ti potrebbe interessare anche

commenta la notizia