KABA FANTA Ibrahima ROUVIERE Aude MERCIER Julien FOATA Adrian PHILIPPON-DAUDEL Mathias Mini Projet UML Bibliothèque universitaire Année universitaire 2007 / 2008 Second semestre
SOMMAIRE I Présentation 1.1 Présentation du sujet 1.2 Présentation globale du système II Cas d'utilisation 2.1 Adhérent 2.2 Emprunt 2.3 Relance 2.4 Retour d'un emprunt 2.5 Commande d'un livre 2.6 Réception d'une commande III Diagrammes de classe 3.1 Présentation des classes 3.2 Vue globale du système 3.3 Les classes IV Diagrammes de séquence 4.1 Emprunt 4.2 Relance 4.3 Rendre 4.4 Commande 4.5 Réception commande V Diagrammes de machine d'état 5.1 Etat emprunt 5.2 Etat commande 5.3 Etat exemplaire VI Spécifications et invariants OCL 6.1 Invariants 6.2 Spécifications ~ 2 ~
I Présentation 1.1 Présentation du sujet Ce mini projet a pour objectif de modéliser le système d'information d'une bibliothèque universitaire. Il comprend la modélisation des emprunts de livres effectués par les étudiants et les enseignants ainsi que les achats de livres pour la bibliothèque. En revanche, le système ne gèrera pas la réservation d'un document (livres et revues). 1.2 Présentation globale du système L'emprunt d'un livre (et sa restitution) ainsi que l'achat d'un livre sont les deux scénarios principaux gérés par le système. Lorsqu'un étudiant (ou un enseignant) veut emprunter un livre, le système vérifie en premier lieu que la personne en a le droit : les étudiants peuvent avoir des pénalités (en cas de retard lors du retour de l'emprunt), les professeurs n'ont, quant a eux, aucunes pénalités applicables. Dans un second temps, le système vérifie le nombre d'emprunts en cours de la personne. Ce nombre ne peut en aucun cas excéder 3. Si les conditions d'emprunt sont respectées, l'exemplaire du livre emprunté ainsi que la personne l'empruntant sont enregistrés dans le système. La durée maximale d'emprunt est fixée à 15 jours pour un étudiant et 30 jours pour un enseignant. Si, une fois ce délai atteint, le livre n'est pas encore rendu, le système relance automatiquement la personne concernée (par mail pour les enseignants et par courrier pour les étudiants). A noter qu'une seule relance est effectuée. Si un mois après la relance le livre n'a toujours pas été rendu, il est considéré comme perdu. Lors de la restitution du livre, le système vérifie si ce dernier n'a pas été rendu en retard, et, le cas échéant, calcule la pénalité applicable à la personne concernée (seuls les étudiants peuvent être pénalisés). La pénalité est égale au nombre de jours de retard par rapport à la date de retour d'emprunt prévue (date d'emprunt + durée maximale d'emprunt). ~ 3 ~
L'achat d'un livre requiert deux acteurs : les enseignants, qui, via une interface web, auront accès aux différents éditeurs et livres présents dans le système d'information de la bibliothèque et pourront ainsi commander des livres. Une fois leur commande effectuée, la bibliothécaire la consulte et doit soit la valider, soit la refuser. Lorsque la commande est refusée, elle est automatiquement annulée. Si la commande est validée, la bibliothécaire l'envoie à l'éditeur. Lors de la réception de la commande, chaque exemplaire des livres commandés est ajouté au système. etc... D'autres fonctionnalités sont également disponibles telles que la recherche d'un livre, II Cas d'utilisation 2.1 L'adhérent Un adhérent est soit un étudiant soit un enseignant. Le choix de l'acteur (adhérent, étudiant ou enseignant) dans les prochains cas d'utilisation dépendra du ou des acteurs concernés. ~ 4 ~
2.2 L'emprunt C'est la bibliothécaire qui s'occupe d'enregistrer l'emprunt. Avant de valider ou refuser un emprunt, le système vérifie les pénalités et le nombre d'emprunts de la personne concernée. ~ 5 ~
2.3 La relance La relance est automatique, elle est donc déclenchée par l'horloge. Lorsque la date de retour prévue plus 2 jours est atteinte, le système envoie un message de relance à l'emprunteur (par mail pour un enseignant ou par courrier pour un étudiant). ~ 6 ~
2.4 Le retour d'un emprunt Tout comme pour l'emprunt, c'est la bibliothécaire qui enregistre le retour d'un emprunt. En fonction du retard constaté, une pénalité est calculée s'il s'agit d'un étudiant. Si cet étudiant a déjà une pénalité, elles s'accumulent. De plus, les différents emprunts d'un adhérent seront archivés. ~ 7 ~
2.5 La commande d'un livre La commande est effectuée par un enseignant, qui, après avoir recherché le livre qui l'intéresse, l'ajoute a sa commande. La commande est créée lors de l'ajout du premier livre commandé. Une fois la commande effectuée, la bibliothécaire doit valider la commande ou la refuser. On suppose alors que les livres que les éditeurs nous proposent sont enregistrés dans notre système à la réception de leurs catalogues de livres. ~ 8 ~
2.6 La réception de la commande Lors de la réception de la commande, autant d'exemplaires de livres sont crées que la quantité de livres commandés. ~ 9 ~
III Diagrammes de classe 3.1 Présentation des classes La classe 'Adhérent' : elle regroupe toutes les informations d'un adhérent à la bibliothèque. Cet adhérent est soit un enseignant, soit un étudiant. La classe 'Enseignant' : l'enseignant étant un adhérent, cette classe hérite de 'Adhérent', tout en ajoutant les informations propres à un enseignant. La classe 'Etudiant' : tout comme la classe 'Enseignant', elle hérite de 'Adhérent', avec, en plus, des informations spécifiques à l'étudiant. La classe 'Livre' : Elle est héritée de 'Ouvrage'. On y retrouve également le prix du livre. La classe 'Exemplaire' : Héritée de 'Document', la classe 'Exemplaire' a une côte, une disponibilité et un état ('Comme neuf', 'Bon etat', 'Partiellement abime', 'Tres abime', 'En reparation'). La classe 'Document' : Classe mère de 'Exemplaire' et 'No Revue', elle ne contient que la cote. La classe 'NumeroRevue' : Elle correspond à un numéro de revue, avec également son sommaire. La classe 'Ouvrage' : Classe mère de 'Revue' et 'Livre', un ouvrage a un numéro et un titre. La classe 'Emprunt' : C'est une classe d'association entre 'Adherent' et 'Exemplaire'. Un emprunt correspond à un exemplaire de livre et un adhérent. Les cardinalités de cette association permettent de garder l'historique de tous les emprunts d'un adhérent. La classe 'Relance' : Permet d'effectuer une relance sur un emprunt rendu en retard. C'est la classe mère de 'Relance Mail' et 'Relance Courrier', deux types de relance en fonction de l'adhérent concerné. La classe 'Commande' : Un professeur peut effectuer une commande, cette classe contient donc un numéro de commande et une date. La classe 'LigneCommande' : Une commande est constituée de lignes de commande. Une ligne de commande correspond à un livre et une quantité, le tout commandé par un enseignant, c'est pour cela que cette classe est une classe d'association entre 'Enseignant' et 'Livre'. La classe 'Editeur' : Elle regroupe toutes les informations utiles sur un éditeur. Un éditeur peut proposer un à plusieurs livres, mais un livre n'est édité que par un éditeur. 3.2 Vue globale du système ~ 10 ~
3.3 Les classes ~ 11 ~
3.3 Les classes 3.3.1 La classe 'Adherent' 3.3.1.1 Attributs nom : Nom de l'adhérent prenom : Prénom de l'adhérent dureemaxemprunt: Durée maximale d'un emprunt 3.3.1.2 Méthodes Adherent (N: String; P : String): Constructeur redéfini de la classe CaculPenalite (Nbjours : Integer): Calcule la pénalité d'un adhérent Emprunter (cote : Integer) : Permet à un adhérent d'emprunter un livre Rendre (cote : Integer) : Permet à un adhérent de rendre un livre emprunté Rechercher (doc : Ouvrage) : Permet à un adhérent de rechercher un ouvrage (livre ou revue) 3.3.2 La classe 'Enseignant' 3.3.2.1 Attributs departement : Département dans lequel il enseigne email: Adresse électronique de l'enseignant 3.3.2.2 Méthodes Enseignant (Dep: String; email: String): Constructeur redéfini de la classe Commander (li : Livre, quantite : Integer) : Permet de commander un livre avec une certaine quantité d'exemplaires Consulter () : Permet de consulter les livres 3.3.3 La classe 'Etudiant' 3.3.3.1 Attributs adresse : Adresse de l'etudiant codepostal: Code postal de la ville dans laquelle l'étudiant se trouve ville : Ville de l'étudiant datefinpenalite: Date à laquelle un étudiant ne sera plus pénalisé 3.3.3.2 Méthodes Etudiant (Adr: String; CP : Integer; V: String): Constructeur redéfini la classe ~ 12 ~
3.3.4 La classe 'Livre' 3.3.4.1 Attributs prixunitaire : Prix d'achat du livre 3.3.4.2 Méthodes Livre( Titre : String, prix : Integer) : Constructeur redéfini de la classe GetLivre ():Livre : Renvoie toutes les informations du livre en cours SetPrixUnitaire(prix : Double) : Modifie le prix du livre 3.3.5 La classe 'Exemplaire' 3.3.5.1 Attributs disponible: Donne la disponibilité du livre ( disponible ou pas ) etatexemplaire : Etat de l'exemplaire (CommeNeuf, BonEtat, Abime, TresAbime) 3.3.5.2 Méthodes Exemplaire() : Constructeur de la classe. Detruire() : Supprime l'exemplaire courant de la bibliothèque SetEtatExemplaire(etat : String) : Modifie l'état d'exemplaire Reparer() : Change l'état de l'exemplaire à 'En réparation' GetDisponible():Boolean : Retourne la disponibilité de l'exemplaire SetDisponible(dispo : Boolean) : Modifie la disponibilité 3.3.6 La classe 'Document' 3.3.6.1 Attributs cote: Identifie de façon unique un document 3.3.6.2 Méthodes Document() : Constructeur de la classe 3.3.7 La classe 'NumeroRevue' 3.3.7.1 Attributs numerorevue : Identifie une revue dans la bibliothèque sommaire : Sommaire du contenu de la revue 3.3.7.2 Méthodes NumeroRevue() : Constructeur de la classe. 3.3.8 La classe 'Ouvrage' ~ 13 ~
3.3.8.1 Attributs titre: Titre de l'ouvrage (Livre ou Revue) 3.3.8.2 Méthodes Ouvrage() : Constructeur de la classe 3.3.9 La classe 'Emprunt' 3.3.9.1 Attributs dateemprunt : Date à laquelle l'emprunt a eu lieu dateretourprevu : Date calculée du retour prévu du livre dateeffective : Date de retour réelle de l'emprunt etatemprunt : Etat de l'emprunt (EnCours, Relance ou Perdu) 3.3.9.2 Méthodes Emprunt(ex : Exemplaire, adh : Adherent) : Constructeur redéfini de la classe Relancer () : Permet de relancer un adhérent GetEtatEmprunt():String : Retourne l'état d'un emprunt. SetEtatEmprunt (etat : String) : Permet de modifier l'état d'un emprunt. 3.3.10 La classe 'Relance' 3.3.10.1 Attributs daterelance : C'est la date à laquelle un adhérent est relancé 3.3.10.2 Méthodes Relance() : Constructeur de la classe 3.3.11 La classe 'Commande' 3.3.11.1 Attributs etatcommande : Renseigne sur la situation de la commande(encours, Proposee, Validee ou Recue) datecommande : Date à laquelle la commande a été passée 3.3.11.2 Méthodes Commande() : Constructeur de la classe Valider (): Elle permet de valider une commande AjouterProduit ( li: Livre; quantite: Integer) : Permet d'ajouter un livre à la commande Refuser() : Permet de refuser une commande Recevoir(): Permet de mettre à jour le système suite à la réception d'une commande Proposer() : Permet à un enseignant de proposer une commande ~ 14 ~
3.3.12 La classe 'LigneCommande' 3.3.12.1 Attributs nbexemplaires: Nombre de livres que l'on veut commander 3.3.12.2 Méthodes LigneCommande() : Constructeur de la classe GetLigneCommande():LigneCommande : Retourne la ligne courante 3.3.13 La classe 'Editeur' 3.3.13.1 Attributs nomediteur : nom de l'éditeur adresse : adresse de l'éditeur ville : Ville de l'éditeur CP : Code Postal de l'éditeur 3.3.13.2 Méthodes Editeur(nom : String) : Constructeur redéfini de la classe Editeur(nom : String, adr : String, cp : Integer, ville : String) : Constructeur redéfini de la classe 3.3.1.4 La classe 'Auteur' 3.3.14.1 Attributs nom: Nom de l'auteur 3.3.14.2 Méthodes Auteur(nom : String) : Constructeur redéfini de la classe ~ 15 ~
IV Diagrammes de séquence 4.1 Emprunt Ce diagramme de séquence représente l'enregistrement d'un emprunt de livre dans le systeme. La bibliothécaire, étant l'acteur qui interagi avec le systeme, enregistre l'emprunt qu'un adhérent effectue. Le systeme créé alors l'objet emprunt et modifie la disponibilité de l'exemplaire emprunté. 4.2 Relance Ce diagramme de séquence représente l'exécution par le système d'une relance lorsqu'un emprunt n'a pas été rendu deux jours après la date limite d'emprunt. C'est donc l'horloge qui déclenche l'envoi d'un message pour lancer la relance, le système parcourt les classes afin de déterminer le type d'adhérent et créera ainsi l'objet relance adéquat de l'emprunteur. ~ 16 ~
4.3 Rendre ~ 17 ~
Ce diagramme de séquence représente l'enregistrement d'un retour d'exemplaire emprunté. La bibliothécaire, étant l'acteur qui interagi avec le systeme, enregistre le retour de l'exemplaire. Le systeme vérifie si l'adhérent à rendu l'exemplaire avec du retard et calcul la pénalité cela doit être fait. Le systeme modifie ensuite la disponibilité de l'exemplaire, enregistre la date de retour réelle et modifie l'état de l'exemplaire. Puis si besoin est, si l'état de l'exemplaire est très abime il propose de l'envoyé en réparation ou de le détruire. ~ 18 ~
4.4 Commande Ce diagramme de séquence représente l'enregistrement d'une commande lancée par un enseignant. L enseignant crée ca commande et tant qu'il ne propose pas ca commande à la bibliothécaire il peut y rajouter des livres. Une foi ca commande proposé elle est soit validée par la bibliothécaire, et passe à l'état 'validee', soit refusé et passe à l'état 'refuse'. ~ 19 ~
4.5 Réception commande Ce diagramme de séquence décrit l'enregistrement de la réception d'une commande. La bibliothécaire reçoit la commande et le système récupère les quantités de livres commandé pour créer à chaque livre le nombre correspondant d'exemplaire. ~ 20 ~
V Diagrammes de machine d'état 5.1 Etat Emprunt L'emprunt a différents états comme décrit ci-dessous. L'état 'Rendu' est obligatoire dans notre système pour calculer la pénalité ainsi que pour garder un historique des exemplaires empruntés par un adhérent. ~ 21 ~
5.2 Etat Commande Les différents états de la commande sont présentés ci-après. L'état 'annule' n'apparait pas car nous avons supposé qu'une commande annulée est automatiquement supprimée du système d'information. L'historique des commandes ne comprend donc que des commandes qui ont été validé par la bibliothécaire. 5.3 Etat Exemplaire Diagramme de machine d'état mettant en évidence les différents états d'un exemplaire : sa disponibilité ainsi que son état de détérioration. On prend pour hypothèse qu'un exemplaire revient de réparation à l'état 'Comme neuf'. ~ 22 ~
VI Spécifications et invariants OCL ~ 23 ~
4.1. Invariants: 4.1.1 Classe Emprunt inv : dateretourprevu > DateEmprunt 4.1.2 Classe Etudiant inv: inherit Adherent redefine dureemaxemprunt dureemaxemprunt = 15 4.1.3 Classe Enseignant inv: inherit Adherent redefine dureemaxemprunt dureemaxemprunt = 30 4.1.4 Classe Relance inv: daterelance = monemprunt.dateretourprevu +2 4.1.5 Classe LigneCommande inv: nbexemplaire > 0 4.1.6 Classe Commande inv: Valider() implies meslignecommandes -> notempty() 4.1.5 Classe Livre inv: PrixUnitaire > 0 4.2.Spécifications 4.2.1 Context Adherent::Emprunter(cote : Integer): pre: if( this = Etudiant) then datefinpenalite < DateJour endif select(etatexemplaire = 'EnCours').size() <3 post: MonEmprunt.Exemplaire.GetDisponible() = false DateEmprunt = DateJour select(etatexemplaire='encours').size()= select(etatexemplaire='encours').size()@pre + 1 ~ 24 ~
4.2.2 Context Emprunt::Relancer(): pre: DateJour > dateretourprevu + 2 etatemprunt = 'EnCours' post: etatemprunt = 'Relance' 4.2.3 Context Adherent::Rendre(cote : Integer): pre: mesemprunts -> count(select(mesemprunts.getetat() ='EnCours') and select(mesexemplaires.cote = cote)) = 1 post :if (select(mesexemplaires.cote = cote).etatexemplaire = 'Tres Abime') then select(mesexemplaires.cote = cote).disponible = false else select(mesexemplaires.cote = cote).disponible = true end if 4.2.4 Context etudiant::calculpenalite(nb : integer) : pre: nb = datejour - monemprunt.dateretourprevu this = Etudiant post : if (datefinpenalite@pre > DateJour) datefinpenalite = datefinpenalite@pre + nbjour else datefinpenalite = datejour + nbjour endif 4.2.5 Context Exemplaire::Reparer(): pre : etatexemplaire ='En Reparation' disponible = false post : etatexemplaire = 'Comme Neuf' disponible = true 4.2.6 Context Exemplaire::Detruire(): ~ 25 ~
pre : etatexemplaire ='Tres Abime' ou etatexemplaire ='Perdu' post : mesexemplaires.count() = mesexemplaires.count()@pre - 1 4.2.7 Context Enseignent::Commander(li : Livre, quantite : entier): pre : quantite > 0 post : etatcommande = 'Propose' 4.2.8 Context Commande::Recevoir(): pre : etatcommande= 'Valide' post : meslignecommandes -> forall(ligne Ligne.mesLigneCommandes.mesExemplaires.size()= Ligne.mesLIgneCommandes.mesExemplaire.size()@pre + nbexemplaires) etatcommande = 'Reçu' 4.2.9 Context Commande::Valider(): pre : etatcommande='propose' post : etatcommande='valide' 4.2.10 Context Commande::Refuser(): pre : etatcommande='propose' post : etatcommande='refuse' ~ 26 ~