Mission 10 : Polymorphisme

Mission 10 : Polymorphisme

1   Description et objectifs

Dans la mission précédente, vous avez créé et utilisé des classes représentant différents types de médias (LivreAudio, Vidéo, ...), qui sont des sous-classes de la classe Media, ainsi qu’une classe ListeLecture pour les organiser. Dans cette nouvelle mission, vous allez implémenter la fonctionnalité de sauvegarde de vos médias et de vos listes de lecture dans des fichiers texte. Vous travaillerez à la fois sur l’héritage et la réutilisation du code dans la classe mère, tout en approfondissant le concept de polymorphisme : une même méthode pouvant être appelée sur des objets de types différents et produisant un comportement spécifique à chaque type d’objet.

2   Rappel des classes

Vous disposez déjà des classes suivantes :

  • Duree : représente une durée sous le format hh:mm:ss.
  • Media : classe mère représentant un média générique. Elle contient les attributs titre, auteur, duree ainsi que les méthodes taille(), taille_par_seconde() et type_media().
  • LivreAudio : sous-classe de Media. Elle ajoute l’attribut editeur. La méthode save() (permettant de sauvegarder ce type de média) y est déjà implémentée comme exemple.
  • ListeLecture : représente une playlist nommée contenant plusieurs médias.
  • Video : sous-classe de Media. Elle ajoute l’attribut supplémentaire resolution.

Votre fichier mission10.py doit inclure :

  • Les classes ci-dessus, toutes modifiées pour intégrer la méthode save().

3   La méthode save()

La méthode save() doit permettre de sauvegarder les informations d’un média dans un fichier texte. Le fichier doit être nommé selon le format : auteur_titre_typeMedia.txt et contenir les noms des attributs du média ainsi que leurs valeurs.

Exemple attendu pour LivreAudio:

Nom du fichier : "Cube Kid_Journal d'un noob (tome 1)_LivreAudio.txt"

Contenu du fichier:
    Titre : Journal d'un noob (tome 1)
    Auteur : Cube Kid
    Durée : 02:36:21
    Editeur : 404 Éditions

Exemple attendu pour Video :

Nom du fichier : "LeCrafteur_Tuto installation Minecraft_Video.txt"

Contenu du fichier:
    Titre : Tuto installation Minecraft
    Auteur : LeCrafteur
    Durée : 00:10:01
    Resolution : 720p

Vous devez également implémenter la méthode save() dans la classe ListeLecture. Cette méthode doit sauvegarder tous les médias contenus dans la liste, en appelant leur propre méthode save() un par un.

Enfin, dans tous les cas, si un fichier portant le même nom existe déjà, la sauvegarde de ce fichier ne se fera pas.

4   Étapes à suivre

  1. Prenez connaissance du fichier mission10.py et examinez la méthode save() déjà implémentée dans la classe LivreAudio.

  2. Ajoutez la méthode save() également dans la classe Video.

  3. Analysez en détail ce que les méthodes save() des classes LivreAudio et Video ont en commun.

  4. Utilisez le concept d'héritage pour déplacer cette partie commune dans une méthode save() la classe mère Media, afin d'éviter la duplication de code des méthodes save() dans les sous-classes. Astuce :
    • Dans la méthode save() de la classe mère, crééz le fichier et sauvegardez les attributs communs à tous les médias.

    • Dans chaque sous-classe, rouvrez le fichier pour y ajouter les atttributs spécifiques à ce type de média.

    • Pour rouvrir un fichier sans écraser son contenu, utilisez :

      open(nom_fichier, "a")  # mode Append

      plutôt que :

      open(nom_fichier, "w")  # mode Write

      car le mode "w" écrase le contenu existant.

  5. Vérifiez le bon fonctionnement de votre implémentation en créant un fichier test.py qui teste :
    • La création des fichiers.
    • Que les fichiers créés portent les noms corrects.
    • Que le contenu des fichiers correspond aux spécifications.

5   Remise

Pour cette mission, vous devez soumettre les fichiers suivants :

  • mission10.py : vos classes complètes avec la méthode save() ajouté.
  • test.py : script de test montrant que save() fonctionne pour tous les types de médias.
  • README.txt : instructions pour exécuter votre code et tester la sauvegarde.

Bonnes pratiques :

  • Factorisez le code autant que possible pour éviter les duplications.
  • Utilisez les fonctionnalités de l’héritage et super() à bon escient.
  • Nommez vos fichiers et vos variables de manière claire et cohérente.
You cannot see this exercise because you are currently not logged in. Click here to log in or get a direct access to the exercice on INGInious by following this link.

Page précédente Page suivante