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
Chiedi alla nostra Redazione!