UNIVERSITE JOSEPH FOURIER Sciences, Technologie, Mdecine Informatique & Mathmatiques Appliques UNIVERSITE JOSEPH FOURIER Sciences, Technologie, Mdecine Informatique & Mathmatiques Appliques UNIVERSITE JOSEPH FOURIER Sciences, Technologie, Mdecine Grenoble 1 IMA
Master Professionnel Comptence Complmentaire en Informatique Programmation par Objets Application de gestion dun vido club. Philippe.genoud@imag.fr
Un vido club qui propose des films soit sur support DVD soit sur support cassette VHS veut informatiser son systme de gestion des prts. Aprs une premire analyse une bauche dapplication Java a t labore, le diagramme de classes qui a t conu vous est fourni en annexe 1.
Les classes suivantes sont dfinies :
La classe Ralisateur qui reprsente un ralisateur de films identifi par son nom et prnom (on suppose quil nexiste pas deux ralisateurs de mme nom et prnom)
La classe Film qui reprsente un film, identifi par son titre et son ralisateur (il peut exister deux films de mme titre mais alors les ralisateurs sont diffrents). Si le film est une nouveaut son tarif de location sera plus lev.
La classe Article qui reprsente les diffrents articles que le magasin propose la location (DVD et cassettes VHS). Chaque article est identifi par un numro dinventaire unique.
La classe Article possde deux sous classes :
Dvd qui reprsente les articles de type DVD. Un Dvd possde les attributs suivants : lindication si le DVD contient des bonus ou non (boolen) le nombre de disques (entier)
Vhs qui reprsente les articles de type cassette VHS. Une cassette Vhs possde lattribut suivant : le type de codage vido (PAL, SECAM, NTSC). Les valeurs possibles pour ce codage sont dfinies par lnumration TypeVHS.
La classe Adherent qui reprsente un adhrent du vido club. Chaque adhrent possde les attributs suivants : un numro dadhrent qui lidentifie de manire unique, un nom un prnom une adresse
Les associations (relations) qui lient ces diffrentes classes sont les suivantes :
un ralisateur sont associs les films quil a raliss. La cardinalit de cette association est 0..*, ce qui signifie quun ralisateur peut exister dans le systme sans que des films lui soient forcment associs et quil ny a pas de limite au nombre de films qui peuvent lui tre associs. un film est associ un ralisateur et un seul. un film sont associs les articles qui lui correspondent. La cardinalit de cette association est 0..*, ce qui signifie quun film peut exister dans le systme sans que des articles lui soient forcment associs, et quil ny a pas de limite au nombre darticles qui peuvent lui tre associs. un article est associ un film et un seul. un article peut tre associ un adhrent du vido club. Cette association indique que larticle a t emprunt par cet adhrent. La cardinalit de cette association est 0..1. Larticle est disponible si il nest pas associ un emprunteur, et un article ne peut avoir au plus quun emprunteur. Page 2 un adhrent sont associs les articles quil a emprunts. La cardinalit de cette association est 0..*, ce qui signifie que (pour le moment) le systme nimpose pas de limite au nombre darticles quun adhrent peut emprunter.
Patrick, un programmeur java, a commenc le dveloppement de cette application, mais il est tomb malade et na pu achever le codage. On vous demande de reprendre son travail.
Question 1 : Ecrivez le code des classes Articles et Dvd. Les mthodes et constructeurs qui apparaissent sur le diagramme de classes sont les suivants :
Le constructeur Article(Film f) cre un nouvel article pour le film f. Le numro dinventaire de larticle est fix automatiquement en appliquant la politique suivante: les articles sont numrots de 1 n, n tant le nombre darticles qui ont t crs. Lorsque un nouvel article est cr, le numro qui lui est attribu est n+1.
Les accesseurs getNumeroInventaire() et getFilm()retournent respectivement le numro dinventaire de larticle et le film associ.
Laccesseur getEmprunteur() retourne ladhrent du vido club qui a emprunt le film, ou null si le film na pas t emprunt.
La mthode void setEmprunteur(Adherent emprunteur) permet de dfinir lemprunteur de larticle. On passera la valeur null cette mthode lorsque larticle est rendu au vido club.
La mthode String getDescription(boolean complete) retourne un chane de caractres dcrivant larticle. Si le paramtre complete vaut true, la forme de cette chane est la suivante : Numro dinventaire : 12345 Titre du film : Million Dollar Baby Ralisateur : Clint Eastwood Nouveaut : non Disponible ou Emprunt par le membre n : 14
Si le paramtre complete vaut true, le titre du film et le nom du ralisateur ne sont pas inclus dans la chane retourne.
La mthode double tarifLocation() retourne le tarif de location de larticle. Le tarif de location dpend de la nature de larticle et si il sagit ou non dune nouveaut. Pour une cassette VHS, le tarif est de 1,50 major de 0,50 si le film est une nouveaut. Pour un DVD, le tarif de base est de 2 . Ce tarif est major de 0,50 si le DVD comporte des bonus ou si il y a plusieurs disques et de 0,75 si il sagit dune nouveaut.
Le constructeur Dvd(Film f, int nbDisques, boolean bonus) cre un nouvel article de type DVD. f est le film associ ce Dvd, nbdisques le nombre de disques que contient le coffret, bonus indique si le Dvd contient des bonus (true) ou non (false).
Les accesseurs hasBonus() et getNbDisques()retournent respectivement les valeurs des attributs bonus et nbDisques.
La mthode String toString() de la classe Dvd retourne un chane de caractres dcrivant le Dvd. La forme de cette chane est la suivante :
DVD (1 disque avec bonus) Numro dinventaire : 12345 Titre du film : Million Dollar Baby Ralisateur : Clint Eastwood Nouveaut : non Disponible ou Emprunt par le membre n : 14
La mthode double tarifLocation() de la classe Dvd retourne le tarif de location du Dvd.
Page 3 Question 2 : Ecrire le code de la classe Film (voir annexe 2).
Question 3 : Pour grer lensemble des articles du vido club il est dcid dcrire une classe Inventaire qui propose les mthodes suivantes :
Article findArticle(int noInventaire) qui retourne larticle de numro dinventaire noInventaire si le vido club possde un article avec ce numro, null si il nexiste pas darticle ce numro.
int nouveauDvd(Film f, int nbDisques, boolean bonus) qui permet de crer un nouvel article de type Dvd et de lajouter linventaire. Cette mthode retourne le numro dinventaire de larticle cre.
int nouveauVhs(Film f, TypeVhs type) qui permet de crer un nouvel article de type Dvd et de lajouter linventaire. Cette mthode retourne le numro dinventaire de larticle cre.
void supprimerArticle(int noInventaire) qui permet de retirer de linventaire larticle de numro noInventaire. Si il nexiste pas darticle ce numro la mthode est sans effet. Si larticle a t emprunt, il ne peut tre retir de linventaire. Dans ce cas une exception de type ArticleException avec le message article emprunt est lance. La classe ArticleException est une classe dexceptions qui a t dveloppe pour ce projet. Sa javadoc vous est fournie en annexe 3.
a) Quelle structure de donnes proposez-vous dutiliser pour stocker les articles de linventaire ? Justifiez votre rponse.
b) Quelle modification faut-il apporter la classe Film pour permettre la suppression dun article ? Ecrivez le code ajouter la classe Film.
c) Ecrivez le code de la classe Inventaire.
d) Ecrivez un petit programme qui permet de tester la classe Inventaire. Ce programme excute les traitements suivants :
Creation dun inventaire (vide au dpart) Cration dun objet ralisateur r Cration dun objet film f associ r Ajout linventaire dun premier dvd associ f, no1 son numro dinventaire Ajout linventaire dun second dvd asoci f, no2 son numro dinventaire Ajout linventaire dune cassette vhs associe f, no3 son numro dinventaire Cration dun adhrent a. Emprunt du dvd no1 par a
Affichage sur la console de la liste des articles associs f
Suppression du second dvd (no2) de linventaire Suppression premier dvd (no1) de linventaire. Cette suppression doit chouer car le dvd est emprunt.
Affichage sur la console de la liste des articles associs f Page 4
Annexe 1 Diagramme de classes de lapplication VidoClub Page 5 Annexe 2 : spcification des constructeurs et mthodes de la classe Film
/** * Cration d'un film * @param titre le titre du film * @param r le ralsateur du film */ public Film (String titre, Realisateur r)
/** * @return le titre du film */ public String getTitre ()
/** * @return le ralisateur du film */ public Realisateur getRealisateur ()
/** * fixe la valeur de l'attribut nouveaut * @param val true si le film est une nouveaut, false sinon */ public void setNouveaute(boolean val)
/** * @return true si le film est une nouveaut */ public boolean isNouveaute()
/** * cration d'un nouveau dvd et ajout de celui-ci la liste des * articles de ce film * @param nbdisques nombre de disques du DVD * @param bonus * @return l'objet Dvd cre */ public Dvd nouveauDvd (int nbdisques, boolean bonus)
/** * cration d'une nouvelle cassette vhs et ajout de celle-ci la liste * des articles de ce film * @param type le type de codage vido * @return l'objet vhs cre */ public Vhs nouveauVhs (TypeVHS type)
/** * nombre d'articles pour ce film * @return le nombre d'articles */ public int getNbArticles()
/** * recherche parmi les articles pour ce film un Dvd disponible * @return un dvd disponible (non emprunt) ou null si aucun */ public Dvd dvdDisponible ()
/** * recherche parmi les articles pour ce film un Dvd disponible * @return un dvd disponible (non emprunt) ou null si aucun */ public Vhs vhsDisponible ()
@Override public String toString()
/** * renvoie un iterateur sur les articles associs ce Film * @return iterateur sur les articles du film */ public Iterator<Article> iterator()