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 Point dans un tableau supposé ordonné. On pourra utiliser la méthode Arrays.sort
pour trier le tableau de points selon un ordre (par exemple, l'ordre lexicographique). Par contre, il est INTERDIT d'utiliser la méthode Arrays.binarySearch
vue en cours et il faudra ré-implanter cette méthode. On rappelle pour cela le principe de la recherche dichotomique.
Je cherche l'indice de l'élément e
dans t
du début à la fin :
- Je compare e à l'élément qui se trouve au milieu
t[milieu]
- Si
t[milieu]==e
, j'ai terminé et je renvoie l'indice milieu
- Si
t[milieu]<e
, je cherche l'élément e
entre le début et le milieu
- Si
t[milieu]>e
, je cherche l'élément e
entre le milieu
et la fin - Je recommence en 1.
Cette page n'a encore aucun contenu. Enrichissez miageprojet2 en y contribuant vous aussi.