
Exemple : créer une classe `Cat` et deux instances de chats
Suivez notre exemple concret pour créer une classe `Cat` en Ruby et instancier deux objets distincts. Comprenez comment `initialize` et les variables d'instance fonctionnent ensemble.
Etape 1 : Préparer notre structure de fichiers
Mettons en pratique les concepts que nous venons de voir. Pour cet exemple, nous allons créer un petit projet. Même pour un cas simple, prendre l'habitude d'organiser son code est une excellente pratique professionnelle. Nous allons utiliser deux fichiers :
cat.rb: Ce fichier contiendra la définition de notre classe, le 'plan' de notre objet chat.main.rb: Ce sera notre fichier principal, celui que nous exécuterons. Il se chargera de créer et d'utiliser les instances de notre classeCat.
Cette séparation permet de garder le code propre : la définition de la classe est isolée de la logique qui l'utilise.
Etape 2 : Définir la classe `Cat` dans `cat.rb`
Ouvrons le fichier cat.rb et définissons notre classe. Nous allons créer un constructeur initialize qui accepte deux arguments : un nom et une couleur. Ces valeurs seront stockées dans des variables d'instance pour que chaque chat puisse avoir ses propres caractéristiques.
Le code ci-dessous est le 'plan' de notre chat. Il stipule que pour créer un chat, il faut obligatoirement fournir un nom et une couleur.
Etape 3 : Créer deux instances dans `main.rb`
Maintenant que notre plan est prêt, passons à la construction. Dans le fichier main.rb, nous devons d'abord indiquer à Ruby où trouver la définition de la classe Cat. Pour cela, on utilise require_relative, qui charge le contenu d'un autre fichier.
Ensuite, nous appelons Cat.new deux fois, en fournissant des arguments différents à chaque appel. Chaque appel exécute la méthode initialize de la classe et nous retourne un objet unique, que nous stockons dans des variables distinctes.
Etape 4 : Exécuter le code et analyser le résultat
Placez les deux fichiers dans le même dossier, ouvrez votre terminal, naviguez jusqu'à ce dossier et exécutez la commande suivante :
ruby main.rbVous devriez voir la sortie suivante :
--- Création de nos chats ---
Miaou ! Un chat nommé 'Félix' de couleur 'noir et blanc' vient d'être créé.
Miaou ! Un chat nommé 'Garfield' de couleur 'roux' vient d'être créé.
--- Nos chats ont été créés ---
#<Cat:0x0000025c8e8e7a00 @name="Félix", @color="noir et blanc">
#<Cat:0x0000025c8e8e7910 @name="Garfield", @color="roux">Analysons cette sortie. Les deux premières lignes confirment que notre méthode initialize a bien été appelée pour chaque instance. Les deux dernières lignes, générées par p, sont les plus importantes. Elles nous montrent deux objets Cat distincts (leurs adresses mémoire, comme 0x...a00 et 0x...910, sont différentes). Surtout, on voit que chaque objet possède son propre jeu de variables d'instance avec ses propres valeurs : Félix est bien 'noir et blanc' et Garfield est bien 'roux'. Nous avons réussi à créer deux instances uniques à partir d'un seul plan.