Encapsulation et visibilité
Protéger les données de vos objets
La sécurité des données
Ch4. Programmation Orienté Objets (POO)
Encapsulation et visibilité
L'encapsulation est un principe fondamental de l'orientation objet en Python.
Il protège vos classes contre les modifications ou suppressions accidentelles et
favorise la réutilisation et la maintenabilité du code.
Niveaux de visibilité en Python
Public Protégé Privé
[Link] = nom self._nom = nom self.__nom = nom
Syntaxe: Sans préfixe Syntaxe: Un underscore _ Syntaxe: Deux underscores __
Accessible de partout. Convention: « ne pas toucher »
Difficile d'accès depuis l'extérieur.
Convention: utiliser directement. Accessible mais déconseillé.
Pourquoi Encapsuler ?
Protection des Données Validation
Empêcher les modifications Contrôler les valeurs avant
accidentelles ou malveillantes modification (ex: âge > 0)
03.04.26 140
Ch4. Programmation Orienté Objets (POO)
Encapsulation et visibilité
Niveaux de visibilité en Python
Public
Protégé
Privé
03.04.26 141
Ch4. Programmation Orienté Objets (POO)
Encapsulation et visibilité
Getters, Setters et @property
Getters & Setters est un concept très important dans l'orienté Objets :
▪ Getter : méthode qui renvoie la valeur d’un attribut privé.
▪ Setter : méthode qui modifie la valeur d’un attribut privé.
Le principe consiste à ne pas exposer directement les données mais des
méthodes publiques
03.04.26 142
Ch4. Programmation Orienté Objets (POO)
Encapsulation et visibilité
Getters, Setters et @property
Approche Traditionnelle
Accès aux attributs
Validation et Modification
Pour les autres langages de programmation
POO cette façon d’utilisation est parfait, mais
pour python c’est « Verbeux », pas
Pythonique
03.04.26 143
Ch4. Programmation Orienté Objets (POO)
Encapsulation et visibilité
Getters, Setters et @property
Approche Pythonique
On utilise le décorateur @property + setter
associé au lieu des méthodes get() et set()
Syntaxe @property
@property
Définit le getter.
Permet d'accéder comme un attribut.
@[Link]
Définit le setter.
Permet de modifier avec validation.
03.04.26 144
Ch4. Programmation Orienté Objets (POO)
Encapsulation et visibilité
Getters, Setters et @property
▪ Python ne bloque pas réellement l’accès aux attributs privés, mais le rend plus difficile.
▪ L’encapsulation est surtout une convention en Python, pas une contrainte stricte.
▪ On utilise souvent des getters et setters (ou @property) pour contrôler l’accès aux données
▪ Les vrais getters/setters sont rares sauf si validation / logique nécessaire.
03.04.26 145
Ch4. Programmation Orienté Objets (POO)
Encapsulation et visibilité
Exercice : Classe Sécurisée
Solution Complete
Créer une classe Compte avec encapsulation complète:
▪ Attributs privés : __titulaire, __solde
▪ Getter pour titulaire (lecture seule)
▪ Getter/Setter pour solde avec validation
▪ Méthodes: deposer(), retirer() avec verifications
Contraines
▪ Solde initial ≥ 0
▪ Retrait impossible si solde insuffisant
▪ Dépôt > 0 uniquement
03.04.26 146
Héritage
Réutiliser et étendre le code avec l'héritage
La réutilisation
du code
Ch4. Programmation Orienté Objets (POO)
Héritage
Principe de l’héritage
Définition
L'héritage permet à une classe d'acquérir les attributs et méthodes d'une autre classe.
Cela favorise la réutilisabilité du code.
Personne
Relation « est-un »
+ nom
+ age
Un étudiant est une Personne.
+ sePresenter()
Un Chien est un Animal.
➔ La classe enfant hérite du comportement parent.
Syntaxe: Étudiant
+ universite
+ etudier()
➔ Et on dit class Enfant (ex. Etudiant) hérite de la classe Parent (ex. Personne)
03.04.26 148
Ch4. Programmation Orienté Objets (POO)
Héritage
Principe de l’héritage
Classe Parent (Base)
Personne
+ nom
+ age
+ sePresenter()
Classe Enfant (Dérivée)
Étudiant
+ universite
+ etudier()
03.04.26 149
Ch4. Programmation Orienté Objets (POO)
Héritage
Principe de l’héritage
Exemple
03.04.26 150
Ch4. Programmation Orienté Objets (POO)
Héritage
Principe de l’héritage
Exemple
03.04.26 151
Ch4. Programmation Orienté Objets (POO)
Héritage
Principe de l’héritage
Exemple
03.04.26 152
Ch4. Programmation Orienté Objets (POO)
Héritage
super() et redéfinition des méthodes
La Fonction super()
Appeler une méthode de la classe parent. Essentiel dans
le constructeur __init__ pour initialiser les attributs hérités.
✓ Évite la duplication de code
✓ Fonctionne avec l'héritage multiple
✓ Plus maintenable
Syntaxe:
03.04.26 153
Ch4. Programmation Orienté Objets (POO)
Héritage
super() et redéfinition des méthodes
Redéfinition des méthodes (Override)
Deux approches: Redéfinition complète (remplace) ou extension (super() + ajout).
03.04.26 154
Ch4. Programmation Orienté Objets (POO)
Héritage
Exercice : Hiérarchie de Véhicules
Solution Complète
Créer le code Python équivalent à
l’hiérarchie de classes suivante :
Vehicule
+ marque
+ modele
+ annee
+ demarrer()
Voiture Moto
+ nombrePortes + cylindree
+ klaxonner() + cabrer()
▪ Utiliser super() dans les constructeurs
▪ Redéfinir demarrer() dans chaque classe
enfant
▪ Ajouter des méthodes spécifiques
03.04.26 155