Génie Logiciel la bibliothèque

Exercice  GL:

Une bibliothèque souhaite informatiser le référencement de ses ouvrages ainsi que sa gestion des prêts. Les ouvrages de cette bibliothèque sont des romans, caractérisés par un titre, un auteur et un éditeur, et des bandes dessinées caractérisées par un titre, un dessinateur et un éditeur.

Concernant la gestion des ouvrages, le bibliothécaire aimerait un logiciel lui permettant de saisir de nouveaux ouvrages, mettre à jour des ouvrages existants, et éventuellement en supprimer. Il voudrait pouvoir réaliser à peu près les mêmes opérations sur les abonnés. Bien entendu, le logiciel doit permettre la gestion des prêts (l'emprunt et le retour). Une fonctionnalité doit permettre d'envoyer une lettre de rappel pour tous les exemplaires empruntés depuis quatre jours pour les bandes dessinées et deux semaines pour les romans.

Le bibliothécaire aimerait, en outre, pouvoir effectuer une recherche d'œuvre sur le titre. Enfin, le bibliothécaire doit pouvoir effectuer une recherche d'abonné sur le nom ou le prénom (sans distinction). Attention à la distinction entre une œuvre et un exemplaire. Une bibliothèque possède généralement plusieurs exemplaires d'une même œuvre, et ce sont toujours des exemplaires qui sont empruntés.

Questions

  1. Quel est, en quelques mots, l'objectif du système ?
  2. Quels sont les utilisateurs du système ?
  3. Pourquoi doit-on distinguer les œuvres et les exemplaires ? Quelles sont les implications de cette distinction sur la conception du logiciel ?
  4. Décomposez le système en termes de fonctions et de sous-fonctions jusqu'à arriver à des fonctionnalités si simples qu'il n'y a plus lieu de les décomposer (dessinez une structure arborescente montrant la décomposition du système).
  5. Réfléchissez et donnez une solution quant à la représentation des données pour compléter la décomposition du système faites à la question 4.
  6. Identifiez les objets du système. Regroupez-les en classes.
  7. Identifiez les impacts d'une telle évolution sur le système obtenu grâce à l'approche structurée.
  8. Identifiez les impacts d'une telle évolution sur le système obtenu grâce à l'approche objet.

Évolution mentionnée (questions 7 & 8) : La bibliothèque souhaite évoluer en médiathèque : elle veut acquérir des albums musicaux (titre, interprète, empruntables 3 jours) et des DVD de films (titre, réalisateur, empruntables 2 jours).


Correction :

 

Question 1 – Objectif du système

L'objectif du système est de gérer informatiquement une bibliothèque : référencer les ouvrages (romans et bandes dessinées), gérer les abonnés, gérer les prêts (emprunts et retours), envoyer des rappels pour les exemplaires en retard, et permettre des recherches sur les œuvres et les abonnés.

Question 2 – Utilisateurs du système

L'unique utilisateur identifié explicitement dans l'énoncé est :

  • Le bibliothécaire : il gère les ouvrages, les abonnés, les prêts et effectue les recherches.

On peut aussi supposer implicitement les abonnés si une interface de consultation leur est offerte, mais cela n'est pas mentionné dans l'énoncé.

Question 3 – Distinction œuvre / exemplaire

Une œuvre est une entité abstraite (ex : le roman "Le Petit Prince" d'Antoine de Saint-Exupéry). Un exemplaire est un objet physique concret correspondant à une œuvre (ex : le 3e exemplaire du "Petit Prince" disponible en rayon).

Cette distinction est nécessaire car :

  • Une bibliothèque peut posséder plusieurs exemplaires d'une même œuvre.
  • C'est toujours un exemplaire qui est emprunté, pas l'œuvre.
  • La recherche porte sur l'œuvre (par titre), mais la disponibilité dépend des exemplaires.

Implications sur la conception :

  • Il faut deux entités distinctes dans le modèle : Oeuvre et Exemplaire.
  • Un Exemplaire est lié à une Oeuvre (relation 1..* : une œuvre a un ou plusieurs exemplaires).
  • La table/classe Pret référence un Exemplaire, pas une Oeuvre.

Question 4 – Décomposition fonctionnelle (approche structurée)

SYSTÈME BIBLIOTHÈQUE
│
├── 1. Gestion des ouvrages
│     ├── 1.1 Saisir un nouvel ouvrage
│     ├── 1.2 Mettre à jour un ouvrage
│     └── 1.3 Supprimer un ouvrage
│
├── 2. Gestion des exemplaires
│     ├── 2.1 Ajouter un exemplaire
│     ├── 2.2 Supprimer un exemplaire
│     └── 2.3 Consulter la disponibilité
│
├── 3. Gestion des abonnés
│     ├── 3.1 Ajouter un abonné
│     ├── 3.2 Mettre à jour un abonné
│     └── 3.3 Supprimer un abonné
│
├── 4. Gestion des prêts
│     ├── 4.1 Enregistrer un emprunt
│     ├── 4.2 Enregistrer un retour
│     └── 4.3 Envoyer une lettre de rappel
│           ├── 4.3.1 Rappel BD (> 4 jours)
│           └── 4.3.2 Rappel Romans (> 14 jours)
│
└── 5. Recherche
      ├── 5.1 Recherche d'œuvre par titre
      └── 5.2 Recherche d'abonné par nom/prénom

Question 5 – Représentation des données

Structures de données associées à chaque fonction :

  • Ouvrage : {id_ouvrage, type (roman/BD), titre, editeur, auteur_ou_dessinateur}
  • Exemplaire : {id_exemplaire, id_ouvrage (FK), état (disponible/emprunté)}
  • Abonné : {id_abonné, nom, prénom, adresse, contact}
  • Prêt : {id_pret, id_exemplaire (FK), id_abonné (FK), date_emprunt, date_retour_prevue, date_retour_effective}

La durée maximale de prêt est déterminée par le type d'ouvrage :

  • Roman : 14 jours
  • Bande dessinée : 4 jours

Question 6 – Identification des objets et classes (approche objet)

Objets identifiés : ouvrage, roman, bande dessinée, exemplaire, abonné, prêt, lettre de rappel, bibliothécaire.

Regroupement en classes :

Classe Ouvrage (abstraite)
  - titre : String
  - editeur : String
  - dureeMaxPret : int
  + rechercher(titre) : Ouvrage

Classe Roman extends Ouvrage
  - auteur : String

Classe BandeDessinee extends Ouvrage
  - dessinateur : String

Classe Exemplaire
  - id : int
  - ouvrage : Ouvrage
  - disponible : boolean
  + emprunter()
  + retourner()

Classe Abonne
  - nom : String
  - prenom : String
  + rechercher(nom_ou_prenom) : Abonne

Classe Pret
  - exemplaire : Exemplaire
  - abonne : Abonne
  - dateEmprunt : Date
  - dateRetourPrevue : Date
  - dateRetourEffective : Date
  + estEnRetard() : boolean
  + genererRappel() : LettreDeRappel

Classe LettreDeRappel
  - pret : Pret
  + envoyer()

Question 7 – Impact de l'évolution sur l'approche structurée

L'ajout d'albums musicaux et de DVD implique dans l'approche structurée :

  • Modification de la structure de données Ouvrage pour ajouter les types "album" et "DVD" avec leurs attributs spécifiques (interprète, réalisateur).
  • Modification de toutes les fonctions qui traitent le type d'ouvrage (saisie, mise à jour, recherche, calcul de rappel).
  • Ajout de nouvelles règles dans la fonction 4.3 Envoyer rappel : rappel album (> 3 jours), rappel DVD (> 2 jours).
  • Impact fort : les modifications touchent de nombreuses fonctions déjà existantes → risque élevé d'introduire des bugs (code peu extensible).

Question 8 – Impact de l'évolution sur l'approche objet

L'ajout d'albums musicaux et de DVD dans l'approche objet :

  • Il suffit de créer deux nouvelles classes qui héritent de la classe Ouvrage :
Classe Album extends Ouvrage
  - interprete : String
  (dureeMaxPret = 3 jours, hérité et redéfini)

Classe DVD extends Ouvrage
  - realisateur : String
  (dureeMaxPret = 2 jours, hérité et redéfini)
  • Les classes Exemplaire, Pret, Abonne et LettreDeRappel ne sont pas modifiées.
  • La méthode estEnRetard() utilise déjà dureeMaxPret de façon générique → fonctionne automatiquement.
  • Impact faible : le principe d'ouverture/fermeture (Open/Closed Principle) est respecté → l'approche objet est bien plus extensible.

Questions / Réponses

Aucune question. Soyez le premier à poser une question.
Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam