Maintenant, créons un objet de la classe Greeter
et animons-le :
Une fois l’objet g
créé, il se souvient que le nom qui lui est lié est
Pat, comme indiqué à sa création. Il serait d’ailleurs intéressant de
pouvoir récupérer directement ce nom. Essayons :
Whoa, ça n’a pas l’air possible pour l’instant.
Dans la peau d’un objet
name
est, comme nous l’avons vu, une variable d’instance. « Instance »
est synonyme d’objet. Les variables d’instances sont donc cachées au
cœur des objets que nous pouvons créer à loisir, en utilisant un modèle
générique, la classe. Mais elles ne sont pas si bien cachées que ça.
Pour commencer, vous pouvez les voir si vous inspectez un objet (avec
la méthode inspect
), et il existe des moyens d’y accéder. Mais Ruby
fait en sorte de garder un peu d’ordre dans sa maison, et collant au
plus près de l’approche orientée objet, y compris dans la gestion des
données et variables qui les renferment.
Quelles sont les méthodes disponibles pour nos instances de la classe
Greeter
?
Ouch. Voilà une sacré liste de méthodes. Et pourtant, nous n’en avons
défini que deux… d’où sortent donc les autres ? En fait, il s’agit d’une
liste exhaustive des méthodes applicables aux objets de la classe
Greeter
, y compris celles définies dans les classes parentes de
Greeter
. Si nous voulons obtenir la listes des méthodes définies
uniquement pour Greeter
, il suffit de passer le paramètre false
:
Ok, c’est déjà plus confortable. Et conforme. Vérifions que c’est vrai,
en testant quelles méthodes reconnaissent effectivement les instances de
Greeter
:
Une instance de Greeter
connaît donc say_hi
et to_s
(une méthode
qui transforme « quelque chose » en une chaîne de caractère et qui est
disponible pour tout objet). Par contre, la méthode name
est inconnue.
Modifier les classes a posteriori
Mais nous n’en démordrons pas : il nous faut un moyen de récupérer le nom lié à un objet. Comment faire ? Ruby propose un moyen très simple pour accéder aux variables d’instances :
Il semblerait que nous ayons défini une seconde fois la classe
Greeter
… mais il n’en est rien. Nous l’avons simplement « ré-ouverte
» et modifiée. Et les changements ainsi définis sont immédiatement
disponibles dans tout objet nouvellement créé, ainsi que dans ceux déjà
existants ! Créons un nouvel objet et testons l’artifice :
Le fait d’écrire attr_accessor
a implicitement défini deux nouvelles
méthodes à peu de frais : name
pour récupérer la valeur de la
variable/objet name
, et name=
pour la définir et la modifier.
Accueillir tout et tout le monde !
Le problème avec notre programme actuel, c’est qu’il ne peut s’occuper que d’une seule personne à la fois. Il nous faut vraiment un… SuperProgramme, qui pourrait aussi bien s’occuper de tout le monde en une fois, que d’une seule personne ou de plusieurs personnes à la fois…
Comme notre programme commence à prendre de l’ampleur, arrêtons ici avec
IRB, et continuons dans un véritable éditeur de texte. Nous allons
enregistrer la suite dans un fichier. Pour quitter IRB, écrivez
simplement quit
, exit
ou appuyez sur [Ctrl]+[D].
Notre fichier va se présenter comme suit :
Sauvegardez ce fichier, par exemple en tant que “ri20min.rb” (l’extension .rb, pour ruby, est importante sous Windows, d’usage sous les autres OS), et éxécutez-le en tapant “ruby ri20min.rb” dans votre terminal. Vous devriez y lire ceci :
Hello World!
Goodbye World. Come back soon!
Hello Zeke!
Goodbye Zeke. Come back soon!
Hello Albert!
Hello Brenda!
Hello Charles!
Hello Dave!
Hello Engelbert!
Goodbye Albert, Brenda, Charles, Dave, Engelbert. Come
back soon!
...
...
Il y a un certain nombre de choses nouvelles dans ce fichier. Examinons-les en détails.