TD1 : Introduction à la Programmation Orientée Objet

✏️ Tout ce TD est à faire sur le cahier, sans ordinateur.

Exercice 1 : Vocabulaire.

En observant le schéma ci-dessous, remplacez les zones en pointillés (-----) par le vocabulaire vu en cours (attributs, méthodes, objets ou instances).

Schéma classe Voiture et ses objets porsche_911 et corvette_z06

Exercice 2 : Vocabulaire - QCM.

Attention, plusieurs bonnes réponses sont possibles à chaque question.
  1. Une classe :

    1. est un objet
    2. est une fonction particulière
    3. permet de déclarer des propriétés communes à un ensemble d'objets
    4. ne peut pas être définie sans constructeur
  2. Pour créer un constructeur, en Python, on utilise le mot-clé :

    1. init
    2. new
    3. class
    4. str
  3. Le constructeur :

    1. doit posséder au moins un argument
    2. doit posséder plusieurs arguments
    3. ne possède pas d'argument
    4. permet d'initialiser les attributs
  4. Une méthode :

    1. permet de caractériser le comportement d'un objet
    2. est une fonction contenue dans une classe
    3. peut être appliquée à n'importe quel objet, quelle que soit sa classe
    4. peut modifier les attributs d'un objet

Exercice 3 : Trouver les erreurs.

On définit ci-dessous la classe Voiture, avec de nombreuses erreurs.

classe voiture:
    def init(marque, couleur = 'blanc', vol_essence):
        self.marque = ''
        self.couleur = couleur
        self.vol_essence = vol_essence

    def demarrer():
        if vol_essence > 0:
            print('on démarre')
        else:
            print('plus d\'essence')

    def rouler(nb_km, vol_essence):
        vol_essence -= 6 * nb_km / 100
        if vol_essence < 0:
            print('plus d\'essence')

    def ajoute_essence(vol_essence, volume):
        vol_essence += volume

Sur votre cahier, corrigez toutes les erreurs que vous trouvez (il y en a plusieurs, de natures différentes).

Une fois la classe corrigée, répondez aux questions suivantes :

  1. "Ma voiture" est une Volkswagen noire ayant 26 litres d'essence. Comment instancier l'objet ma_voiture de la classe Voiture qui représente "Ma voiture" ?
  2. Comment afficher dans l'interpréteur la couleur de ma_voiture ? Peut-on afficher toutes ses caractéristiques avec la fonction print ?
  3. On veut ajouter 15 litres d'essence à ma_voiture. Que faut-il saisir dans l'interpréteur ?
  4. Que faut-il saisir dans l'interpréteur pour connaître le volume d'essence restant si on a roulé pendant 160 km ?

Exercice 4 : Dérouler un programme à la main.

On donne la classe (correcte, cette fois) suivante :

class CompteBancaire:
    def __init__(self, numero, nom, solde=0):
        self.numero = numero
        self.nom = nom
        self.solde = solde

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

    def retrait(self, montant):
        if montant <= self.solde:
            self.solde -= montant
        else:
            print("Solde insuffisant")

On exécute ensuite les instructions suivantes, dans cet ordre :

compte1 = CompteBancaire(12345, "Dupont", 100)
compte2 = CompteBancaire(67890, "Martin")
compte1.versement(50)
compte2.versement(200)
compte1.retrait(30)
compte2.retrait(500)
print(compte1.solde)
print(compte2.solde)

Sans utiliser l'ordinateur, indiquez, pour chaque ligne à partir de la 3e, ce qui est affiché à l'écran (s'il y a un affichage) et la valeur de solde de l'objet concerné juste après l'exécution de la ligne.

Attention à la valeur par défaut du paramètre solde dans le constructeur : quelle est la valeur initiale de compte2.solde ?

Exercice 5 : Construire un diagramme classe → objets.

On considère une classe Livre, caractérisée par les attributs titre, auteur et disponible (un booléen), et par les méthodes emprunter() et rendre() qui modifient la disponibilité du livre.

Sur le modèle du schéma de l'exercice 1 (classe en haut, avec ses attributs et ses méthodes ; objets en bas, chacun avec ses propres valeurs), dessinez ce diagramme pour la classe Livre, avec deux objets de votre choix (deux livres différents, avec des valeurs différentes pour chaque attribut).

Exercice 6 : Analyser avant de coder.

Une bibliothèque municipale souhaite informatiser la gestion de ses livres et de ses adhérents : quels livres sont empruntés, par qui, quels adhérents ont dépassé la date de retour, etc.

Sans écrire une seule ligne de code Python, réalisez l'analyse orientée objet de ce problème :

  1. Quelles classes vous semblent nécessaires pour modéliser cette situation ?
  2. Pour chaque classe identifiée, listez les attributs qui vous semblent pertinents.
  3. Pour chaque classe identifiée, listez quelques méthodes qui vous semblent utiles (pensez aux actions qu'on voudra réaliser : emprunter un livre, rendre un livre, vérifier un retard...).
Il n'y a pas une seule bonne réponse à cet exercice : l'objectif est de vous entraîner à identifier des classes, attributs et méthodes pertinents à partir d'une situation décrite en français, avant même de penser au code.