Exercices Architecture & Patterns Pattern Composite : Répertoire de fichiers
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

Pattern Composite : Répertoire de fichiers

Le pattern Composite permet de traiter uniformement des objets individuels et des groupes d'objets. L'exemple classique, c'est un système de fichiers : un répertoire peut contenir des fichiers ou d'autres répertoires, et on peut calculer la taille totale de n'importe quel élément.

L'astuce : les fichiers et les répertoires ont la meme interface (taille_totale(), nb_fichiers()). Un fichier retourne sa propre taille. Un répertoire fait la somme récursive de ses enfants.

racine/
image.png (500 Ko)
docs/
readme.txt (100 Ko)
notes.txt (200 Ko)

racine.taille_totale() # 800 (somme récursive)
racine.nb_fichiers() # 3

Implemente :
- Fichier(nom, taille) avec taille_totale() retournant self.taille et nb_fichiers() retournant 1
- Répertoire(nom) avec :
- ajouter(élément) : ajoute un fichier ou un sous-répertoire
- taille_totale() : somme récursive de tous les éléments
- nb_fichiers() : compte recursif du nombre de fichiers (pas de répertoires)

Exemple :
racine = Répertoire('/')
racine.ajouter(Fichier('img.png', 500))
sub = Répertoire('docs')
sub.ajouter(Fichier('readme.txt', 100))
racine.ajouter(sub)
racine.taille_totale() # 600
racine.nb_fichiers() # 2

Tests (3/4)

Fichier seul
f = Fichier('img.png', 500)
assert f.taille_totale() == 500
Répertoire simple
r = Répertoire('docs')
r.ajouter(Fichier('a.txt', 100))
r.ajouter(Fichier('b.txt', 200))
assert r.taille_totale() == 300
Répertoire imbriqué
racine = Répertoire('/')
sub = Répertoire('sub')
sub.ajouter(Fichier('x', 50))
racine.ajouter(Fichier('y', 150))
racine.ajouter(sub)
assert racine.taille_totale() == 200

+ 0 tests cachés

Indices (3 disponibles)

solution.py