Exercice 2 : on se familiarise un peu mieux avec
les concepts objet du langage
Travail à effectuer
Cette fois-ci vous allez écrire une petite application Java
necessitant une analyse un peu plus poussée que celle du TP numéro
1.
Vous réaliserez la maquette d'un outil permettant de passer des
commandes pour des fournitures de bureau. Ces articles pouront être
de types divers, représentés sous la forme d'objets dans
l'application.
Caractéristiques de l'application :
-
Les articles sont de type stylo ou ramette de papier,
-
Un stylo est décrit par sa marque, sa référence, son
prix unitaire et sa couleur,
-
Une ramette de papier est décrite par sa marque, sa référence,
son prix unitaire et le grammage du papier (en grammes par métre
carré),
-
Une commande associe un nom de client à une liste de
couples (article, quantité commandée).
-
En outre, dans le cas de grosses commandes, prévoyez de regrouper
des articles en Lots (par exemple : 100 crayons) le prix d'un lot
étant égal à la quantité multipliée
par le prix unitaire de chaque article, moins 10%. Un lot posséde
lui aussi une référence, un prix et une description, correspondant
à la marque du ou des articles qui le composent.
-
Dans un premier temps vous pouvez considérer qu'un lot ne peut contenir
qu'un seul type d'article. Par exemple, un lot de crayons dont la marque
est "bic", possédera comme description "lot-bic"...
-
Dans un second temps, on considerera qu'un Lot peut comporter plusieurs
types d'articles. Comment concevoir la classe Lot ? A-t-on besoin de classes
supplementaires ?
A vous de concevoir l'arborescence des classes nécessaires à
cette application. Gardez bien à l'esprit que de nouveaux articles
doivent pouvoir se greffer dans l'application sans que l'on doive récrire
tout le code.
N'oubliez pas d'écrire une classe Appli comportant une
méthode main(), qui créée une commande fictive, ajoute
des articles, en enlève, affiche le contenu de la commande et le
prix total par exemple. Exemple de classe Appli.java
dans le cas de lots homogènes (ex: lot de 10 stylos), la
même classe de test dans le cas de lots hétérogènes
(ex: lot de 10 stylos et trois ramettes de papier).
Notes relatives à l'implémentation
-
Pensez à coder proprement en mettant une classe par fichier, à
bien protéger les objets ne nécessitant pas d'être
exposés (attributs privés, méthodes publiques, méthodes
privées, etc...)
-
Dans un premier temps cette application ne sera pas graphique, une fois
que vos classes fonctionneront correctement, vous pourrez rajouter une
interface graphique.
-
Utilisez la classe Vector du package java.utils pour gérer
une liste d'Objets. Vous verrez, cette classe est très pratique.
Regardez dans la doc API
et dans votre policopié pour comprendre comment utiliser Vector.
Questions complémentaires : avec "base de données des articles"
Réfléchissez à la maniere d'implanter le comportement
suivant (on ne demande pas d'entrer trop dans les details ni d'effectuer
l'implantation des classes correspondantes) :
-
Dans un premier temps, avant tout passage de commandes, on crée
une "base de données des articles". Lorsqu'un article est ajouté
à la base, sa référence, son nom, sa marque et son
prix unitaire sont enregistrés. Il est impossible que 2 articles
aient la même référence.
-
Lorsqu'on passe une commande, inutile de re-préciser pour chaque
article concerné sa marque, son prix, etc... sa référence
seule suffit puisque les autres informations sont déjà dans
la base de données des articles.
On supposera que les informations sur les articles sont en mémoire
centrale durant l'exécution du programme (on pourrait aussi imaginer
que les informations sur tous les articles sont lues dans un fichier et
que l'on recherche les informations sur un produit en donnant sa référence).
Quel modèle objet utiliseriez-vous pour la base de données
des articles ? Faut-il faire une nouvelle classe ou peut-on modifier
les classes existantes ?
-
Expliquez pourquoi il ne faut (presque) jamais utiliser de variables publiques.
Examinez le cas des variables de la classe Article dans ce cas particulier.
Correction des exercices