Les collections

De $1

Version de 09:41, 29 Nov 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

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ée 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 que 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é !

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 : 

  1. Par héritage en construisant une classe OrdreCroissantDecroissant abstraite.
  2. Par composition, en utilisant le mécanisme d'unification vue en cours en définissant une classe concrète OrdreCroissantDecroissant

Implanter en Java les deux solutions.

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 :

  1. Je compare e à l'élément qui se trouve au milieu t[milieu]  
  2. Si t[milieu]==e, j'ai terminé et je renvoie l'indice milieu
  3. Si t[milieu]<e, je cherche l'élément e entre le début et le milieu  
  4. Si t[milieu]>e, je cherche l'élément e entre le milieu et la fin
  5. Je recommence en 1.