La Programmation Orientée Objet : POO

Numérique et sciences informatiques

donnees

Paradigme POO

La POO est un paradigme de programmation. Un paradigme de programmation pourrait se définir comme une philosophie dans la manière de programmer : une manière d'aborder le problème à résoudre.

Il consiste en la définition et l’interaction de briques logicielles appelées objets ; un objet représente un concept, une idée ou toute entité du monde physique. L’objet possède en interne une structure et un comportement, et il sait interagir avec ses pairs.

classe, objet, instance de classe

La programmation orientée objet permet de représenter des objets réels ou abstraits avec un code en général, plus stable et facile à maintenir que dans d’autres paradigmes.

La POO consiste en la création et l’utilisation d’objets, qui se composent d’attributs et de méthodes liés à des classes.

  • Les attributs renvoient aux variables contenues dans l’objet : ce sont les données. On y accède avec la syntaxe objet.attribut.
  • Les méthodes sont les éléments qui permettent d’interagir avec les attributs. Les méthodes sont des fonctions internes à une classe.On y accède avec la syntaxe objet.methode().
  • La classe est la structure de données définissant une catégorie générique d'objets. La classe est le modèle sur lequel est crée l'objet.
  • L'objet est une instance d’une classe, c’est-à-dire qu’il hérite des attributs et des méthodes génériques de sa classe. Il est un représentants de sa classe

En classe, La classe, de la classe !!

En tant que chef de projet chez Ubisoft, vous avez la responsabilité de développer le plus grand jeu de tous les temps basé sur l'univers Harry Potter.

L'une des premières étapes est de créer une classe "Personnage" qui permettra d'instancier des objets représentant les personnages du jeu.

POO
class Personnage : 
         # Par convention la première lettre d'un objet classe  est une majuscule
    def __init__(self, nom, maison, points_vie, points_magie):
        self.nom = nom
        self.maison = maison
        self.points_vie = points_vie
        self.points_magie = points_magie

    def lancer_sort(self):
        """ Implémentation de la méthode pour lancer un sort"""
        print(self.nom," lance un sort !")

    def recevoir_degats(self, degats):
        """ Implémentation de la méthode pour recevoir des dégâts"""
        self.points_vie -= degats
        print(f"{self.nom} reçoit {degats} dégâts.")

    def retablir_points_vie(self, soins):
        """Implémentation de la méthode pour rétablir les points de vie"""
        self.points_vie += soins
        print(f"{self.nom} récupère {soins} points de vie.")


# Exemple d'utilisation de la classe Personnage
harry = Personnage("Harry Potter", "Gryffondor", 100, 80)
hermione = Personnage("Hermione Granger", "Gryffondor", 90, 100)

harry.lancer_sort()
hermione.recevoir_degats(20)
harry.retablir_points_vie(30)

Ce programme définit la classe Personnage avec ses attributs et méthodes. Ensuite, il instancie deux objets harry et hermione en utilisant la classe Personnage. Vous pouvez exécuter ce programme pour observer les résultats des différentes méthodes appelées.


Entraînement 1 :

  1. Créez un objet ron de la classe Personnage avec les informations suivantes : Nom : Ron Weasley Maison : "Gryffondor" Points de vie : 80 Points de magie : 60
  2. Complétez la classe "Personnage" en ajoutant une méthode lire_points_magie(self) qui affiche les points de magie du personnage.
  3. Utilisez la méthode lire_points_magie() pour afficher les points de magie de Ron.
  4. Ajoutez une méthode à la classe Personnage appelée verifier_maison(maison) qui vérifie si la maison passée en argument est une maison valide dans l'univers Harry Potter. Les maisons valides sont "Gryffondor", "Serpentard", "Poufsouffle" et "Serdaigle". La méthode doit renvoyer True si la maison est valide et False sinon.
  5. Utilisez la méthode statique verifier_maison() pour vérifier si les maisons "Gryffondor" et "Slytherin" sont valides.

Entraînement 2 :

  1. Créer la classe Voiture avec 3 paramètres : annee, couleur et vitesse_max.
    Voir une solution

  2. Ajouter une méthode permettant de repeindre la voiture.
  3. Ajouter une méthode permettant de donner l'age de la voiture

Entraînement 3 :

  1. Écrire une classe Domino() pour représenter une pièce de domino.
    Le constructeur de cette classe initialisera les valeurs des points présents sur le domino comme deux entiers (val_1 et val_2) compris entre 0 et 6 (inclus) par exemple (2,4)
  2. Ajouter une méthode affiche_points() qui affiche les valeurs du domino
  3. Ajouter une méthode total() qui retourne la somme des deux valeurs.

Remarques

Un objet est constitué d’attributs qui caractérisent son état. Ces attributs ne pourront être modifiés ou lus uniquement en utilisant les méthodes de l’objet. C’est l’encapsulation. L'encapsulation permet de cacher ou protéger certaines données des objets.

Un attribut ou une méthode peut être :

  • public : c'est-à-dire accessible à tout utilisateur,
  • privé : c'est-à-dire accessible "seulement" dans le code de la classe. Un attribut ou une méthode privée s'obtient avec deux soulignements __ en suivant cette syntaxe : __nom_attribut ou __nom_methode()

Un accesseur est une méthode de la classe qui retourne la valeur d’un attribut d'un objet. Il est défini dans la classe, par convention, en suivant cette syntaxe : def get_attribut(self):.

Un mutateur est une méthode de la classe qui modifie la valeur d’un attribut d'un objet. Il est défini dans la classe, par convention, en suivant cette syntaxe : def set_attribut(self,nouvelle_valeur):.


Savoir faire

  • Savoir écrire la définition d’une classe.
  • Savoir accéder aux attributs et méthodes d’une classe.

Fiche de cours