Exercice : Bibliothèque

Extrait d'un examen NFP121 (6 points).

Le but est de modéliser une bibliothèque en utilisant le pattern Composite.
Une bibliothèque est composée de pièces.
Une pièce est composée d'étagères.
Chaque étagère contient des livres.

Les noeuds composés sont donc : bibliothèque, pièce, étagère.
La structure a un noeud terminal (sans enfant) : livre.

Chaque élément (noeud) de la structure a un champ name, ainsi que 3 "méthodes composites" (fonctionnant comme la méthode operation() dans la terminologie GOF) :
Type de retourNom de la méthodeAction
void print() Affiche une chaîne de caractères contenant :
  • Une tabulation reflétant le niveau de profondeur de l'élément dans la hiérarchie.
  • Le nom de l'élément.
  • Le nombre de livres contenus dans l'élément (ou ses descendants)
    (un noeud de type Livre renvoie 1).
  • Le nombre de pages des livres contenus dans l'élément (ou ses descendants).
int getNombreLivres() Renvoie le nombre de livres contenus dans tous ses descendants.
int getNombrePages() Renvoie le nombre de pages des livres contenus dans tous ses descendants.
Un livre est caractérisé par son nom et son nombre de pages.

Implémentez un composite répondant à ces spécifications et créez une bibliothèque de test dans une fonction main() de manière à ce que la fonction print() de votre bibliothèque produise cet affichage :
Bibliothèque 1 : 10 livres, 2659 pages
  Pièce 1 : 5 livres, 1729 pages
    Etagère 1_1 : 3 livres, 825 pages
      Livre 1 : 200 pages
      Livre 2 : 375 pages
      Livre 3 : 250 pages
    Etagère 1_2 : 2 livres, 904 pages
      Livre 4 : 404 pages
      Livre 5 : 500 pages
  Pièce 2 : 5 livres, 930 pages
    Etagère 2_1 : 2 livres, 150 pages
      Livre 6 : 75 pages
      Livre 7 : 75 pages
    Etagère 2_2 : 1 livres, 75 pages
      Livre 8 : 75 pages
    Etagère 2_3 : 2 livres, 705 pages
      Livre 9 : 75 pages
      Livre 10 : 630 pages