9/05/06  

JAVA  TP n° 13 : Les interfaces …

 

Contexte : Cas « Toner Express »

 

Pour gérer les informations concernant les types de cartouches neuves vendues par l'entreprise « Toner Express », Monsieur Clermont, responsable technique, utilise une base de données dont le schéma est le suivant :

 

CARTOUCHE (RéfCartouche, DesCartouche, PrixCartoucheNeuve)

IMPRIMANTE (RéfImprimante, DesImprimante, CodeType#)

TYPE(CodeType, LibelléType)

ACCEPTER(RéfImprimante#, RéfCartouche#)

 

Un attribut (ou un ensemble d’attributs) souligné est une clé primaire. Un attribut dont le nom est suivi du symbole # (croisillon) est une clé étrangère.

 

·         La table CARTOUCHE renseigne sur tous les modèles de cartouches vendues par Toner Express.

·         La table IMPRIMANTE renseigne sur tous les modèles d'imprimantes existants.

·         La table TYPE contient trois lignes (imprimantes matricielles, laser et à jet d'encre).

·         La table ACCEPTER permet de connaître toutes les imprimantes acceptant un modèle de cartouche et, réciproquement, toutes les cartouches compatibles avec un modèle d’imprimante.

 

Monsieur Clermont souhaite extraire des données de cette base.

 

Un diagramme de classes d’analyse a été conçu :

 

 

 

Dans le cadre d'une politique de développement "orienté objets", il a été décidé de créer une application Objets qui doit permettre de gérer simplement l'ensemble des cartouches compatibles avec un modèle d’imprimante.

Voici le diagramme de classes de conception qui a été conçu.

 

 


1) Saisir le début de programme ci-dessous

 

public class TestCartouche {

public static void main(String[] args) {

   try{

    TypeImprimante t1 = new TypeImprimante('L', "Laser");

    Cartouche c1 = new Cartouche("P45-HP-LJ2","Cartouche toner", 54.23);

    Cartouche c2 = new Cartouche("IC-WCP45-3","Cartouche Ink-HP", 32.45);

    Imprimante imp1 = new Imprimante("HPLJ3", t1,"Hewlett Packard Laserjet 3", new TabCartouches());

    Imprimante imp2 = new Imprimante("HPDJ560C",t2,"Hewlett Packard Deskjet 560C",new TabCartouches());

 

…/…   

 

2) Téléchargez le code des classes TypeImprimante et Cartouche à l’adresse suivante : http://pchochois.free.fr/data/  puis créez les 2 classes.

 

 

3) L’interface IcollCartouches présente les services fournis par un ensemble de cartouches.

Codez l’interface IcollCartouches selon les indications contenues dans le diagramme UML.

-          La méthode addCartouche permet d’ajouter une cartouche à un ensemble de cartouches

-          La méthode getNbCartouches fournit le nombre de cartouches de l’ensemble

-          La méthode getCartouche fournit la cartouche placée à la position reçue en paramètre.

 

 

4) Créez la classe Imprimante en complétant le code ci-dessous et en tenant compte des indications portées sur le diagramme de classes.

 

public class Imprimante {

private String refImprimante;

private TypeImprimante typeImprimante;

private String desImprimante;

private ICollCartouches lCart;

 

public Imprimante(String refImprimante, TypeImprimante typeImprimante, String desImprimante, ICollCartouches lCart) {

   this.refImprimante = refImprimante;

   this.typeImprimante = typeImprimante;

   this.desImprimante = desImprimante;

   this.lCart = lCart;

}

…/…

 

 

5) Codez la classe TabCartouche qui implémente l’interface ICollCartouches.

 

Remarques :

- Le constructeur de TabCartouche instancie un tableau de cartouches de 5 éléments

- Cette classe dispose d’une méthode privée dernierElement qui retourne l’indice de la dernière cartouche du tableau

 

 

6) Complétez votre classe TestCartouche afin de :

-          Instancier un objet TabCartouches qui sera de type ICollCartouches

-          Ajouter des cartouches à l’objet instancié

-          Indiquer que l’ensemble des cartouches créées représente les cartouches compatibles de l’imprimante imp1 (Utilisez la méthode setLCart)

-          Afficher à l’écran le nombre de cartouches compatibles pour les 2 imprimantes imp1 et imp2

 

Exemple de résultat à obtenir :

Pour l'imprimante HPLJ3 - Hewlett Packard Laserjet 3,il existe 2 cartouches compatibles !

Pour l'imprimante HPDJ560C - Hewlett Packard Deskjet 560C,il existe 0 cartouches compatibles !

 


 

7) Evolution de l’application

 

Avec le développement du marché des cartouches compatibles, Monsieur Clermont s’est aperçu qu’un tableau de 5 cartouches compatibles par imprimante est insuffisant. Plutôt que d’augmenter la taille du tableau, il décide d’utiliser des collections (ArrayList). Vous êtes chargés d’effectuer cette maintenance applicative.

 

Grâce à l’utilisation d’une interface, aucune modification n’est à effectuer sur les classes existantes. Il vous suffit d’ajouter une classe CollCartouches tel qu’indiqué dans le diagramme ci-dessous.

La règle d’ouverture/fermeture de Bertrand Meyer a donc été respectée (ouvert aux extensions/fermé aux modifications)

 

Modifiez votre classe TestCartouches pour vérifier le fonctionnement.

 

 

 

 

8) Modifier l’interface IcollCartouches pour ajouter une méthode premierElement qui retourne le premier élément de l’ensemble des cartouches.

 

 

 

 

 

S’il vous reste du temps…

 

Terminez le TP précedent : jeu de loto

Reprenez le travail fait pendant les vacances de printemps (Correction en ligne) et utilisez un dictionnaire au lieu d‘une collection.