0% ont trouvé ce document utile (0 vote)
6 vues6 pages

TP11_POO_Python_Exercices

Ce document présente un TP sur la programmation orientée objet en Python, couvrant des concepts tels que les classes, objets, héritage, encapsulation et polymorphisme. Il propose plusieurs exercices pratiques, allant de la création de classes simples à la gestion d'une bibliothèque, permettant d'appliquer les notions apprises. Chaque exercice inclut des tâches spécifiques et des questions d'analyse pour approfondir la compréhension des concepts de POO.

Transféré par

Jimmitry Charles
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues6 pages

TP11_POO_Python_Exercices

Ce document présente un TP sur la programmation orientée objet en Python, couvrant des concepts tels que les classes, objets, héritage, encapsulation et polymorphisme. Il propose plusieurs exercices pratiques, allant de la création de classes simples à la gestion d'une bibliothèque, permettant d'appliquer les notions apprises. Chaque exercice inclut des tâches spécifiques et des questions d'analyse pour approfondir la compréhension des concepts de POO.

Transféré par

Jimmitry Charles
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

VINKODE AI

TP11 — Programmation orientée objet en Python


Objectif : concevoir des programmes à partir de classes et d'objets. On couvre les attributs et
méthodes, l'encapsulation, les méthodes spéciales, l'héritage, le polymorphisme et la composition.
Aucun module externe n'est nécessaire, tout est en Python standard.

Exercice 1 - Première classe


Une classe est un modèle qui décrit un type d'objet. Un objet (ou instance) est un exemplaire concret
créé à partir de ce modèle. On commence par une classe simple représentant un étudiant.

Classe Etudiant
attributs : nom, age, filiere
méthode : se_presenter()

Travail demandé
1 Définissez une classe Etudiant avec un constructeur __init__ recevant nom, age et filiere.
2 Créez un objet Etudiant représentant un étudiant de votre choix.
3 Affichez séparément son nom, son âge et sa filière.
4 Ajoutez une méthode se_presenter() qui affiche une phrase de présentation complète.
5 Appelez cette méthode sur votre objet.
6 Créez trois étudiants différents et rangez-les dans une liste.
7 Parcourez la liste et faites se présenter chaque étudiant.

Question d'analyse
Quelle est la différence entre une classe et un objet ? À quoi sert le paramètre self dans les méthodes ?

Exercice 2 - Attributs et méthodes


Les méthodes peuvent modifier l'état interne d'un objet. On modélise un compte bancaire en gourdes dont
le solde évolue au fil des opérations.

Classe CompteBancaire
attributs : titulaire, solde (par défaut 0)
méthodes : deposer(montant), retirer(montant), afficher_solde()

Travail demandé
1 Définissez la classe CompteBancaire avec un titulaire et un solde valant 0 par défaut.
2 Écrivez une méthode deposer(montant) qui augmente le solde.
3 Écrivez une méthode retirer(montant) qui diminue le solde.
4 Empêchez un retrait supérieur au solde disponible et affichez un message dans ce cas.
5 Écrivez une méthode afficher_solde() qui affiche le solde en gourdes.
6 Ajoutez un attribut historique (une liste) qui enregistre chaque opération.
7 Testez : créez un compte, faites plusieurs dépôts et retraits, puis affichez l'historique.
Question d'analyse
Pourquoi vaut-il mieux passer par des méthodes comme deposer et retirer plutôt que de modifier
directement le solde de l'extérieur ?
Exercice 3 - Encapsulation
L'encapsulation consiste à protéger les données internes d'un objet pour qu'elles ne soient modifiées
que de façon contrôlée. On reprend le compte bancaire en rendant le solde privé.

Convention : un attribut préfixé par _ (ex. _solde) est considéré comme privé.
Propriété : @property et @<attribut>.setter contrôlent lecture et écriture.

Travail demandé
1 Renommez l'attribut solde en _solde pour signaler qu'il est privé.
2 Ajoutez une propriété solde en lecture seule avec @property qui renvoie _solde.
3 Vérifiez que l'on peut lire [Link] mais pas lui affecter directement une valeur.
4 Créez une classe Temperature avec un attribut privé _celsius.
5 Ajoutez un setter qui refuse une température inférieure à -273.15 (zéro absolu).
6 Ajoutez une propriété fahrenheit calculée à partir de _celsius.
7 Testez avec une valeur valide, puis avec une valeur interdite.

Question d'analyse
Que se passerait-il si n'importe quelle partie du programme pouvait modifier directement _solde ou
_celsius ? En quoi l'encapsulation aide-t-elle à garder un objet dans un état valide ?

Exercice 4 - Méthodes spéciales


Python possède des méthodes spéciales (entourées de doubles tirets bas) qui définissent le
comportement des objets face à l'affichage, la comparaison ou les opérations. On modélise un point du
plan.

Classe Point
attributs : x, y
méthodes spéciales : __str__, __eq__, __add__

Travail demandé
1 Définissez une classe Point avec les coordonnées x et y.
2 Ajoutez __str__ pour qu'un print(p) affiche par exemple (3, 4).
3 Ajoutez __eq__ pour que deux points de mêmes coordonnées soient considérés égaux.
4 Ajoutez __add__ pour que p1 + p2 renvoie un nouveau point somme des coordonnées.
5 Ajoutez une méthode distance(autre) qui calcule la distance entre deux points.
6 Testez l'affichage, l'égalité, l'addition et le calcul de distance.

Question d'analyse
Sans __str__, que renvoie print sur un objet ? Pourquoi ces méthodes spéciales rendent-elles une
classe plus agréable à utiliser ?
Exercice 5 - Héritage
L'héritage permet de créer une classe à partir d'une autre en réutilisant ses attributs et méthodes. La
classe fille peut ajouter ou redéfinir des comportements.

Personne (nom, age)


|__ Etudiant (ajoute : filiere)
|__ Enseignant (ajoute : matiere)

Travail demandé
1 Définissez une classe de base Personne avec nom, age et une méthode se_presenter().
2 Créez une classe Etudiant qui hérite de Personne et ajoute un attribut filiere.
3 Dans le constructeur d'Etudiant, appelez celui de Personne avec super().
4 Redéfinissez se_presenter() dans Etudiant pour mentionner la filière.
5 Créez de la même façon une classe Enseignant avec un attribut matiere.
6 Créez un étudiant et un enseignant, puis faites-les se présenter.
7 Vérifiez avec isinstance qu'un Etudiant est aussi une Personne.

Question d'analyse
Quel intérêt d'utiliser super() plutôt que de recopier le code du constructeur parent ? Que se passe-t-il si
la classe fille ne redéfinit pas une méthode du parent ?
Exercice 6 - Polymorphisme et membres de classe
Le polymorphisme permet de traiter de la même façon des objets de classes différentes, tant qu'ils
partagent une méthode commune. On modélise des formes géométriques.

Forme (méthode aire())


|__ Cercle (rayon)
|__ Rectangle (largeur, hauteur)

Travail demandé
1 Définissez une classe Forme avec une méthode aire() qui renvoie 0 par défaut.
2 Créez Cercle et Rectangle qui héritent de Forme et redéfinissent aire().
3 Rangez plusieurs formes dans une liste.
4 Parcourez la liste et affichez l'aire de chaque forme avec une seule boucle (polymorphisme).
5 Ajoutez un attribut de classe nombre_formes qui compte les formes créées.
6 Ajoutez une @staticmethod utilitaire, par exemple une validation de valeur positive.
7 Affichez le nombre total de formes créées après vos tests.

Question d'analyse
Comment une même boucle peut-elle appeler aire() sur des objets de types différents sans savoir
lesquels ? Quelle différence entre un attribut de classe et un attribut d'instance ?

Exercice 7 - Composition
La composition consiste à construire un objet à partir d'autres objets. Un cours contient des étudiants :
c'est une relation « a un » plutôt que « est un ».

Classe Cours contient une liste d'objets Etudiant (avec un attribut note)

Travail demandé
1 Reprenez ou adaptez la classe Etudiant pour qu'elle possède un attribut note.
2 Créez une classe Cours avec un nom et une liste d'étudiants (vide au départ).
3 Ajoutez une méthode ajouter_etudiant(etudiant).
4 Ajoutez une méthode moyenne() qui calcule la moyenne des notes du cours.
5 Ajoutez une méthode meilleur_etudiant() qui renvoie l'étudiant ayant la meilleure note.
6 Ajoutez une méthode nombre_etudiants().
7 Testez : créez un cours, ajoutez plusieurs étudiants, affichez la moyenne et le meilleur étudiant.

Question d'analyse
Quand faut-il préférer la composition (« a un ») à l'héritage (« est un ») ? Donnez un exemple où chacune
est plus adaptée.
Exercice 8 - Mini-projet : gestion d'une bibliothèque
Assemblez les notions vues dans un petit système complet. Une bibliothèque gère des livres et des
membres qui empruntent ces livres.

Classes suggérées : Livre (titre, auteur, disponible)


Membre (nom, livres_empruntes)
Bibliotheque (livres, membres)

Travail demandé
1 Créez une classe Livre avec un titre, un auteur et un état disponible (vrai au départ).
2 Donnez à Livre une méthode spéciale __str__ pour un affichage lisible.
3 Créez une classe Membre avec un nom et la liste des livres qu'il a empruntés.
4 Créez une classe Bibliotheque contenant une liste de livres et une liste de membres (composition).
5 Ajoutez une méthode emprunter(membre, titre) qui vérifie la disponibilité, met le livre à indisponible
et l'ajoute au membre.
6 Ajoutez une méthode rendre(membre, titre) qui fait l'inverse.
7 Ajoutez une méthode livres_disponibles() qui affiche les livres encore disponibles.
8 Écrivez un petit scénario de test et rédigez une conclusion de cinq à huit lignes sur ce que vous avez
construit.

Question d'analyse
Quelles notions de POO (encapsulation, héritage, composition, méthodes spéciales) avez-vous utilisées
dans ce mini-projet, et où précisément ?

TP11 — Programmation orientée objet en Python · Tout se fait en Python standard, sans module externe.

Vous aimerez peut-être aussi