Plus de classes

Une classe Personne

Créons maintenant une classe Personne. Une personne doit avoir un prénom, un nom de famille, une adresse e-mail, un numéro de téléphone, et une adresse physique (celle que nous venons d’implémenter à la section précédente):


class Personne
   attr_accessor :prenom, :nom, :email, :telephone, :adresse
   def initialize
       @prenom = @nom = @email = @telephone = "" 
       @adresse = Adresse.new
   end
end

La seule chose qui pourrait vous surprendre dans cet exemple, c’est la ligne @adresse = Adresse.new. La variable @adresse n’est pas une chaîne de caractères comme les autres variables, mais un objet issu de la classe Adresse.

Il est maintenant possible de créer une personne:


# Adresse:
adresse_de_nicolas             = Adresse.new
adresse_de_nicolas.rue         = "Rue du port, 32" 
adresse_de_nicolas.code_postal = "56000" 
adresse_de_nicolas.ville       = "Vannes" 

# Personne:
nicolas         = Personne.new
nicolas.prenom  = "Nicolas" 
nicolas.nom     = "Rocher" 
nicolas.email   = "nicolas.rocher@free.fr" 
nicolas.adresse = adresse_de_nicolas

Note : Notez que nous n’avons ni affecté de pays, ni de numéro de téléphone à Nicolas. Comme par défaut, toutes les valeurs sont vides (c’est à dire ””), nous pouvons créer des objets Adresse et Personne avec des informations incomplètes. Et nous pouvons toujours appeler nicolas.telephone sans aucun problème, Ruby nous renverra ”” en retour. Essayez dans IRB !

Et si nous ajoutions une méthode dans la classe Personne, qui nous renverrait le nom complet de la personne représentée? Très facile:


class Personne
   attr_accessor :prenom, :nom, :email, :telephone, :adresse
   def initialize
       @prenom = @nom = @email = @telephone = "" 
       @adresse = Adresse.new
   end
   def nom_complet
       @prenom + " " + @nom
   end
end

# ...

puts nicolas.nom_complet

Ce qui affichera “Nicolas Rocher”.

Afficher le contenu d’une classe

Ne serait-il pas magnifique si nous pouvions simplement taper puts adresse_de_nicolas? Ruby est capable d’exaucer ce rêve.

La fonction puts travaille de la façon suivante: elle essaye d’appeler la méthode to_s sur l’objet qu’on lui donne, et elle affiche le résultat sur l’écran. Vous vous souvenez de Integer#to_s et de ses amis?

La seule chose à faire, c’est de définir une méthode Adresse#to_s:


class Adresse
   attr_accessor :rue, :code_postal, :ville, :pays
   def initialize
       @rue = @code_postal = @ville = @pays = "" 
   end
   def to_s
       "    " + @rue + "\n" + \
       "    " + @code_postal + ", " + @ville + "\n" \
       "    " + @pays
   end
end

Note : Le caractère \n représente une nouvelle ligne. Il s’agit un fait du caractère que votre clavier envoie lorsque vous pressez la touche Enter.

Nous pouvons maintenant taper ceci :


adresse             = Adresse.new
adresse.rue         = "Rue du port, 32" 
adresse.code_postal = "56000" 
adresse.ville       = "Vannes" 
adresse.pays        =  "France" 

puts adresse

Ce qui affichera:

Rue du port, 32
56000, Vannes
France

Quelques exercices

  1. Ecrivez une méthode Personne#to_s, qui devra afficher le nom complet de la personne, son adresse e-mail, son numéro de téléphone, et son adresse physique.

Classes et méthodes 2 << | Apprenez Ruby | >> Implémentation du carnet d’adresses