TP Programmation par objets - Java, Licence Informatique, Sept-Déc 2003, Université de Montpellier II

Enseignant resp : Jacques Ferber,ferber@lirmm.fr

TP6 - Héritage / UML / Collections

 

L'objectif de ce TP est de réaliser un exemple plus complet et global, en partant d'un diagramme UML jusqu'à la réalisation finale en Java. L'exemple ne contient pas de difficulté particulière, si ce n'est qu'il faut bien comprendre l'héritage et comment on passe d'une représentation UML à un code Java.

Introduction

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, d'une classe Adherent et d'un ensemble de classes de Document qui présentent les caractéristiques suivantes:

Cet ensemble de critères a donné lieu à la réalisation du diagramme UML suivant:

Question 1:

Ecrire les classes Java correspondant à ce diagramme. Définir des méthodes toString permettant de visualiser ces objets convenablement.

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.Vector.

Pour tester ces classes, ajouter dans la classe Bibliotheque, une méthode initiale de la manière suivante:

class Bibliotheque {
	...
	public static void main(String[] args){
        Bibliotheque bibli = new Bibliotheque();
        Adherent ad = new Adherent("Jean", "Dupond");
        bibli.ajouterAdherent(ad);
        ad = new Adherent("Marie","Dubois");
        bibli.ajouterAdherent(ad);
		
        int n=4;
        Document[] docs = new Document[n];
        docs[0] = new Livre("Misérables","Hugo V.");
        docs[1] = new Journal("Dr Dobbs",10,2003); // 10 représente le mois de septembre
        docs[2] = new BD("Thorgal: La galère noire","Van Hamme", "Rosinsky");
        docs[3] = new Livre("Systèmes multi-agents","Ferber J.");
        for (int i=0;i<n;i++ ){
             System.out.println("document "+d[i]);
             bibli.ajouterDocument(d[i]);
		}
	}
}

Question 2:

Ecrire le code des méthodes permettant de gérer l'emprunt et le rendu d'un livre. Dans la classe Adhérent, ces méthodes sont définies ainsi:

void emprunter(Livre l){...}

void rendre(Livre l){...}

Attention: un livre ne peut être emprunté que s'il n'est pas déjà emprunté par un adhérent.

Question 4:

Dans la classe Bibliothèque, donnez le code de la méthode

Document[] chercherDocument(String titre)

qui retourne, sous la forme d'un tableau de document, tous les documents dont le titre contient la chaîne <titre>. La taille du tableau de documents correspond au nombre de documents trouvés.

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.

Question 5:

Donnez l'ensemble des méthodes permettant à la bibliothèque de lister l'ensemble de ses documents avec leurs caractéristiques (c'est à dire d'imprimer dans le flux de sortie les attributs des documents) et, lorsqu'il s'agit d'un livre, de lister ses adhérents éventuels.

Pour lancer ce listing il suffira d'envoyer un message listerDocuments() à la bibliothèque:

   Bibliotheque bibli;
   ...
   bibli.listerDocuments();