Module 1Appréhender le paradigme de la POO
Chapitre 2 sur 10
Définir un objet
Comprendre ce qu'est un objet, une classe, un constructeur et un message entre objets.
- ≈ 120 min
- 4 leçons
- 2 vidéos
- 3 exercices
Module 1Appréhender le paradigme de la POO
Chapitre 2 sur 10
Comprendre ce qu'est un objet, une classe, un constructeur et un message entre objets.
Objectifs
Avec ce chapitre, tu sauras…
Ce chapitre pose le vocabulaire de toute la POO. Les exemples (la voiture, le feu de signalisation, l'avion) sont ceux du résumé officiel : retiens-les, ils reviennent dans les évaluations.
Leçon 1
La référence
La référence permet d'accéder à l'objet, mais n'est pas l'objet lui-même : elle contient l'adresse de l'emplacement mémoire où l'objet est stocké.
Référence P1 Mémoire des objets
┌──────────┐ ┌───────────────────┐
│ 0x304009 │ ────────────▶ │ 0x304009 : Objet │
└──────────┘ └───────────────────┘class Voiture:
def __init__(self, couleur, marque):
self.couleur = couleur
self.marque = marque
p1 = Voiture("rouge", "Peugeot")
p2 = Voiture("noir", "Citroën")
p1 = p2 # p1 désigne maintenant la Citroën
p2.couleur = "blanc"
print(p1.couleur) # blanc : p1 et p2 désignent le MÊME objet
print(p1 is p2) # TrueL'état et les attributs
Un objet sauvegarde un état dans des variables internes, les attributs.
| Objet (référent) | Adresse | Attributs = valeurs |
|---|---|---|
| Première_Voiture | 0x304009 | couleur = rouge, marque = Peugeot |
| Deuxième_Voiture | 0x304021 | couleur = noir, marque = Citroën |
| Premier_Arbre_Dans_La_Rue | 0x304100 | type = citronnier, hauteur = 2 |
Leçon 2
| Membre d'instance | Membre de classe | |
|---|---|---|
| attribut | chaque objet a sa propre copie : contenu_reservoir | partagé par tous les objets de la classe : nombre_avions |
| méthode | travaille sur un objet précis : atterrir() |
Leçon 3
Vidéo · À regarder
FRApprendre la Programmation Orientée Objets (POO) Python
MaxCode · YouTube
Leçon 4
1Un objet est composé de…
2La référence d'un objet contient…
3Une classe est…
4Le constructeur est appelé…
5Un attribut partagé par toutes les instances est un attribut…
6Les objets communiquent par…
L'essentiel du chapitre
instance.méthode().__init__) : initialise à la création ; destructeur : libère ; Python a un ramasse-miettes.compter_nombre_avions()| accès | une méthode d'instance peut utiliser les membres d'instance et de classe | une méthode de classe ne peut utiliser que les membres de classe |
Vidéo · À regarder
FRApprendre la Programmation Orientée Objets (POO) Python
MaxCode · YouTube
L'objet composite
Un objet peut contenir, parmi ses attributs, un autre objet : on parle d'objet composite, et l'objet contenu est un objet composant. Exemple : la Première_Voiture a un attribut moteur qui désigne l'objet Moteur1 (puissance = 100, marque = XX).
Le changement d'état et les méthodes
Le cycle de vie d'un objet est une succession de changements d'état. Le feu de signalisation passe par couleur = 1, 2, 3, puis revient à 1. La cause des changements d'état, ce sont les méthodes.
class FeuDeSignalisation:
def __init__(self):
self.couleur = 1 # 1 = vert, 2 = orange, 3 = rouge
def change(self):
self.couleur = self.couleur + 1
if self.couleur == 4:
self.couleur = 1
feu = FeuDeSignalisation()
feu.change()
print(feu.couleur) # 2CLASSE = Attributs + Méthodes. Une classe est un modèle de définition pour des objets qui ont la même structure (les mêmes attributs) et le même comportement (les mêmes méthodes). Chaque objet créé à partir d'une classe est une instance de cette classe ; créer un objet s'appelle l'instanciation.
Classe Avion Instances
┌─────────────────────────┐ instanciation avion_a380 : état = "En vol",
│ Attributs : état, │ ────────────────▶ contenu_reservoir = 40
│ contenu_reservoir │ avion_a320 : état = "Au sol",
│ Méthodes : atterrir() │ ────────────────▶ contenu_reservoir = 25
└─────────────────────────┘La classe est le moule, les objets sont les gâteaux. Avec un seul moule, on fait autant de gâteaux qu'on veut ; ils ont tous la même forme (les mêmes attributs), mais chacun a sa propre garniture (ses propres valeurs).
Appeler une méthode
La syntaxe générale est instance.méthode() : feu.change() applique la méthode change(), définie dans la classe FeuDeSignalisation, à l'objet feu.
Membres de classe et membres d'instance
Un membre est un attribut ou une méthode.
Le constructeur est une méthode spéciale appelée une seule fois par objet, au moment de sa création. Son rôle est d'initialiser les attributs de l'objet. Il peut avoir un nombre quelconque de paramètres, éventuellement aucun. En Python, c'est la méthode __init__.
La création d'un objet comporte deux phases : une phase du ressort de la classe (allouer la mémoire), puis une phase du ressort de l'objet (initialiser ses attributs). Dans les langages, ces deux phases sont réunies dans l'appel au constructeur.
Le destructeur est une méthode appelée lors de la destruction d'un objet qui n'est plus référencé. Il sert à libérer des ressources (fichiers, connexions), gérer des erreurs, assurer la fermeture de certaines parties du code.
Les langages qui utilisent un ramasse-miettes (garbage collector), comme Python ou Java, gèrent la mémoire automatiquement : ils recyclent la mémoire des objets qui ne sont plus référencés. Le programmeur n'a donc pas à détruire ses objets lui-même. Python propose malgré tout une méthode __del__, appelée quand l'objet est détruit, mais on l'utilise rarement : pour libérer une ressource, on préfère with (formation M102).
Les objets communiquent par envoi de messages : un objet (l'expéditeur) demande à un autre (le destinataire) d'exécuter une de ses méthodes. La communication entre objets est la base de la POO.
class Voiture:
def __init__(self):
self.vitesse = 0
def change_vitesse(self, nouvelle_vitesse):
self.vitesse = nouvelle_vitesse
class FeuDeSignalisation:
def __init__(self, voiture_devant):
self.couleur = 1
self.voiture_devant = voiture_devant # le feu connaît la voiture
def change(self):
self.couleur = self.couleur % 3 + 1
if self.couleur == 1: # vert
self.voiture_devant.change_vitesse(50) # envoi d'un message
elif self.couleur == 3: # rouge
self.voiture_devant.change_vitesse(0)
v = Voiture()
feu = FeuDeSignalisation(v)
feu.change(); feu.change(); feu.change() # orange, rouge, vert
print(v.vitesse) # 50Ici, le feu est l'expéditeur et la voiture le destinataire : le feu ne modifie pas directement l'attribut vitesse, il demande à la voiture d'exécuter sa méthode change_vitesse().
class Compteur:
total = 0
def __init__(self):
self.valeur = 0
Compteur.total += 1
def incrementer(self):
self.valeur += 1
a = Compteur()
b = Compteur()
a.incrementer()
a.incrementer()
b.incrementer()
c = a
c.incrementer()
print(a.valeur, b.valeur, c.valeur, Compteur.total)Pour l'objet « mon téléphone », donne : un référent, quatre attributs avec leur valeur, trois méthodes, et un objet composant possible.
Dessine la classe Stagiaire (attributs : nom, prénom, filière, notes ; méthodes : ajouter_note(), moyenne(), afficher()), un attribut de classe nombre_stagiaires, puis deux instances avec leurs valeurs.
class Avion:
nombre_avions = 0 # attribut de classe
def __init__(self, nom, etat, reservoir):
self.nom = nom # attributs d'instance
self.etat = etat
self.contenu_reservoir = reservoir
Avion.nombre_avions += 1
def atterrir(self): # méthode d'instance
self.etat = "Au sol"
@classmethod
def compter_nombre_avions(cls): # méthode de classe
return cls.nombre_avions
a380 = Avion("A380", "En vol", 40)
a320 = Avion("A320", "Au sol", 25)
print(Avion.compter_nombre_avions()) # 2Créer une classe en Python : la notion de modèle et d'instance, en français.
La méthode __init__, le constructeur des classes Python.