Aller au contenu

Programmation Ruby/Héritage

Un livre de Wikilivres.

L'héritage permet de créer une classe à partir d'une autre pour l'enrichir, ou la spécialiser. Une classe (classe dérivée, ou classe fille) hérite d'une autre classe (classe de base, ou classe mère).

On peut toujours utiliser les méthodes de la (des) classe(s) mère(s) dans une classe dérivée.

L'opérateur < précède le nom de la classe de base.

La classe Point vue précédemment :

class Point
  def initialize( x, y )
    @x = x
    @y = y
  end
  def coords
    puts "x : #{@x}"
    puts "y : #{@y}"
  end
end

peut être dérivée en une classe PointCouleur représentant un point coloré. Cette classe possède donc un attribut supplémentaire pour la couleur :

class PointCouleur < Point
  def initialize( x, y, couleur )
    super(x,y)        # appel au constructeur de la classe Point
    @couleur = couleur
  end
  def couleur
    puts "couleur : #{@couleur}"
  end
end

Lorsqu'on crée une instance de la classe dérivée, on bénéficie immédiatement des méthodes de celle-ci :

pc = PointCouleur.new(1,2,"rouge")
pc.couleur
#    => couleur : rouge

Et les méthodes de la classe de base étant héritées, on pourra la réutiliser dans la classe dérivée :

pc.coords
#    => x : 1
#       y : 2

Par contre, la classe de base ne possède pas les méthodes définies dans les classes dérivées.

  p1 = Point.new
  p1.couleur
     =>  NoMethodError: undefined method `couleur' for #<Point:0xb7c059b0 @x=0, @y=0>