All guides
Intermediate-AdvancedSelf-pacedFree GuideSection 6/33

Héritage et modules Ruby

Learn to build and check a web application with development tools and AI assistants. Practise design, coding and validation.

The full lessons for this course are currently available in French. Use the section menu to navigate the French course.

💡

Free content, available without an account. Tools and models change: use the current model guide to check their versions. Models and sources

Section 13.2.1 : Héritage et modules Ruby

🎯 Objectif pédagogique

Comprendre l'héritage de classes et les modules Mixin en Ruby pour structurer du code réutilisable et bien organisé. Ces concepts sont fondamentaux pour comprendre Ruby on Rails.


L'héritage : spécialiser des classes

L'héritage permet de créer une classe enfant qui hérite de toutes les propriétés et méthodes d'une classe parent, tout en ajoutant ses spécificités. En Ruby, chaque classe ne peut hériter que d'une seule classe parent (héritage simple).

class Animal
  attr_reader :nom, :age

  def initialize(nom, age)
    @nom = nom
    @age = age
  end

  def parler
    '...'
  end

  def presenter
    "Je suis #{@nom}, j'ai #{@age} ans"
  end
end

class Chien < Animal
  def parler
    'Woof!'
  end

  def fetch(objet)
    "#{@nom} rapporte #{objet}"
  end
end

class Chat < Animal
  def parler
    'Miaou!'
  end

  def ronronner
    "#{@nom} ronronne..."
  end
end

rex = Chien.new('Rex', 3)
puts rex.presenter    # Hérité du parent
puts rex.parler       # Surchargé
puts rex.fetch('balle')  # Spécifique au Chien

Le mot-clé super

super appelle la méthode du même nom dans la classe parent :

class Vehicule
  attr_reader :marque, :modele

  def initialize(marque, modele)
    @marque = marque
    @modele = modele
    @kilometrage = 0
  end

  def info
    "#{@marque} #{@modele} - #{@kilometrage} km"
  end
end

class VehiculeElectrique < Vehicule
  def initialize(marque, modele, autonomie)
    super(marque, modele)
    @autonomie = autonomie
    @batterie = 100
  end

  def info
    "#{super} | Batterie: #{@batterie}% | Autonomie: #{@autonomie} km"
  end
end

tesla = VehiculeElectrique.new('Tesla', 'Model 3', 560)
puts tesla.info

Les modules : Mixins pour la réutilisation

Ruby n'a pas d'héritage multiple, mais les modules (Mixins) permettent de partager du comportement entre classes non liées.

module Affichable
  def afficher
    puts to_s
  end
end

module Validable
  def valide?
    erreurs.empty?
  end

  def erreurs
    []
  end
end

class Produit
  include Affichable
  include Validable

  attr_accessor :nom, :prix

  def initialize(nom, prix)
    @nom = nom
    @prix = prix
  end

  def to_s
    "#{@nom} - #{@prix} EUR"
  end

  def erreurs
    errs = []
    errs << 'Nom requis' if @nom.nil? || @nom.empty?
    errs << 'Prix positif requis' if @prix.nil? || @prix <= 0
    errs
  end
end

p = Produit.new('MacBook Pro', 2399)
p.afficher    # De Affichable
p.valide?     # De Validable

Comparable et Enumerable

class Etudiant
  include Comparable

  attr_accessor :nom, :moyenne

  def initialize(nom, moyenne)
    @nom = nom
    @moyenne = moyenne
  end

  def <=>(other)
    @moyenne <=> other.moyenne
  end
end

etudiants = [
  Etudiant.new('Alice', 16.5),
  Etudiant.new('Bob', 14.2),
  Etudiant.new('Charlie', 18.0)
]

etudiants.sort.map(&:nom)  # ['Bob', 'Alice', 'Charlie']
etudiants.max.nom           # 'Charlie'
Loading diagram…

Héritage vs Modules

CritèreHéritage (class)Module (include)
RelationEST-UN (is-a)PEUT-FAIRE (has-ability)
NombreUn seul parentPlusieurs modules
InstanciationCrée des objetsPas d objets
ExempleChien < Animalinclude Comparable
Usage RailsApplicationRecord < ActiveRecord::Baseinclude Validations

← Scroll horizontally →

Quick Check

Quelle est la différence entre include et extend en Ruby ?

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

Your progress

Progress is self-reported and stored in your browser. The final completion record is not a qualification or an independent assessment.

View progress and completion record

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

One practical AI workflow in your inbox

Methods, resources and new exercises. Free, unsubscribe at any time.