Aller au contenu principal

TP1 - Prise en main de la POO

Au préalable
  1. Se créer un dossier Terminale NSI sur votre ordinateur ou clé USB.
  2. Dans ce dossier, créer un dossier POO (Programmation Orientée Objet).
  3. Créer un nouveau fichier Python nommé TP1_Base.py.
Objectif du TP

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

ExercicesTout déplier
  1. 1

    Relever dans le texte les informations qui caractérisent un personnage.

  2. 2

    Écrire l'entête de la classe Personnage.

Le constructeur

ExercicesTout déplier
  1. 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

ExercicesTout déplier
  1. 5

    Créer les deux personnages suivants :

    • Alice, 17 ans, 100 points de vie ;
    • Bob, 18 ans, 80 points de vie.
  2. 6

    Afficher le nom d'Alice.

  3. 7

    Afficher les points de vie de Bob.

  4. 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.

ExercicesTout déplier
  1. 10

    Modifier l'âge d'Alice afin qu'elle ait maintenant 18 ans.

  2. 11

    Afficher son âge pour vérifier la modification.

  3. 12

    Modifier les points de vie de Bob afin qu'il possède maintenant 50 points de vie.

  4. 13

    Afficher les points de vie des deux personnages.

À retenir

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.

ExercicesTout déplier
  1. 14
    Écrire une méthode sePresenter(self) qui affiche une phrase de la forme :
Je m'appelle Alice et j'ai 18 ans.
  1. 15

    Tester cette méthode avec Alice puis avec Bob.

  2. 16

    Dans la méthode sePresenter, que représente self ?

  3. 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.

ExercicesTout déplier
  1. 18

    Écrire une méthode vieillir(self) qui augmente l'âge du personnage de 1.

  2. 19

    Faire vieillir Alice une fois.

  3. 20

    Afficher son âge.

  4. 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

ExercicesTout déplier
  1. 1

    Relever les informations qui caractérisent un robot.

  2. 2

    Écrire une classe Robot.

  3. 3

    Écrire son constructeur afin qu'un robot soit créé à partir de son nom, de son énergie et de sa puissance d'attaque.

  4. 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. 5

    Afficher les caractéristiques d'Atlas et de Bolt.

Recevoir une attaque

Lorsqu'un robot reçoit une attaque, son énergie diminue.

ExercicesTout déplier
  1. 6

    Écrire une méthode :

    recevoirAttaque(self, degats)

    Cette méthode doit diminuer l'énergie du robot du nombre de dégâts indiqué.

  2. 7

    Faire subir 10 dégâts à Atlas.

  3. 8

    Afficher son énergie après l'attaque.

  4. 9

    Faire subir 20 dégâts supplémentaires à Atlas.

  5. 10

    Afficher à nouveau son énergie.

Faire interagir deux objets

On souhaite maintenant qu'un robot puisse attaquer un autre robot.

ExercicesTout déplier
  1. 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.

    Exemple

    Si Atlas possède une puissance d'attaque de 15 :

    atlas.attaquer(bolt)

    doit faire perdre 15 points d'énergie à Bolt.

    La méthode attaquer doit donc utiliser la puissance d'attaque d'Atlas et agir sur l'objet bolt.

  2. 12

    Tester un combat entre Atlas et Bolt.

  3. 13

    Faire attaquer Bolt deux fois.

  4. 14

    Afficher l'énergie restante des deux robots.

  5. 15

    Dans l'instruction :

    atlas.attaquer(bolt)

    quel objet représente self ?

    Quel objet est reçu dans le paramètre robot ?

  6. 16

    Quelle méthode de la classe Robot peut être appelée à l'intérieur de attaquer pour 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.

ExercicesTout déplier
  1. 17

    Écrire une méthode :

    estOperationnel(self)

    Cette méthode doit renvoyer :

    • True si le robot possède encore des points d'énergie ;
    • False sinon.
  2. 18

    Tester cette méthode avec Atlas et Bolt.

  3. 19

    Modifier la méthode recevoirAttaque afin que l'énergie d'un robot ne puisse jamais devenir négative.

  4. 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

ExercicesTout déplier
  1. 1

    Modifier le constructeur de Robot afin qu'un robot possède une liste de compétences.

  2. 2

    Adapter la création d'Atlas et de Bolt pour leur donner plusieurs compétences.

  3. 3

    Afficher la liste des compétences d'Atlas.

  4. 4

    Afficher uniquement la première compétence d'Atlas.

  5. 5

    Afficher la dernière compétence d'Atlas.

Ajouter une compétence

On souhaite pouvoir ajouter une nouvelle compétence à un robot.

ExercicesTout déplier
  1. 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.

  2. 7

    Ajouter la compétence "Canon" à Atlas.

  3. 8

    Afficher la liste de ses compétences.

  4. 9

    Ajouter une autre compétence à Atlas.

  5. 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

ExercicesTout déplier
  1. 11

    Écrire une méthode :

    nombreCompetences(self)

    qui renvoie le nombre de compétences du robot.

  2. 12

    Tester cette méthode avec Atlas et Bolt.

  3. 13

    Pourquoi est-il intéressant de créer une méthode nombreCompetences plutôt que d'utiliser directement len(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

ExercicesTout déplier
  1. 1

    Écrire une classe Equipe.

  2. 2

    Son constructeur doit permettre de créer une équipe à partir de son nom et d'une liste de robots.

  3. 3

    Créer une équipe appelée "Les Pythonistes" contenant Atlas et Bolt.

  4. 4

    Afficher le nom de l'équipe.

  5. 5

    Afficher la liste des robots de l'équipe.

Ajouter un robot

ExercicesTout déplier
  1. 6

    Créer un troisième robot appelé Nova.

  2. 7

    Écrire une méthode :

    ajouterRobot(self, robot)

    qui ajoute un robot à la liste des robots de l'équipe.

  3. 8

    Ajouter Nova à l'équipe.

  4. 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.

ExercicesTout déplier
  1. 10

    Écrire une méthode :

    afficherEquipe(self)

    qui affiche le nom de l'équipe puis, pour chaque robot, son nom et son énergie.

    Exemple

    On pourrait obtenir :

    Équipe Les Pythonistes
    - Atlas : 75 énergie
    - Bolt : 40 énergie
    - Nova : 100 énergie
  2. 11

    Écrire une méthode :

    nombreRobots(self)

    qui renvoie le nombre de robots présents dans l'équipe.

  3. 12

    Tester cette méthode.

Faire combattre les robots d'une équipe

ExercicesTout déplier
  1. 13

    Faire attaquer Atlas contre Bolt.

  2. 14

    Afficher ensuite les informations de l'équipe.

  3. 15

    Que remarquez-vous concernant l'objet bolt présent dans la liste de l'équipe ?

À retenir

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.

ExercicesTout déplier
  1. 1

    Écrire une méthode spéciale __str__ dans la classe Robot.

    Elle devra permettre d'obtenir un affichage de la forme :

    Atlas : 75 énergie, attaque 15
  2. 2

    Tester avec :

    print(atlas)
  3. 3

    Modifier afficherEquipe afin 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.

ExercicesTout déplier
  1. 4

    Écrire la méthode spéciale __eq__.

  2. 5

    Créer deux robots portant le même nom.

  3. 6

    Tester leur égalité avec l'opérateur ==.

  4. 7

    Créer deux robots portant des noms différents et tester leur égalité.

  5. 8

    Modifier une caractéristique d'un robot. Est-il toujours considéré comme égal à l'autre ?

Bilan

À retenir

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__