Vous êtes sur la page 1sur 2

Programmation Java - Master TTT

10 fvrier 2011 - 2 heures e


Les documents hors livres sont autoriss. e On prendra soin de bien prciser les visibilits des membres des classes, et de justier les e e rponses. e Exercice n 1 On veut grer une liste douvrages scientiques. Ces ouvrages sont de deux types : les livres e et les revues. Un livre est caractris par son titre et ses auteurs, alors quune revue est e e caractrise par son titre et son numro. De plus, chaque ouvrage a un identiant (ISBN) e e e cod par un entier long. e 1. Ecrire une interface Ouvrage qui dclare une mthode getTitre() et une mthode e e e getISBN() qui retourneront respectivement le titre et lidentiant de louvrage. 2. Ecrire une classe Revue qui implmente Ouvrage et telle que : e chaque objet Revue reprsentera le numro dune revue ; e e le constructeur de la classe Revue a trois arguments, une cha de caract`res (le titre), ne e un entier (le numro) et un entier long (lidentiant) ; e la classe Revue a une mthode getNumero() qui retourne un entier indiquant le numro e e de la revue ; si on ache un objet Revue avec System.out.println, on obtient son titre, suivi de son numro ; e la classe Revue a une mthode statique createRevue sans argument qui demande ` e a lutilisateur dentrer un titre, un numro et un ISBN et qui retourne un objet Revue e correspondant ` ces informations. a 3. On suppose quil existe de mme une classe Livre qui implmente Ouvrage et quon ne e e demande pas dcrire. Pensez-vous quil soit possible de mettre en commun les mthodes e e de la classe Revue et de la classe Livre qui sont identiques ? Comment faire ? Quelles sont ces mthodes ? e 4. La liste douvrages est sauvegarde dans un chier texte dans lequel chaque ouvrage est e dcrit de la mani`re suivante : e e une premi`re ligne contient soit L sil sagit dun livre, soit R sil sagit dune revue ; e la deuxi`me ligne contient lidentiant de louvrage, e la troisi`me contient son titre, e la ou les ligne(s) suivante(s) contiennent soit le numro de la revue, soit la liste des e auteurs (un auteur par ligne) ; la derni`re ligne, avant de passer ` louvrage suivant contient uniquement le symbole e a #. On suppose que la classe Livre poss`de un constructeur dont les arguments sont e une cha de caract`res (le titre), une liste List<String> contenant le nom des aune e teurs et un entier long (lidentiant). Ecrire une mthode statique chargeOuvrages qui e prend en argument le nom dun chier et retourne la liste des ouvrages dcrits dans e ce chier. Si le chier nest pas au bon format, cette mthode lancera une exception e FichierOuvrageException. 5. Dnir le type dexception FichierOuvrageException. e

Exercice n 2 1. On suppose quon veut crire une classe TriListes qui contient des mthodes pour e e manipuler des listes dentiers. Ecrire une mthode estTriee qui prend en argument e une liste dentiers (List<Integer> dnie dans le package java.util), et qui retourne e vrai si les lments de la liste sont tris par ordre croissant (on pourra avoir deux fois ee e le mme lment dans la liste). e ee 2. La mthode estTriee peut-elle tre statique ? e e 3. Ecrire une mthode fusion qui prend en argument deux listes tries et retourne une e e liste (LinkedList<Integer>) contenant les lments tris des deux listes : ee e fusion([1; 5; 6; 9; 12], [2; 7; 9; 11]) [1; 2; 5; 6; 7; 9; 9; 11; 12]. 4. Ecrire une mthode split qui prend en argument trois listes : une liste l quelconque, e et deux listes r1 et r2 vides. La mthode split remplit la liste r1 avec les lments de l e ee placs en position paire (0, 2, etc.) et r2 avec les lments de l placs en position impaire e ee e (1, 3, etc.) : split(l = [4; 2; 9; 1; 4; 7; 3; 8], r1 = [], r2 = []) r1 = [4; 9; 4; 3], r2 = [2; 1; 7; 8]. 5. Pour trier une liste, on consid`re lalgorithme suivant : e si la liste est de longueur 1, elle est trie ; e sinon, on spare la liste en deux listes (split), on trie rcursivement chacune des deux e e listes, puis on les fusionne. Ecrire la mthode tri qui prend une liste en argument et retourne la liste trie qui e e contient les mmes valeurs : e tri([4; 2; 9; 1; 4; 7; 3; 8]) [1; 2; 3; 4; 4; 7; 8; 9]. 6. Maintenant, on veut que la classe TriListes tende la classe LinkedList<Integer>. e a) Ecrire lentte de la classe TriListes. e b) On veut modier la mthode estTriee de faon ` ce quon puisse crire l.estTriee(), e c a e si l est un objet de type TriListes. Expliquer ce quil faut faire comme modications par rapport ` la version de estTriee du 1. a