Livres
Réaliser une classe Livre
selon les spécifications suivantes. Un livre a un auteur et un titre qui le distinguent des autres. C'est-à-dire qu'on ne peut pas modifier ni l'auteur, ni le titre. En plus de cela, un livre possède un prix de vente qui peut être affecté à tout moment et modifié si besoin est, mais doit nécessairement être positif.
- Proposer une implantation en Java ;
- Attention au(x) constructeur(s), aux accesseurs et aux modificateurs.
Identificateur
On voudrait de plus que chaque livre ait un identificateur unique (une chaîne de caractères). Voici les règles de construction de cet identificateur:
Les trois premiers caractères correspondent aux trois premiers caractères du nom de l'auteur. La suite est un nombre entier unique (à générer automatiquement).
- Comment faire pour générer un nombre unique pour chaque instance de la classe Livre ? Proposer une solution pour implanter l'identificateur.
Bibliothèque
On veut maintenant créer la notion de bibliothèque. On propose donc de créer une classe Bibliothèque
. Pour résumé, une bibliothèque possède une collection de livres.
La classe doit proposer les opérations suivantes :
- ajouter un livre : le livre est ajouté à la collection,
- archiver un livre : le livre retiré de la collection courante et mis aux archives (il n'est pas perdu),
- afficher (sur la console) les livres de la collection triés selon trois ordres possibles :
- par ordre croissant ou décroissant de l'ordre lexicographique du nom de l'auteur,
- par ordre croissant de l'ordre lexicographique du titre des livres,
- par ordre croissant ou décroissant du prix de vente des livres.
Il faudra donc implanter trois classes Comparator sur les livres pour chacun des ordres à proposer. Attention, on ne veut pas en faire six ! C'est-à-dire qu'on ne veut pas différencier les tris croissants et les tris décroissants par une classe séparée mais par un simple énuméré (ou booléen)!
Bonus: Unification
Dans l'exercice précédent, on s'aperçoit que l'inversion de l'ordre est un mécanisme générique à part entière. Sauriez-vous proposer un mécanisme générique qui inverse un ordre donné.
Il y a au moins deux façons pour faire :
- Par héritage en construisant une classe
OrdreCroissantDecroissant
abstraite. - Par composition, en utilisant le mécanisme d'unification vu en cours en définissant une classe concrète
OrdreCroissantDecroissant
Implanter en Java les deux solutions. Laquelle semble la moins contraignante ?
Les points
Définitions
Sur la base du cours, implanter en java une classe Point.
Réaliser une classe OrdreLexicographique
qui permet d'ordonner les points selon un ordre lexicographique:
<x1,y1> <= <x2,y2> si x1 <= x2 ou si x1 == x2 && y1 <= y2.
Réaliser une classe OrdreProduit
qui permet d'ordonner les points selon un ordre produit :
<x1,y1> <= <x2,y2> si x1 <= x2 et y1 <= y2.
Recherche
Proposer une méthode rechercheDichotomique
qui permet de trouver un Livre dans une bibliothèque supposée ordonnée. Attention, il faut que le critère de recherche soit le même que celui qui a servi à trier la collection. On vous demande donc d'améliorer votre code du TP précédent pour réaliser l'équivalent de la méthode Collections.binarySearch qui prend en paramètre un objet de type Comparator pour indiquer l'ordre qui a été utilisé pour le tri.
En pratique, on ajoutera des méthodes rechercherParNom
, rechercherParTitre
, rechercherParPrix
dans la classe Bibliothèque
, chacune de ces méthodes utilisera le bon ordre pour faire la recherche.