Nous allons bientôt étudier un style de programmation moderne appelé Programmation Orientée-Objet [POO]. Python est un langage de POO, bien que vous n'auriez jamais pu le deviner avec ce que nous avons vu jusqu'ici. Avant de commencer à écrire des programmes orientés-objet, nous allons d'abord apprendre comment lire et comprendre la notation utilisée.
Fido est un chien. Pendant une journée typique, il fait diverses actions : il mange, court, dort, etc. Voici comment un programmeur de POO écrirait cela :
Fido = Chien()
Fido.mange()
Fido.court()
Fido.dort()
De plus, Fido a diverses qualités, ou attributs. Ce sont des variables, comme celles que nous avons vues auparavant, sauf qu'elles "appartiennent" à Fido. Il est grand (pour un chien) et ses poils sont noirs. Voici comment le programmeur pourrait écrire la même chose :
Fido.taille = "grand"
Fido.couleur_poils = "noir"
Dans le langage orienté-objet, nous avons ce qui suit :
Les objets peuvent aussi avoir d'autres objets qui leur appartiennent, chacun avec leurs propres méthodes ou attributs :
Fido.queue.remue()
Fido.queue.type = "touffue"
Fido.patte_avant_gauche.bouge()
Fido.tete.bouche.dents.canine.fait_mal()
Nous verrons comment cela fonctionne plus tard. Pour le moment, voyons comment Reeborg peut utiliser la notation "pointée".
Jusqu'ici, tous les programmes que nous avons écrits commandaient à Reeborg d'accomplir des tâches sans utiliser la notation de la Programmation Orienté-Objet (POO). Commençons avec un exemple simple.
D'abord, nous débutons avec un monde vide, en enlevant le robot s'il le faut grâce au bouton ajouter/supprimer un robot
Maintenant, vous vous rappelez peut-être que les initiales RUR dans RUR-PLE signifient : Robot Usé de Roberge (Roberge's Used Robot). Les robots que nous utilisons sont vieux et défectueux [Nous apprendrons à les réparer plus tard]. Aussi, nous allons créer notre première instance de la classe UsedRobot et la nommer, à propos, Reeborg ! Nous lui ordonnerons alors de faire un pas puis de s'éteindre.
Reeborg = UsedRobot()
Reeborg.move()
Reeborg.turn_off()
Essayez !
Les méthodes, tout comme les fonctions, peuvent avoir des paramètres. Commencez par un monde vide et essayez ce qui suit :
# ajouter robot au point d'origine [par défaut], mais avec une couleur plus intéressante
Larry = UsedRobot(colour='blue')
# deuxième robot, couleur par défaut (gris) face au Nord
Curly = UsedRobot(1, 3, 'N')
# troisième robot transportant des sonnettes
Moe = UsedRobot(1, 2, beepers=9, colour='yellow')
Larry.move()
Curly.move()
Moe.move()
Larry.move()
Curly.move()
Moe.move()
Curly.turn_left()
Larry.move()
Curly.move()
# L'extinction de n'importe quel robot termine le programme
Moe.turn_off()
Les robots se présentent dans une variété de couleurs : gris (par défaut), jaune, bleu, bleu clair, vert et violet [NdT : en anglais, respectivement, grey, yellow, blue, light blue, green et purple]. Ils peuvent être positionnés n'importe où dans le monde (avec plus d'un robot à la même intersection), face à n'importe laquelle des quatre directions ('E' [par défaut], 'N', 'S', 'W') ou transporter un certain nombre de sonnettes depuis le début. Notez qu'il y a deux paramètres nommés (beepers et colour) et trois non-nommés (rue, avenue et orientation). Les deux paramètres nommés doivent apparaître en dernier (leur ordre peut être interchangé si nous écrivons leur nom). Les paramètres non-nommés, s'ils apparaissent, doivent être dans le même ordre. Donc, si nous voulons spécifier une orientation (disons 'N'), nous devons d'abord spécifier une rue et une avenue pour que l'orientation soit le troisième paramètre.
Les déclarations suivantes sont permises :
R1 = UsedRobot(2) # créé à la 2e rue, 1re avenue, face à l'Est
R2 = UsedRobot(2, 3) # 2e rue, 3e avenue, face à l'Est
R3 = UsedRobot(3, 1, 'S') # 3e rue, 1re avenue, face au Sud
R4 = UsedRobot(5, colour='yellow') # 5e rue, 1re avenue, face à l'Est
Les déclarations suivantes ne sont pas permises :
R5 = UsedRobot(3, 'S') # l'orientation n'est pas le 3e paramètre
R6 = UsedRobot(colour='yellow', 5) # paramètre non-nommé mis après le nommé