Easier to read with cream paper, a tint, more contrast or larger text? Choose your colours and text, once, for every page.

Aperçu

Des objets qui se parlent

Voici la première page de la leçon. Lis-la et essaie les activités. La suite est dans le cours complet.

40 minutes

La carte de cantine

À la cantine, tu as une carte avec de l’argent dessus. Tu peux la recharger. Tu peux payer ton repas.

Mais la machine refuse de te servir si ta carte est vide. Les règles sont dans la carte, pas dans ta tête.

Aujourd’hui, on écrit une classe dont les méthodes protègent leurs données.

Mots-clés

MotCe que ça veut direExemple
ClasseLe moule qui fabrique des objets. Voir la leçon « Les objets ».class CarteCantine:
ConstructeurLa méthode __init__, lancée quand on crée l’objet.def __init__(self, proprietaire):
MéthodeUne fonction rangée dans une classe.carte.payer(3)
EncapsulationGarder les données d’un objet à l’abri : on passe par ses méthodes.carte.payer(3) et pas carte.solde = 0
SoldeL’argent qui reste sur la carte.carte.solde

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un constructeur avec une valeur

Le constructeur peut recevoir des valeurs : le prénom du propriétaire, par exemple.

Les autres attributs prennent une valeur de départ : le solde commence à 0.

Chaque méthode peut regarder et changer les attributs avec self.

À toi : recharger et payer

Code: python
class CarteCantine:
    def __init__(self, proprietaire):
        self.proprietaire = proprietaire
        self.solde = 0

    def recharger(self, montant):
        self.solde = self.solde + montant

    def payer(self, prix):
        if prix > self.solde:
            return False
        self.solde = self.solde - prix
        return True


carte = CarteCantine("Lina")
carte.recharger(10)
print(carte.solde)

print(carte.payer(3))
print(carte.solde)

print(carte.payer(20))
print(carte.solde)

# Que se passe-t-il si le repas coûte exactement le solde ?

Exemple travaillé : la vie d’une carte

LigneSolde avantCe qui se passeSolde après
carte.recharger(10)0on ajoute 1010
carte.payer(3)103 ne dépasse pas 10 : on enlève 3, on rend True7
carte.payer(20)720 est plus grand que 7 : on ne change rien, on rend False7
carte.payer(7)77 ne dépasse pas 7 : on enlève 7, on rend True0

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Contrôle rapide

À toi de jouer

Contrôle rapide

3 questions
Essayez : vos réponses sont notées ici puis oubliées. Connectez-vous si vous voulez conserver votre score et reprendre là où vous en étiez.Se connecter pour conserver mon score

Tes réponses sont corrigées ici et ne sont pas conservées. Un compte garde tes résultats.

Passer par les méthodes

Rien n’empêche d’écrire carte.solde = 1000 depuis l’extérieur. Mais alors, plus de vérification !

On se donne une règle : les données d’un objet ne se touchent que par ses méthodes. C’est l’encapsulation.

Ainsi, les règles sont écrites à un seul endroit.

À toi : toucher au solde

Code: python
class CarteCantine:
    def __init__(self, proprietaire):
        self.proprietaire = proprietaire
        self.solde = 0

    def payer(self, prix):
        if prix > self.solde:
            return False
        self.solde = self.solde - prix
        return True


carte = CarteCantine("Karim")

# Mauvaise idée : on touche au solde de l'extérieur.
carte.solde = 1000
print(carte.solde)

# Bonne idée : on passe par les méthodes, qui font les vérifications.
print(carte.payer(5000))

# Une règle entre nous : on ne change jamais carte.solde directement.

Des objets qui se parlent

Un objet peut recevoir un autre objet en paramètre. Il lui envoie alors un message en appelant une de ses méthodes.

Exemple : une carte donne de l’argent à une autre. Elle enlève de son solde, puis appelle autre.recharger(montant).

La leçon continue

8 parties de plus de cette leçon se trouvent dans le cours complet, avec les exercices et la vérification finale. Un compte te donne tout.