Ereditarietà

La nostra classificazione degli oggetti nella vita di tutti i giorni è naturalmente gerarchica.  Sappiamo che tutti i gatti sono mammiferi, e che tutti i mammiferi sono animali.  Le classi minori ereditano le caratteristiche dalle classi maggiori a cui appartengono.  Se i mammiferi respirano, allora respirano anche i gatti.

In ruby questo concetto si esprime così:

ruby> class Mammifero
    |   def respiro
    |     print "inspira ed espira"
    |   end
    | end
   nil
ruby> class Gatto<Mammifero
    |   def miagolak
    |     print "Miao"
    |   end
    | end
   nil

 

Sebbene non indichiamo come un Gatto debba respirare, ogni gatto erediterà questo comportamento dalla classe Mammifero poichè Gatto è definito come una sottoclasse di Mammifero.  (Nella terminologia OO, la classe minore è detta sottoclasse e la maggiore è detta superclasse.) Perciò dal punto di vista di un programmatore, i gatti hanno la capacità di respirare gratis; abbiamo aggiunto anche il metodomiagola, i nostri gatti possono sia respirare che miagolare.

ruby> tama = Gatto.new
   #<Gatto:0xbd80e8>
ruby> tama.respira
inspira ed espira
   nil
ruby> tama.miagola
Miao
   nil

 

Ci potrebbero essere delle situazioni in cui determinati comportamenti di una superclasse non devono essere ereditati da una particoalre sottoclasse.  Benché gli uccelli generalmente sanno volare, i pinguini sono una sottoclasse degli uccelli, e non hanno l'abilità di volare .

ruby> class Uccello
    |   def pulisci
    |     print "Sto pulendo le mie penne."
    |   end
    |   def vola
    |     print "Sto volando."
    |   end
    | end
   nil
ruby> class Pinguino<Uccello
    |   def vola
    |     fail "Spiacente. Preferisco nuotare."
    |   end
    | end
   nil

 

Anziché definire interamente ogni caratteristica di ogni nuova classe, possiamo aggiungere o ridefinire le caratteristiche differenti tra ogni sottoclasse e la sua superclasse.  Questo uso dell'ereditarietà è qualche volta chiamato differential programming. Questo è uno dei vantaggi della programmazione orientata agli oggetti.

Ti potrebbe interessare anche

commenta la notizia

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