L'héritage

Voir la vidéo
Description Sommaire

Nous avons vu dans le chapitre précédent comment créer des classes pour définir des nouveaux concepts au sein de notre application. Mais parfois, certains de nos concepts vont partager beaucoup de méthode et redéfinir toutes les méthodes à chaque fois ne serait pas efficace. On peut alors utiliser le principe d'héritage. Ce principe permet de créer une classe qui va hériter d'une classe parente. Elle récupèrera alors toutes les méthodes de la classe parente.

Syntaxe

Pour créer une classe qui hérite d'une autre en Ruby il suffit d'utiliser le symbole <suivi du nom de la classe à hériter

class Eleve

    def ma_method

    end

end

class Delegue < Eleve

    def ma_method2

    end

end

La classe Delegue hérite de la classe Eleve et possèdera donc une méthode d'instance ma_method qui sera hérité, et une méthode ma_methode2.

Réécrire une méthode

Une classe enfant peut réécrire une méthode de la classe parente afin d'en modifier son comportement

class Eleve

    def moyenne
        # ...
    end

end

class Delegue < Eleve

    def moyenne
        18
    end

end

La méthode d'instance moyenne est ici modifié et renverra 18 quoi qu'il arrive. Si on définit une méthode de même nom dans une classe enfant, on écrase celle définie par le parent

Modifier une méthode

Si on reprend notre exemple précédent, que se passe-t-il si je souhaite réécrire la méthode tout en appellant la méthode parente ? Par exemple, ajouter 1 à la moyenne de l'élève

class Eleve

    def moyenne
        # ...
    end

end

class Delegue < Eleve

    def moyenne
        moyenne = super
        moyenne + 1
    end

end

super permet d'appeller la méthode parente depuis un enfant. Si vous ne précisez aucun argument, alors la méthode parente sera appellée avec les mêmes arguments.

L'héritage dans le core

Si on analyse le fonctionnement du core de Ruby on remarque que la class d'un entier est `Fixnum``

1.class # Fixnum

Si on regarde la documentation on remarque que cette classe hérite de Integer qui lui même hérite de Numeric.

1.class.superclass # Integer
1.class.superclass.superclass # Numeric

Un entier Fixnumdispose donc de toutes les méthodes de la classe Fixnum et des méthodes parentes. Ainsi, dans de nombreux cas, les objets de base de Ruby utilisent déjà ce système d'héritage et il est important de le comprendre afin d'être capable de trouver les méthodes qu'il est possible d'utiliser.

La class Object

Il est important de noter que toutes les classes que l'on va créer dans Ruby hériteront de la classe Object. C'est cette classe qui contient des méthodes telles que puts, printou autre. Cet héritage se fait de manière implicite et il n'est pas nécessaire de le préciser quand on crée une nouvelle classe.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager