TP1 - Prise en main de la POO
- Se créer un dossier
Terminale NSIsur votre ordinateur ou clé USB. - Dans ce dossier, créer un dossier
POO(Programmation Orientée Objet). - Créer un nouveau fichier Python nommé
TP1_Base.py.
Ce premier TP a pour objectif de mettre en pratique les notions vues dans le cours sur la programmation orientée objet.
Nous allons progressivement apprendre à :
- créer une classe ;
- définir ses attributs ;
- créer des objets ;
- utiliser
self; - écrire des méthodes ;
- modifier l'état d'un objet ;
- faire interagir plusieurs objets ;
- utiliser des listes contenant des objets ;
- utiliser quelques méthodes spéciales de Python.
Les personnages
On souhaite créer une classe permettant de représenter un personnage dans un jeu vidéo.
Chaque personnage possède :
- un nom ;
- un âge ;
- un nombre de points de vie.
Identifier les caractéristiques
Exercices
- 1
Relever dans le texte les informations qui caractérisent un personnage.
- 2
Écrire l'entête de la classe
Personnage.
Le constructeur
Exercices
- 4Écrire le constructeur de la classe
Personnage.
Le constructeur doit permettre de créer un personnage en précisant :
- son nom ;
- son âge ;
- ses points de vie.
Créer des objets
Exercices
- 5
Créer les deux personnages suivants :
Alice, 17 ans, 100 points de vie ;Bob, 18 ans, 80 points de vie.
- 6
Afficher le nom d'Alice.
- 7
Afficher les points de vie de Bob.
- 8
Afficher l'âge d'Alice.
Modifier les attributs
Les attributs d'un objet peuvent être consultés et modifiés après sa création.
Exercices
- 10
Modifier l'âge d'Alice afin qu'elle ait maintenant 18 ans.
- 11
Afficher son âge pour vérifier la modification.
- 12
Modifier les points de vie de Bob afin qu'il possède maintenant 50 points de vie.
- 13
Afficher les points de vie des deux personnages.
Chaque objet possède ses propres attributs.
Ainsi, modifier l'âge d'Alice ne modifie pas celui de Bob.
alice et bob sont deux objets différents, même s'ils appartiennent à la même classe.
Une première méthode
Un personnage doit maintenant pouvoir se présenter.
Exercices
- 14Écrire une méthode
sePresenter(self)qui affiche une phrase de la forme :
Je m'appelle Alice et j'ai 18 ans.
- 15
Tester cette méthode avec Alice puis avec Bob.
- 16
Dans la méthode
sePresenter, que représenteself? - 17
Lorsque l'on écrit :
alice.sePresenter()quel objet est représenté par
self?
Une méthode qui modifie l'objet
On souhaite maintenant qu'un personnage puisse vieillir.
Exercices
- 18
Écrire une méthode
vieillir(self)qui augmente l'âge du personnage de 1. - 19
Faire vieillir Alice une fois.
- 20
Afficher son âge.
- 21
Faire vieillir Alice deux nouvelles fois, et afficher de nouveau son âge.
Les robots
On souhaite maintenant créer un petit jeu dans lequel deux robots peuvent s'affronter.
Un robot possède :
- un nom ;
- un nombre de points d'énergie ;
- une puissance d'attaque.
Créer la classe
Exercices
- 1
Relever les informations qui caractérisent un robot.
- 2
Écrire une classe
Robot. - 3
Écrire son constructeur afin qu'un robot soit créé à partir de son nom, de son énergie et de sa puissance d'attaque.
- 4
Créer les robots suivants :
Atlas : 100 points d'énergie, 15 points d'attaque
Bolt : 80 points d'énergie, 20 points d'attaque - 5
Afficher les caractéristiques d'Atlas et de Bolt.
Recevoir une attaque
Lorsqu'un robot reçoit une attaque, son énergie diminue.
Exercices
- 6
Écrire une méthode :
recevoirAttaque(self, degats)Cette méthode doit diminuer l'énergie du robot du nombre de dégâts indiqué.
- 7
Faire subir 10 dégâts à Atlas.
- 8
Afficher son énergie après l'attaque.
- 9
Faire subir 20 dégâts supplémentaires à Atlas.
- 10
Afficher à nouveau son énergie.
Faire interagir deux objets
On souhaite maintenant qu'un robot puisse attaquer un autre robot.
Exercices
- 11
Écrire une méthode :
attaquer(self, robot)Cette méthode doit faire perdre au robot reçu en paramètre autant d'énergie que la puissance d'attaque du robot qui attaque.
ExempleSi Atlas possède une puissance d'attaque de 15 :
atlas.attaquer(bolt)doit faire perdre 15 points d'énergie à Bolt.
La méthode
attaquerdoit donc utiliser la puissance d'attaque d'Atlas et agir sur l'objetbolt. - 12
Tester un combat entre Atlas et Bolt.
- 13
Faire attaquer Bolt deux fois.
- 14
Afficher l'énergie restante des deux robots.
- 15
Dans l'instruction :
atlas.attaquer(bolt)quel objet représente
self?Quel objet est reçu dans le paramètre
robot? - 16
Quelle méthode de la classe
Robotpeut être appelée à l'intérieur deattaquerpour faire perdre de l'énergie à l'adversaire ?
Un robot peut-il encore combattre ?
Un robot qui n'a plus d'énergie ne peut plus combattre.
Exercices
- 17
Écrire une méthode :
estOperationnel(self)Cette méthode doit renvoyer :
Truesi le robot possède encore des points d'énergie ;Falsesinon.
- 18
Tester cette méthode avec Atlas et Bolt.
- 19
Modifier la méthode
recevoirAttaqueafin que l'énergie d'un robot ne puisse jamais devenir négative. - 20
Tester votre programme avec une attaque suffisamment puissante pour mettre un robot à 0 point d'énergie.
Les compétences
Nos robots peuvent maintenant combattre. On souhaite leur donner plusieurs compétences.
Un robot possède désormais une liste de compétences.
Par exemple :
atlas = Robot("Atlas", 100, 15, ["Laser", "Bouclier", "Missile"])
Ajouter une liste comme attribut
Exercices
- 1
Modifier le constructeur de
Robotafin qu'un robot possède une liste de compétences. - 2
Adapter la création d'Atlas et de Bolt pour leur donner plusieurs compétences.
- 3
Afficher la liste des compétences d'Atlas.
- 4
Afficher uniquement la première compétence d'Atlas.
- 5
Afficher la dernière compétence d'Atlas.
Ajouter une compétence
On souhaite pouvoir ajouter une nouvelle compétence à un robot.
Exercices
- 6
Écrire une méthode :
ajouterCompetence(self, competence)Cette méthode doit ajouter la compétence reçue en paramètre à la liste des compétences du robot.
- 7
Ajouter la compétence
"Canon"à Atlas. - 8
Afficher la liste de ses compétences.
- 9
Ajouter une autre compétence à Atlas.
- 10
Dans la méthode, faire en sorte qu'on ne puisse pas ajouter plusieurs fois la même compétence.
3. Compter les compétences
Exercices
- 11
Écrire une méthode :
nombreCompetences(self)qui renvoie le nombre de compétences du robot.
- 12
Tester cette méthode avec Atlas et Bolt.
- 13
Pourquoi est-il intéressant de créer une méthode
nombreCompetencesplutôt que d'utiliser directementlen(atlas.competences)partout dans le programme ?
Les équipes de robots
On souhaite maintenant pouvoir regrouper plusieurs robots dans une même équipe.
Une équipe possède :
- un nom ;
- une liste de robots.
Une nouvelle classe
Exercices
- 1
Écrire une classe
Equipe. - 2
Son constructeur doit permettre de créer une équipe à partir de son nom et d'une liste de robots.
- 3
Créer une équipe appelée
"Les Pythonistes"contenant Atlas et Bolt. - 4
Afficher le nom de l'équipe.
- 5
Afficher la liste des robots de l'équipe.
Ajouter un robot
Exercices
- 6
Créer un troisième robot appelé
Nova. - 7
Écrire une méthode :
ajouterRobot(self, robot)qui ajoute un robot à la liste des robots de l'équipe.
- 8
Ajouter Nova à l'équipe.
- 9
Afficher la liste des robots de l'équipe.
Afficher les informations de l'équipe
On souhaite afficher les informations de chaque robot appartenant à l'équipe.
Exercices
- 10
Écrire une méthode :
afficherEquipe(self)qui affiche le nom de l'équipe puis, pour chaque robot, son nom et son énergie.
ExempleOn pourrait obtenir :
Équipe Les Pythonistes
- Atlas : 75 énergie
- Bolt : 40 énergie
- Nova : 100 énergie - 11
Écrire une méthode :
nombreRobots(self)qui renvoie le nombre de robots présents dans l'équipe.
- 12
Tester cette méthode.
Faire combattre les robots d'une équipe
Exercices
- 13
Faire attaquer Atlas contre Bolt.
- 14
Afficher ensuite les informations de l'équipe.
- 15
Que remarquez-vous concernant l'objet
boltprésent dans la liste de l'équipe ?
equipe contient une référence vers les objets atlas, bolt et nova.
Modifier bolt modifie donc également le robot que l'on retrouve dans la liste de l'équipe.
Un même objet peut être utilisé à plusieurs endroits dans un programme.
Les méthodes spéciales
Python possède des méthodes particulières dont le nom commence et se termine par deux caractères _.
Nous allons en découvrir deux.
1. Afficher un objet avec __str__
Pour le moment, si l'on écrit :
print(atlas)
Python n'affiche pas directement les informations intéressantes du robot.
Exercices
- 1
Écrire une méthode spéciale
__str__dans la classeRobot.Elle devra permettre d'obtenir un affichage de la forme :
Atlas : 75 énergie, attaque 15 - 2
Tester avec :
print(atlas) - 3
Modifier
afficherEquipeafin d'utiliser directement :print(robot)plutôt que d'afficher séparément le nom et l'énergie.
Comparer deux objets avec __eq__
On souhaite maintenant pouvoir comparer deux robots.
Deux robots seront considérés comme égaux s'ils possèdent le même nom.
La fonction spéciale __eq__ surcharge l'opérateur ==, permettant la comparaison de 2 objets.
Exercices
- 4
Écrire la méthode spéciale
__eq__. - 5
Créer deux robots portant le même nom.
- 6
Tester leur égalité avec l'opérateur
==. - 7
Créer deux robots portant des noms différents et tester leur égalité.
- 8
Modifier une caractéristique d'un robot. Est-il toujours considéré comme égal à l'autre ?
Bilan
Au cours de ce TP, vous avez utilisé plusieurs notions fondamentales de la programmation orientée objet.
Une classe
Une classe décrit le modèle d'un objet :
class Robot:
...
Un objet
Un objet est une instance d'une classe :
atlas = Robot(...)
Les attributs
Les attributs représentent l'état de l'objet :
self.nom
self.energie
self.attaque
Les méthodes
Les méthodes représentent les actions que peut réaliser un objet :
atlas.attaquer(bolt)
self
self désigne l'objet sur lequel la méthode est appelée.
Dans :
atlas.attaquer(bolt)
self représente atlas.
Les objets en paramètres
Une méthode peut recevoir un autre objet en paramètre :
def attaquer(self, robot):
...
Les objets peuvent contenir d'autres objets
Une équipe peut contenir une liste de robots :
equipe = Equipe("Les Pythonistes", [atlas, bolt])
Les méthodes spéciales
Certaines méthodes permettent de modifier le comportement de Python avec nos objets :
__str__
__eq__