9/05/06
JAVA TP n° 13 : Les interfaces …
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.