Héritage
Notre classification des objets dans la vie quotidienne est naturellement hiérarchique. Nous savons que tous les chats sont des mammifères et que tous les mammifères sont des animaux. Les classes plus étroites héritent des caractéristiques des classes plus larges auxquelles elles appartiennent. Si les mammifères respirent, alors les chats respirent.
Nous pouvons exprimer ce concept en ruby :
ruby> class Mammifere
| def respire
| print "respire et expire\n"
| end
| end
nil
ruby> class Chat<Mammifere
| def parle
| print "Miaou\n"
| end
| end
nil
Bien que nous n’ayons pas précisé qu’un chat doive respirer, tout chat héritera ce comportement de la classe Mammifere puisque Chat a été défini comme une sous-classe de Mammifere (en terminologie objet, la classe la plus étroite est une sous-classe, et la classe la plus large une super-classe). En conséquence, du point de vue du programmeur, les chats obtiennent la capacité à respirer gratuitement, et après qu’on leur aie donné une méthode parle, ils respirent et parlent pour le même prix.
ruby> tama = Chat.new
#
ruby> tama.respire
inhale et exhale
nil
ruby> tama.parle
Miaou
nil
Il y aura des situations où certaines propriétés de la super-classe ne devraient pas être héritées par une sous-classe particulière. Quoique les oiseaux sachent généralement voler, les pingouins sont une sous-classe d’oiseaux ne volant pas.
ruby> class Oiseau
| def toilette
| print "Je nettoie mes plumes."
| end
| def vole
| print "Je vole."
| end
| end
nil
ruby> class Pigouin<Oiseau
| def vole
| fail "Désolé, je préfère nager."
| end
| end
nil
Plutôt que définir exhaustivement toutes les caractéristiques de chaque nouvelle classe, on n’a besoin que d’ajouter ou redéfinir les différences entre chaque sous-classe et sa super-classe. Cette utilisation de l’héritage est appelée quelquefois programmation par différence, ou différentielle. C’est un des bénéfices de la programmation orientée objet.
Précédent : GDU : Classes Suivant : GDU : Redéfinition des méthodes

