La Programmation Orientée Objet : POO
Numérique et sciences informatiques
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.
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 :
- 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
- Complétez la classe "Personnage" en ajoutant une méthode lire_points_magie(self) qui affiche les points de magie du personnage.
- Utilisez la méthode lire_points_magie() pour afficher les points de magie de Ron.
- 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.
- Utilisez la méthode statique verifier_maison() pour vérifier si les maisons "Gryffondor" et "Slytherin" sont valides.
Entraînement 2 :
- Créer la classe Voiture avec 3 paramètres : annee, couleur et vitesse_max.
Voir une solutionRemarques
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