Exercice Corrigé: Les classes POO Python – Partie 9

Cet exercice de programmation orientée objet (POO) a pour but de vous aider à apprendre et à pratiquer les concepts de la POO. Toutes les questions sont testées sur Python 3.

Python La programmation orientée objet (POO) est basée sur le concept d’« objets », qui peuvent contenir des données et du code : des données sous la forme de variables d’instance (souvent connues sous le nom d’attributs ou de propriétés), et du code, sous la forme de méthodes. En d’autres termes, la POO permet d’encapsuler des propriétés et des comportements connexes dans des objets individuels.
 
 

Exercice 1:

Écrire un programme Python pour créer une classe appelée « Animal » avec des attributs tels que le nom, la race et l’âge. Créez des sous-classes « Chien » et « Oiseau » qui ajoutent des attributs spécifiques tels que le jouet préféré pour les chiens et la taille de l’aile pour les oiseaux. Implémentez des méthodes pour afficher les détails de l’animal et calculer son âge en années humaines.

Diagrame de classe:

Solution:

# Définir la classe Animal
class Animal:
    # Constructeur de la classe Animal
    def __init__(self, nom, race, age):
        self.nom = nom  # Nom de l'animal
        self.race = race  # Race de l'animal
        self.age = age  # Âge de l'animal en années

    # Méthode d'affichage des détails de l'animal
    def afficher(self):
        print("Nom:", self.nom)
        print("Race:", self.race)
        print("Age:", self.age, "années")

    # Méthode de calcul de l'âge de l'animal en années humaines
    def calculer_age(self):
        if self.race == "Chien":
            # L'âge des chiens en années humaines
            return self.age * 7  
        else:
            # En supposant que l'âge de l'oiseau en années humaines 
            # est le même que l'âge réel
            return self.age

# Définir la classe Chien qui hérite de Animal
class Chien(Animal):
    # Attribut supplémentaire pour la classe Chien
    def __init__(self, nom, age, jouet):
        # Appeler le constructeur de la classe mère
        super().__init__(nom, "Chien", age)
        self.jouet = jouet  # Jouet préféré du chien

    # Surcharger la méthode afficher pour inclure le jouet préféré
    def afficher(self):
        # Appeler la méthode de la classe mère
        super().afficher()  
        print("Le jouet préféré:", self.jouet)

# Définir la classe Oiseau qui hérite de Animal
class Oiseau(Animal):
    # Attribut supplémentaire pour la classe Oiseau
    def __init__(self, nom, age, taille_aile):
        # Appeler le constructeur de la classe mère
        super().__init__(nom, "Oiseau", age)
        # Taille de l'aile en mètres
        self.taille_aile = taille_aile  

    # Surcharger la méthode afficher pour inclure la taille de l'aile
    def afficher(self):
        # Appeler la méthode de la classe mère
        super().afficher()  
        print("La taille de l'aile:", self.taille_aile, "mètres")

# Code de test
if __name__ == "__main__":
    # Créer une instance de Chien
    c = Chien("Beagle", 4, "Cordes")

    # Créer une instance de Oiseau
    o = Oiseau("Calopsitte", 3, 1.5)

    # Afficher les informations sur le chien
    print("Informations sur le chien:")
    c.afficher()
    print("Âge du chien en années humaines:", c.calculer_age())

    # Afficher les informations sur l'oiseau
    print("\nInformations sur l'oiseau:")
    o.afficher()
    print("Âge de l'oiseau en années humaines:", o.calculer_age())

Sortie:

Informations sur le chien:
Nom: Beagle
Race: Chien
Age: 4 années
Le jouet préféré: Cordes
Âge du chien en années humaines: 28

Informations sur l'oiseau:
Nom: Calopsitte
Race: Oiseau
Age: 3 années
La taille de l'aile: 1.5 mètres
Âge de l'oiseau en années humaines: 3
 

Exercice 2:

Écrire un programme Python pour créer une classe appelée « AbonnementGym » avec des attributs pour le nom du membre, le type d’adhésion et la durée. Créer une sous-classe « AbonnementPremium » qui ajoute des attributs pour la disponibilité d’un entraîneur personnel et l’accès au spa. Implémentez des méthodes pour calculer les frais d’adhésion et vérifier s’il existe des offres spéciales basées sur le type d’adhésion.

Diagrame de classe:

Solution:

class AbonnementGym:
    # Constructeur pour AbonnementGym
    def __init__(self, nom, type_abonnement, duree):
        self.nom = nom              # Nom du membre
        self.type = type_abonnement  # Type d'abonnement
        self.duree = duree          # Durée en mois

    # Méthode de calcul des frais d'adhésion
    def calculer_frais(self):
        base = 50.0  # Frais de base par mois
        return base * self.duree

    # Méthode pour vérifier les offres spéciales
    def check_offres_speciales(self):
        if self.type.lower() == "annuelle":
            return "10% réduction sur l'adhésion annuelle."
        else:
            return "Aucune offre spéciale n'est disponible."

    # Méthode d'affichage des détails de l'abonnement
    def afficher(self):
        print("Nom du membre:", self.nom)
        print("Type d'abonnement:", self.type)
        print("Durée:", self.duree, "mois")
        print("Frais d'abonnement:", self.calculer_frais(), "€")
        print("Offre spéciale:", self.check_offres_speciales())


class AbonnementPremium(AbonnementGym):
    # Attributs supplémentaires pour AbonnementPremium
    def __init__(self, nom, type_abonnement, duree, entraineur_personnel, acces_spa):
        # Appeler le constructeur de la classe mère
        super().__init__(nom, type_abonnement, duree)  
        # Accès à un entraîneur personnel
        self.entraineur_personnel = entraineur_personnel 
        # Accès au spa		
        self.acces_spa = acces_spa                          

    # Surcharger la méthode calculer_frais pour inclure des coûts 
    # supplémentaires
    def calculer_frais(self):
        # Appeler la méthode de la classe mère
        base = super().calculer_frais()  
        frais_supplementaires = 0.0

        if self.entraineur_personnel:
            # Frais supplémentaires par mois pour un entraîneur 
            # personnel
            frais_supplementaires += 30.0 * self.duree

        if self.acces_spa:
            # Frais supplémentaires par mois pour l'accès au spa
            frais_supplementaires += 20.0 * self.duree

        return base + frais_supplementaires

    # Surcharger la méthode afficher pour inclure les détails de 
    # l'abonnement premium
    def afficher(self):
        # Appeler la méthode de la classe mère
        super().afficher()  
        print("Entraîneur personnel disponible:", "Oui" if self.entraineur_personnel else "Non")
        print("Accès au spa:", "Oui" if self.acces_spa else "Non")


# Code de test
if __name__ == "__main__":
    # Créer une instance de AbonnementGym
    a = AbonnementGym("Alex Babto", "Mensuel", 5)

    # Créer une instance de AbonnementPremium
    b = AbonnementPremium("Emily Lyona", "Annuelle", 12, True, True)

    # Afficher les détails de l'abonnement de base
    print("Détails de l'abonnement de base:")
    a.afficher()

    # Afficher les détails de l'abonnement premium
    print("\nDétails de l'abonnement premium:")
    b.afficher()

Sortie:

Détails de l'abonnement de base:
Nom du membre: Alex Babto
Type d'abonnement: Mensuel
Durée: 5 months
Frais d'abonnement: 250.0 €
Offre spéciale: Aucune offre spéciale n'est disponible.

Détails de l'abonnement premium:
Nom du membre: Emily Lyona
Type d'abonnement: Annuelle
Durée: 12 months
Frais d'abonnement: 1200.0 €
Offre spéciale: 10% réduction sur l'adhésion annuelle.
Entraîneur personnel disponible: Oui
Accès au spa: Oui
 

Éditeur de code Python: Testez votre code en ligne!


 

QCM Python

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *