Exercices¶
Exercices de Base (Héritage Simple)¶
1. Classe Animal et Sous-Classes¶
Créez une classe Animal avec :
- Un constructeur pour
nom. - Une méthode
faire_son()qui retourne"Un son indéfini".
Puis créez deux sous-classes :
Chien: redéfinissezfaire_son()pour retourner"Wouf!".Chat: redéfinissezfaire_son()pour retourner"Miaou!".
Exemple :
animaux = [Chien("Rex"), Chat("Felix")]
for animal in animaux:
print(animal.faire_son()) # "Wouf!" puis "Miaou!"
2. Classe Forme et Sous-Classes¶
Créez une classe Forme avec :
- Une méthode
aire()qui retourne0. Puis deux sous-classes : Cercle(radius): calcule l’aire (π × r²).Rectangle(largeur, hauteur): calcule l’aire (largeur × hauteur).
Exemple :
formes = [Cercle(5), Rectangle(4, 6)]
for forme in formes:
print(f"Aire: {forme.aire()}") # ~78.5 puis 24
Exercices Intermédiaires (Polymorphisme)¶
3. Polymorphisme avec match¶
Étant donné les classes de l’exercice 1, écrivez une fonction decrire_animal(animal) qui utilise match pour :
- Afficher
"C'est un chien"si c’est unChien. - Afficher
"C'est un chat"si c’est unChat. - Sinon afficher
"Autre animal".
Exemple :
4. Polymorphisme avec Méthodes Abstraites¶
Modifiez l’exercice 2 pour simuler une méthode abstraite aire() dans Forme (en Python, utilisez une exception si non
redéfinie). Les vraies méthodes abstraites (avec le décorateur @abstractmethod) seront présentées dans la section sur
la programmation OO avancée.
Exemple :
try:
forme = Forme()
print(forme.aire())
except NotImplementedError:
print("Erreur: aire() non implémentée!")
Exercices Avancés (Duck Typing + Match)¶
5. Duck Typing avec match¶
Créez deux classes sans héritage :
Voiture: méthodedeplacer()→"La voiture roule".Avion: méthodedeplacer()→"L'avion vole".
Écrivez une fonction decrire_deplacement(obj) qui utilise match pour afficher le message approprié.
Exemple :
6. Système de Paiement (Polymorphisme)¶
Créez une classe Paiement avec :
- Une méthode
traiter()qui retourne"Paiement non supporté".
Puis deux sous-classes :
CarteCredit:traiter()→"Paiement par carte".PayPal:traiter()→"Paiement PayPal".
Utilisez match pour afficher le type de paiement.
Exemple :
paiements = [CarteCredit(), PayPal()]
for paiement in paiements:
print(paiement.traiter()) # "Paiement par carte", puis "Paiement PayPal"
Exercices Défi (Combinaisons)¶
7. Jeu de Rôle avec match¶
Créez un système simple avec :
Personnage(nom, points_de_vie).- Sous-classes :
Guerrier,Mage. - Chaque classe redéfinit
attaquer()et__str__().
Utilisez match pour afficher les statistiques d’un personnage.
Exemple :
8. Système de Fichiers (Duck Typing)¶
Créez des classes FichierTexte et FichierImage sans héritage, chacune avec :
lire(): retourne le contenu.taille(): retourne la taille.
Utilisez match pour afficher le type de fichier.
Exemple :
fichiers = [FichierTexte("data.txt"), FichierImage("photo.jpg")]
for fichier in fichiers:
print(f"Type: {type(fichier).__name__}") # "FichierTexte", puis "FichierImage"
Exercices supplémentaires¶
Remplacez l’utilisation de match par des méthodes dans les différentes classes, et utilisez le polymorphisme pour
appeler ces méthodes.
Conseils pour les Étudiants¶
- Pour le
duck typing, concentrez-vous sur les méthodes plutôt que sur l’héritage. - Utilisez
matchpour remplacer les chaînes d’if isinstance(). - Testez vos solutions avec des objets de types inattendus (cas par défaut).