À propos de l'héritage Ruby

Journal d'étude de programmation

11 juillet 2020 Progression du niv.175 RubyⅤ

Héritage

Vous pouvez créer une classe à partir de zéro, mais vous pouvez utiliser une classe existante et créer une nouvelle classe basée sur cette classe. Ce faisant, les parties communes peuvent être rassemblées et le code peut être écrit efficacement. La création d'une nouvelle classe basée sur une certaine classe s'appelle l'héritage. Vous pouvez définir une nouvelle classe en héritant d'une autre classe avec classe nouveau nom de classe <nom de classe d'origine. La nouvelle classe est appelée "classe enfant" et la classe d'origine est appelée "classe parent". La méthode d'instance de la classe parent est héritée.

food.rb


require "./menu"
class Food < Menu
end

Lorsqu'une instance d'une classe enfant hérite, la classe enfant hérite de la méthode d'instance de la classe parent.

index.rb


food1=Food.new
puts food1.name
puts food2.info

menu.rb


class Menu
  attr_accessor :name 
  #En traitement
  def info
    return "#{self.name} #{self.price}Cercle"
  end
end

Ajouter une variable d'instance

Utilisez ʻattr_accessor` comme précédemment pour ajouter des variables d'instance aux classes enfants.

menu.rb


class Menu
  attr_accessor :name 
  attr_accessor :price
end

Parce que la classe Food hérite de la classe Menu. Il a trois variables d'instance «nom, prix, calorie».

food.rb


class Food < Menu
  #Ajouter des calories à la classe alimentaire
  attr_accessor :calorie
end

Les méthodes d'instance peuvent être ajoutées de la même manière.

passer outre

Vous pouvez remplacer une méthode en définissant une méthode dans la classe enfant qui porte le même nom que la méthode parent. C'est ce qu'on appelle le remplacement.

index.rb(Appelez la méthode)


food1~Food.new(...)
food1.calorie=700
puts food1.info

menu.rb(Classe parent)


class Menu
  #En traitement
  def info
    #En traitement
  end
end

food.rb(Classe enfant)


class Food < Menu
  #En traitement
  #Méthode d'écrasement (la méthode d'écrasement est appelée)
  def info
    #En traitement
  end
end

L'instance de classe enfant appelle préférentiellement la méthode définie dans la classe enfant. Par conséquent, si la classe enfant et la classe parente ont des méthodes portant le même nom, le contenu de la méthode de la classe enfant sera écrasé. Vous pouvez également le remplacer avec la méthode initialize.

super Vous pouvez appeler une méthode avec le même nom dans la classe parente en définissant super dans la méthode remplacée. Puisque super appelle une méthode, il est nécessaire de passer un argument à super selon la méthode de la classe parente.

menu.rb


class Menu
  attr_accessor :name 
  attr_accessor :price
  def initialize(name:, price:)
    self.name=name
    self.price=price
  end
end

food.js


class Food < Menu
  attr_accessor :calorie
  def initialize(name:, price:, calorie:)
    super(name: name, price: price)
    self.calorie=calorie
  end
end
0711.png

Classe de date

Une classe qui gère les dates. La classe Date est déjà préparée par Ruby et peut être utilisée sans définir de classe en lisant date avec require. Les classes déjà préparées nécessitent une manière d'écrire différente de celle des autres </ font>

index.rb


# "/date"n'est pas!
reruire "date"

Instance de classe de date

Vous pouvez créer une instance avec Date.new. Vous pouvez créer une instance de la date du jour avec Date.today.

index.rb


require "date"
#Créez une méthode Date en passant "année / mois / jour" comme argument
date1=Date.new(2020,7,8)
puts date

console


2020-07-08

Méthode d'instance de classe Date

Il existe de nombreuses méthodes d'instance. C'est la méthode "dimanche?" Qui passe, que ce soit dimanche ou non, sous forme de valeur booléenne.

index.rb


require "date"
date1=date1.new(2020,7,11)
puts date1.sunday?

console


false

Méthode de classe

Une méthode à appeler pour une classe. Le lieu de «aujourd'hui» de «Date.today». Les méthodes de classe peuvent être définies en utilisant def class name.method name. Contrairement à la méthode d'instance, écrivez le nom de la classe avant le nom de la méthode. Appelez la méthode de classe avec nom de classe.nom de méthode.

menu.rb


class Menu
  #En traitement
  #Renvoie une valeur booléenne indiquant si la date du jour est dimanche
  def Menu.is_discount_day?  
    #Instance de date avec des informations pour la date du jour
    today=Date.today
    return today.sunday
  end
end
puts Menu.is_discount_day?

Appeler une méthode de classe dans une méthode d'instance

menu.rb


class Menu
  #En traitement
  def get_total_price  #Méthode d'instance
    if Menu.discount_day?  #Appel d'une méthode de classe
      #En traitement
    end
  end
end
0711-1.png

Recommended Posts

À propos de l'héritage Ruby
À propos de l'héritage
À propos de l'héritage de classe.
À propos de Ruby Hash
À propos des tableaux Ruby
À propos de Ruby Block
À propos de Ruby Hash
À propos de l'héritage Java
À propos de l'héritage orienté objet et du rendement Ruby
À propos des symboles Ruby
À propos des méthodes Ruby
À propos du module Ruby's Kernel
À propos des messages d'erreur Ruby
À propos de la gestion des exceptions Ruby
À propos de Ruby Hash (suite)
À propos des méthodes d'instance Ruby
À propos de l'héritage (Java Silver)
Héritage et délégation Ruby
À propos de l'encapsulation et de l'héritage
Réflexion sur la logique Ruby
Héritage
Écrire l'héritage de classe dans Ruby
Héritage
Explication sur l'objet Ruby Range
À propos des expressions régulières dans Ruby
À propos des hachages et symboles Ruby
Ruby à propos de divers processus itératifs
À propos =
À propos de Ruby, modèle objet
À propos des classes et des instances Ruby
Explication sur l'objet Ruby String
À propos du comportement de ruby Hash # ==
À propos des guillemets simples et doubles Ruby
À propos de l'opérateur de produit Ruby (&) et de l'opérateur somme (|)
[Super Introduction] À propos des symboles dans Ruby
Explique les objets Ruby Array
À propos de method.invoke
Ruby apprentissage 4
À propos de attr_accessor
[Ruby] Tableau
À propos de Hinemos
Ruby apprentissage 5
Bases de Ruby
À propos de Docker
Revue Ruby 2
Ajout de rubis
À propos des rails 6
À propos du printemps ③
Ruby apprentissage 3