Ruby Language Refactoring des classes existantes pour utiliser l'héritage


Exemple

Disons que nous avons deux classes, Cat et Dog .

class Cat
  def eat
    die unless has_food?
    self.food_amount -= 1
    self.hungry = false
  end
  def sound
    puts "Meow"
  end
end

class Dog
  def eat
    die unless has_food?
    self.food_amount -= 1
    self.hungry = false
  end
  def sound
    puts "Woof"
  end
end

La méthode de eat est exactement la même dans ces deux classes. Bien que cela fonctionne, il est difficile à maintenir. Le problème s'aggravera s'il y a plus d'animaux avec la même méthode de eat . L'héritage peut résoudre ce problème.

class Animal
  def eat
    die unless has_food?
    self.food_amount -= 1
    self.hungry = false
  end
  # No sound method
end

class Cat < Animal
  def sound
    puts "Meow"
  end
end

class Dog < Animal
  def sound
    puts "Woof"
  end
end

Nous avons créé une nouvelle classe, Animal , et avons déplacé notre méthode de eat à cette classe. Nous avons ensuite fait en sorte que Cat and Dog hérite de cette nouvelle superclasse commune. Cela supprime le besoin de répéter le code