DESS TNI TD Java #1

publicité
DESS TNI
TD Java #1
[email protected], [email protected]
1/10/2003
Résumé
Les objectifs de ce TD sont :
Réalisation d'un programme permettant de gérer une petite bibliothèque municipale.
Rappel sur les interfaces en Java
Etude des Collections en Java
1
Introduction
Fig.
1 Diagramme UML modélisant le problème de la bibliothèque municipale.
On désire réaliser un programme permettant de gérer une petite bibliothèque
municipale. Pour cela on a analysé qu'on avait besoin d'une classe Bibliotheque,
1
d'une classe Adherent et d'un ensemble de classes de
les caractéristiques suivantes :
qui présentent
Document
1. Les adhérents ont un prénom (chaîne de caractère) et un nom (chaîne
aussi).
2. La bibliothèque comprend un ensemble de documents et un ensemble
d'adhérents
3. Ces documents sont soit des journaux, soit des volumes.
4. Les volumes sont soit des dictionnaires soit des livres, soit des BD.
5. Les documents sont caractérisés par un titre (chaîne de caractères).
6. Les volumes ont en plus un auteur (chaîne). Les BD ont en plus un nom
de dessinateur (chaîne).
7. Les journaux ont (outre les caractéristiques de document) une date de
parution (une date, voir dénition dans cours).
8. Seuls les livres sont empruntables.
9. Les adhérents peuvent emprunter des livres (et uniquement des livres) et
on doit pouvoir savoir à tout moment quels sont les livres empruntés par
un adhérent.
1.1
Exercice 1
1. Ecrire les classes Java correspondant à ce diagramme.
2. Dénir des méthodes toString permettant de visualiser ces objets convenablement.
3. Ecrire les méthodes ajouterAdherent et ajouterDocument dans Bibliotheque.
Les relations multiples entre les entités doivent être représentées comme des
attributs de type java.util.Collection. On assumera que la description Javadoc
de cette interface est la suivante :
java.util
Interface Collection
All Known Subinterfaces:
List, Set, SortedSet
All Known Implementing Classes:
ArrayList, HashSet, LinkedHashSet, LinkedList, TreeSet
Pour tester ces classes, ajouter dans la classe
initiale de la manière suivante :
...
class Bibliotheque {
2
, une méthode
Bibliotheque
...
public static void main(String[] args){
Bibliotheque bibli = new Bibliotheque();
Adherent ad = new Adherent("Jean", "Dupond",101);
bibli.ajouterAdherent(ad);
ad = new Adherent("Marie","Dubois");
bibli.ajouterAdherent(ad);
}
1.2
}
/* La classe LinkedList du package java.util implemente
* l interface Collection, on peut donc instantier la variable
* docs avec cette classe.
*/
Collection docs = new LinkedList();
docs.add(new Livre("Misérables","Hugo V."));
docs.add(new Journal("Dr Dobbs","september",2003));
docs.add(new BD("Thorgal: La galère noire","Van Hamme", "Rosinsky"));
docs.add(new Livre("Systèmes multi-agents","Ferber J."));
for (Iterator iterator = docs.iterator() ; iterator.hasNext();)
{
Document document = (Document) iterator.next() ;
System.out.println("document "+document);
bibli.ajouterDocument(document);
}
Exercice 2
Ecrire le code des méthodes permettant de gérer l'emprunt et le rendu d'un
document. Dans la classe Adhérent, ces méthodes sont dénies ainsi :
void emprunter(Document doc){...}
void rendre(Document doc){...}
Attention : un document ne peut être emprunté que si 1) il est empruntable,
2) s'il n'est pas déjà emprunté par un adhérent.
1.3
Exercice 3
Dans la classe Bibliothèque, donnez le code de la méthode :
Collection chercherDocument(String titre)
qui retourne une collection contenant tous les documents dont le titre contient
la chaîne <titre>.
3
Note : il existe une méthode indexOf(String str) qui retourne l'index de la
première occurrence de la sous-chaîne str dans la chaîne courante, et -1 si str
n'est pas une sous-chaîne de la chaîne courante.
2
Collections :
On désire écrire des procédures de parcours génériques de collections. Pour
cela on s'inspirera de Smalltalk. Dans ce langage, toutes les collections disposent
d'une méthode select qui prend en argument un 'bloc', c'est à dire en fait une
fonction ayant un seul argument. L'objet répondant au critère déni dans le
'bloc' est retourné par la méthode select.
Pour obtenir la même fonctionnalité en Java, il faut écrire une méthode statique
dans une classe utilitaire :
class Utils {
public static Object select(Collection coll, Selector sel){...}
}
La méthode select prend deux arguments : une collection et un 'Selector',
c'est à dire un objet implémentant l'interface Selector que l'on dénit ainsi :
public interface Selector {
boolean test(Object o);
}
Question 1 : Donnez le code de la méthode select.
Question 2 : Ecrire une partie de programme qui prend une collection de
Compte et qui retourne le premier compte non vide.
Question 3 : Dénir la méthode selectList qui retourne non plus le premier
élément sélectionné, mais qui retourne la liste de tous les éléments sélectionnés.
public static List selectList(Collection coll, Selector sel){ ... }
4
Téléchargement