Ruby/Méthodes (suite)

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Méthodes (suite)
Icône de la faculté
Chapitre no 10
Leçon : Ruby
Chap. préc. :Classes et objets
Chap. suiv. :Autres variables
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Ruby : Méthodes (suite)
Ruby/Méthodes (suite)
 », n'a pu être restituée correctement ci-dessus.

À partir de maintenant, nous allons distinguer deux usages de méthodes :

  1. Ce que nous avons vu dans la première partie, à savoir déclarer une méthode en dehors de toute classe. On pourra l’utiliser partout dans le fichier. Elle ne sera pas liée à un type d'objets particuliers.
  2. Ce que nous allons voir à présent, les méthodes d'instance. Elles sont définies pour tous les objets du type de cette classe (utilisables par toutes les instances). Pour les utiliser nous devons les appliquer à un objet du bon type.

Méthode d'instance[modifier | modifier le wikicode]

Déclaration d'une méthode d'instance[modifier | modifier le wikicode]

Début de l'exemple
Fin de l'exemple


Nous avons ici une classe Ordinateur. Cette classe définit deux méthodes : boot et shutdown, disponibles pour les objets de type Ordinateur. Comme vous pouvez le voir, la seule nouveauté est qu’elles sont définies à l'intérieur d'une classe (entre les mots-clés class et end).

Appel d'une méthode d'instance[modifier | modifier le wikicode]

Tout d’abord, instancions un objet de type Ordinateur :

Début de l'exemple
Fin de l'exemple


Les méthodes définies plus haut s'appliquent à une instance d'objet. Nous devons donc, dans notre exemple, les invoquer sur l'instance laptop en suivant le modèle : instance.méthode.

Ce qui nous donne donc :

Début de l'exemple
Fin de l'exemple


Mise à part cette nouveauté, les anciennes possibilités demeurent : vous pouvez passer des paramètres et récupérer une valeur de retour (pour l’utiliser dans une autre expression par exemple).

L'héritage[modifier | modifier le wikicode]

L'orientation objet de Ruby permet de faire hériter certaines classes d'autres classes. C'est là qu'intervient la notion de sous-classe. Cet exemple simple montre comment définir une classe héritant d'une super-classe :

Début de l'exemple
Fin de l'exemple


Dans la définition de la classe Ordinateur, < Machine indique que cette classe est une sous-classe de la classe Machine.


On pourrait donc enrichir notre classe Ordinateur pour lui rajouter des méthodes par rapport à sa super-classe Machine. L'héritage permet de spécialiser différemment des classes ayant un même tronc commun.


La méthode initialize[modifier | modifier le wikicode]


Début de l'exemple
Fin de l'exemple



La méthode initialize est presque une méthode comme les autres, elle peut prendre des paramètres, mais elle ne renvoie pas de valeur (enfin, elle renvoie une référence à l’objet instancié mais ce n’est pas exploitable).


Donc écrire self.run (à l'intérieur de la classe) équivaut à écrire monOrdi.run (à l'extérieur de la classe).


Dans d'autres langages, il y a un équivalent à la méthode initialize, ce sont des constructeurs qui portent le même nom que la classe (en Java, par exemple).


Début de l'exemple
Fin de l'exemple


Ici, la classe Enfant ne dispose pas d'une méthode initialize, on inspecte sa super-classe Parent ; elle n'en possède pas non plus, on va regarder du côté de sa super-classe GrandParent ; on appelle la méthode initialize de la classe GrandParent.

Redéfinition de méthodes[modifier | modifier le wikicode]



Voici par exemple deux classes : Machine et Ordinateur, la seconde héritant de la première :

Début de l'exemple
Fin de l'exemple


En invoquant la méthode run sur l’objet de type Machine, nous obtenons l’affichage produit par la méthode de la super-classe Machine. La méthode redéfinie a été appelée lorsque nous avons invoqué run sur l’objet de type Ordinateur.

Appel de méthode de super-classe[modifier | modifier le wikicode]

Considérons deux classes Machine et Ordinateur (sous-classe de Machine) disposant toutes deux d'une méthode run :

Début de l'exemple
Fin de l'exemple



Ici, super appelle la méthode run de la classe Machine.

Il appelle la méthode de la super-classe avec exactement les mêmes paramètres que la méthode dans laquelle il se trouve (dans notre exemple, il n'y en a aucun). Nous pouvons aussi choisir de n'en passer que quelques-uns, ou bien aucun. Dans ce dernier cas, l'appel à super doit être suivi d'une paire de parenthèses vides :

Début de l'exemple
Fin de l'exemple


Conclusion[modifier | modifier le wikicode]

Dans la documentation, vous trouverez des méthodes désignées comme suit :

NomClasse#Méthode

Cela vous permet de savoir sur quel type d'objet vous pouvez invoquer la méthode.

Par exemple : Integer#upto vous informe qu’il existe une méthode upto applicable à des objets de type Integer (les entiers).