Devoir 2: les collections

À rendre avant le 22 mai

Sources pour le devoir

Dans ce devoir, on vous demande d'implémenter un certain nombre de classes pour gérer un catalogue et des factures. (et on vous conseille très fortement de les tester avec JUnit.)

Dans chacune de ces classes, nous vous demandons d'implémenter un certain nombre de méthodes. les tests utilisés pour la notation vérifieront si les méthodes des classes que vous avez écrites fonctionnent correctement.

La classe Produit

Complétez la classe devoir.collections.Produit. Comme on veut que les identifiants soient uniques (au moins dans un catalogue donné), il est raisonnable de poser la règle suivante (que vous implémenterez) :

Remarque : dans un "vrai" programme, j'aurais plutôt tendance, pour ce cas de figure, à utiliser l'égalité par défaut (deux objets sont égaux ssi ils ont la même adresse), mais je voulais vous faire écrire hashCode et equals. Par ailleurs, dans votre programme, deux produits avec le même identifiant, mais par exemple des désignations différentes seront donc considérés comme égaux par equals ; ça n'est pas forcément une très bonne idée, mais c'est effectivement ce qui est demandé ici.

La classe Catalogue

Complétez la classe devoir.collections.Catalogue.

Elle doit impérativement avoir un constructeur par défaut, sinon tous les tests échoueront.

Elle comporte beaucoup de méthodes. Écrivez-les et testez-les une par une, dans l'ordre dans lequel elles apparaissent dans l'interface.

La première méthode (creerProduit) sera beaucoup utilisée par les tests, car elle servira à créer les produits. C'est ce qu'on appelle une factory method (une méthode servant à créer un nouvel objet).

NOTE importante: Deux objets catalogues distincts doivent permettre de créer des produits ayant le même identifiant. L'unicité ne vaut que dans le cadre d'un catalogue. J'utiliserai cette caractéristique quand je testerai vos méthodes equals et hashCode.

Quelques idées de tests

Je vous laisse écrire vos jeux de tests... Néanmoins, quelques pistes:

Si vous avez comme erreur "null" c'est qu'un des tests a levé une exception quelconque, avant même qu'un assert échoue.