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.

Guide de l’utilisateur

Précédent : GDU : Classes Suivant : GDU : Redéfinition des méthodes