0 XP
?
Intermédiaire45 min30 XP

Objectifs de cette leçon

  • Protéger les attributs d'une classe
  • Utiliser les propriétés getter et setter
  • Comprendre l'encapsulation et le masquage

Encapsulation : le coffre-fort des données 🔒

L'encapsulation est le principe qui dit : les données d'un objet sont privées, on y accède uniquement via ses méthodes. Comme un coffre-fort : tu ne vois pas le mécanisme, tu utilises juste la molette et la clé.


1. Pourquoi cacher les données ? 🤔

Imagine une console de jeux :

Sans encapsulation : tu devrais brancher des fils directement sur les circuits pour faire sauter Mario. Avec encapsulation : tu appuies simplement sur un bouton. La console s'occupe du reste !

C'est pareil en programmation :


2. Getter et Setter : les portiers 🚪

Exécution pas à pas

pseudo
1/35
▶️
CLASSE CompteBancaire
⚙️CLASSE CompteBancaireLe programme exécute cette action, puis passe à la suivante.

Le programme exécute cette instruction, puis passe à la suivante.

class CompteBancaire:
    def __init__(self, titulaire):
        self.titulaire = titulaire  # Public
        self._solde = 0              # Privé (convention)

    # Getter
    @property
    def solde(self):
        return self._solde

    # Setter avec vérification
    def deposer(self, montant):
        if montant > 0:
            self._solde += montant
        else:
            print("Erreur : montant invalide")

    def retirer(self, montant):
        if 0 < montant <= self._solde:
            self._solde -= montant
            return montant
        else:
            print("Erreur : solde insuffisant")
            return 0

compte = CompteBancaire("Alice")
compte.deposer(1000)
print(compte.solde)       # 1000 ✅
compte.deposer(-500)      # Erreur : montant invalide ❌
compte.retirer(2000)      # Erreur : solde insuffisant ❌
print(compte.retirer(300))  # 300 ✅
print(compte.solde)       # 700 ✅

3. Pourquoi c'est génial ? 🌟

Exemple concret : Imagine qu'on veuille ajouter des logs (traces) à chaque modification du solde. Avec l'encapsulation, on modifie juste déposer() et retirer() — le reste du programme ne change PAS !


Exercice pour toi 🎯

Crée une classe Thermostat qui :

  • A une température privée _temperature
  • Ne permet pas de descendre en dessous de 0°C
  • Ne permet pas de dépasser 40°C
  • Affiche un message d'erreur si la température demandée est hors limite

Exécution pas à pas

pseudo
1/16
▶️
CLASSE Thermostat
⚙️CLASSE ThermostatLe programme exécute cette action, puis passe à la suivante.

Le programme exécute cette instruction, puis passe à la suivante.

💡 Rappelle-toi : Un bon code, c'est comme une bonne boîte : on voit ce qu'elle fait, pas comment elle le fait.

Exécution pas à pas

OuiOui
0/8

État de la mémoire

2 variables
Variable
Valeur
Type
Addr.
compte.titulaire
Alice
str
0x1800
compte._solde
500
int
0x1808
compte.titulaire0x1800
Alice
str
compte._solde0x1808
500
int

⚡ Simulateur — Encapsulation

Étape 1/11
📝 Pseudo-code
1CLASSE CompteBancaire # ← protège ses données
2 titulaire : texte # 🌍 public
3 _solde : entier # 🔒 privé
4
5 CONSTRUCTEUR(titulaire)
6 self.titulaire ← titulaire
7 self._solde ← 0
8 FIN CONSTRUCTEUR
9
10 FONCTION get_solde() # ⬅ getter (lecture)
11 RETOURNER self._solde
12 FIN FONCTION
13
14 FONCTION déposer(montant) # ⬅ setter (écriture)
15 SI montant > 0 ALORS
16 self._solde ← self._solde + montant
17 RETOURNER '✅ Dépôt réussi'
18 SINON
19 RETOURNER '❌ Montant invalide'
20 FIN SI
21 FIN FONCTION
22
23 FONCTION retirer(montant) # ⬅ setter avec contrôle
24 SI 0 < montant ET montant ≤ self._solde ALORS
25 self._solde ← self._solde - montant
26 RETOURNER montant
27 SINON
28 RETOURNER '❌ Solde insuffisant'
29 FIN SI
30 FIN FONCTION
31FIN CLASSE
🔒 Encapsulation
🏦 CompteBancaire
🌍titulaire :texte
🔒_solde :entier (privé)
+ get_solde() → lecture _solde ✅
+ déposer(montant) → modifie _solde ✅
+ retirer(montant) → modifie _solde ✅
💡 Encapsulation
  • 🌍 Public : accessible directement
  • 🔒 Privé : accessible uniquement via méthodes
  • Getter : lit une valeur privée
  • Setter : modifie une valeur privée AVEC contrôle

La classe CompteBancaire encapsule ses données. _solde est privé.