Terminale · NSI

Contrôle n°5 — Paradigmes de programmation et POO

Ce contrôle aborde les concepts de la programmation orientée objet en Python et les compare avec la programmation fonctionnelle.

1h30 · Difficile · 3 exercices · Barème sur 20 points

Entraînement généré par IA — vérification pédagogique complète non acquise.

Ce sujet n’est pas une annale officielle. La présence d’un corrigé ne garantit pas son exactitude. Vérifie les méthodes avec ton cours ; une note d’entraînement n’est pas une note officielle. Signaler une erreur.

La fenêtre d’impression de ton navigateur permet aussi d’enregistrer en PDF. Aucun téléchargement de PDF officiel n’est annoncé ici.

Sujet

Travaille d’abord sans consulter le corrigé. Note tes réponses et les étapes de ton raisonnement.

Exercice 1Concepts de la POO (7 points)

1. Définissez les termes suivants dans le contexte de la POO : classe, instance (objet), attribut, méthode. 2. Quelle est la différence entre l'encapsulation et l'héritage ? Donnez un exemple concret pour chacun. 3. En Python, que se passe-t-il lors de l'exécution de `objet.méthode(arg)` ? Mentionnez le rôle du paramètre `self`.

Exercice 2Implémentation d'une classe (9 points)

Vous devez implémenter une classe `CompteBancaire`. 1. Écrivez le constructeur `__init__(self, titulaire, solde_initial=0)`. Le titulaire est une chaîne, le solde un nombre. L'attribut solde doit être privé (convention Python). 2. Écrivez les méthodes `deposer(self, montant)` et `retirer(self, montant)`. La méthode `retirer` ne doit pas permettre un retrait si le solde deviendrait négatif ; dans ce cas, elle lève une exception `ValueError` avec un message. 3. Écrivez la méthode spéciale `__str__(self)` qui renvoie une chaîne au format : "Compte de [titulaire] : [solde] €". 4. Créez une classe `CompteEpargne` qui hérite de `CompteBancaire`. Son constructeur prend un taux d'intérêt annuel (en %). Surchargez la méthode `deposer` pour qu'elle ajoute également les intérêts annuels au solde (intérêts simples, calculés sur le solde actuel).

Exercice 3Programmation fonctionnelle (4 points)

Comparez les approches impérative (avec boucle), orientée objet et fonctionnelle pour traiter une liste de nombres. Considérez la tâche : "filtrer les nombres pairs d'une liste, puis les élever au carré". 1. Donnez un exemple très concis de code Python utilisant une compréhension de liste (approche fonctionnelle). 2. En quoi cette approche diffère-t-elle fondamentalement d'une méthode de classe qui prendrait la liste en attribut et modifierait son état ? 3. Citez un avantage de l'immutabilité (l'absence de modification des données) souvent associée au style fonctionnel.

Corrigé et barème

Le total du barème est de 20 points. Les réponses rédigées admettent plusieurs formulations pertinentes ; compare le raisonnement, pas seulement les mots.

Exercice 1Concepts de la POO : 7 points
1. Classe : plan de construction, définition d'un type d'objets. Instance (objet) : réalisation concrète d'une classe en mémoire. Attribut : variable liée à une instance ou une classe, stockant un état. Méthode : fonction liée à une instance ou une classe, définissant un comportement. 2. Encapsulation : regrouper données et méthodes dans une unité (classe) et contrôler l'accès (public/privé). Exemple : attribut privé `__solde` d'un compte bancaire. Héritage : créer une classe (fille) à partir d'une autre (mère), réutilisant et spécialisant ses caractéristiques. Exemple : classe `VéhiculeElectrique` héritant de `Véhicule`. 3. Python transforme `objet.méthode(arg)` en `Classe.méthode(objet, arg)`. Le paramètre `self` reçoit automatiquement une référence à l'instance (`objet`) sur laquelle la méthode est appelée, permettant d'accéder à ses attributs et autres méthodes.
Exercice 2Implémentation d'une classe : 9 points
1. `def __init__(self, titulaire, solde_initial=0): self.titulaire = titulaire; self.__solde = solde_initial` 2. python def deposer(self, montant): self.__solde += montant def retirer(self, montant): if montant > self.__solde: raise ValueError("Fonds insuffisants") self.__solde -= montant 3. `def __str__(self): return f"Compte de {self.titulaire} : {self.__solde} €"` 4. python class CompteEpargne(CompteBancaire): def __init__(self, titulaire, solde_initial, taux): super().__init__(titulaire, solde_initial) self.taux = taux def deposer(self, montant): super().deposer(montant) # Ajout des intérêts annuels self._CompteBancaire__solde += self._CompteBancaire__solde * (self.taux / 100)
Exercice 3Programmation fonctionnelle : 4 points
1. `[x**2 for x in liste if x % 2 == 0]` 2. L'approche fonctionnelle (compréhension) crée une nouvelle liste sans modifier l'originale, et le calcul est exprimé comme une transformation (filter/map). Une méthode de classe pourrait modifier l'attribut liste interne de l'objet, ce qui est un effet de bord. Le style fonctionnel privilégie les fonctions pures (mêmes entrées, mêmes sorties, pas d'effets de bord). 3. Avantage de l'immutabilité : simplification du raisonnement sur le code, du débogage et de la parallélisation (pas de risque de conditions de course car les données ne sont pas modifiées).

Comprendre, puis réessayer

Repère une erreur précise, explique ce qui t’a manqué et refais l’exercice sans le corrigé. Reprends la notion dans ton cours avant de passer à un autre sujet.

Planifier une révision · Chercher un autre entraînement

Nyms