Produit, stock et producteur
Durée2hGestion de stock
Contexte
Le contexte de cette séance et de la prochaine du module va être commun.
Il s’agit de développer et étendre un logiciel simple de gestion de
stock. Celui-ci sera à terme constitué d’un ensemble de classes
permettant de représenter et de manipuler les notions de produit, stock
et producteur. Dans un premier temps, nous nous limitons à trois
classes : Product
, Stock
et Producer
.
Un producteur fabrique des produits et les range dans un stock unique. À un instant donné, le producteur ne connaît que le produit qu’il est en train de créer. Un stock contient de nombreux produits (qui pourraient être produits par plusieurs producteurs). Chaque produit est produit par un seul producteur et est entreposé dans un seul stock.
Les exercices
Exercice 1 (Produit simple)
Nous allons réaliser la notion de produit tel que décrite dans la
section contexte. Chaque produit possède un nom name
qui
peut être obtenu par la méthode getName()
et peut renvoyer la
chaîne de caractères qui le décrit par la méthode toString()
.
Toutes les données de la classe Product
sont privées.
En résumé, la classe de base décrivant le produit – Product
– contient les différents éléments décrits ci-dessous.
- Attribut d’instance :
name
: le nom du produit sous forme d’une chaîne de caractères
- Constructeurs :
- un constructeur qui prend en paramètre le nom du nouveau produit
- Méthodes d’instance :
String getName()
: rend une chaîne de caractères qui est le nom du produitString toString()
: rend une chaîne de caractères qui décrit le produit
- Test :
- une méthode
main
qui teste cette classe
- une méthode
Développez, en Java, une classe Product
qui crée des objets représentant
les produits.
Correction
Exercice 2 (Numérotation automatique de produits)
On souhaite, en plus de leur nom, associer aux différents produits
un numéro unique. Pour cela, la classe mémorise le nombre
d’instances qu’elle a créé et chaque nouveau produit reçoit comme
numéro number
la valeur de ce compteur. La numérotation
débutera à 1.
Un produit pourra donner son numéro par la méthode
getNumber()
. Il est possible de connaître le nombre total de
produits qui ont été créés par la méthode getNumberCreated()
en le demandant directement à la classe Product
.
Il conviendra de modifier la méthode toString()
pour qu’elle
intègre le numéro et d’effectuer les modifications dans la méthode de
test.
En résumé, la classe Product
doit maintenant intégrer les
différents éléments décrits ci-dessous.
- Attributs d’instance :
number
: le numéro du produit
- Attributs de classe :
numberCreated
: le nombre de produits déjà créés ; elle permet d’attribuer un numéro à chaque produit, ce numéro est incrémenté à chaque instanciation
- Méthodes d’instance :
int getNumber()
: rend le numéro du produit
- Méthodes de classe :
int getNumberCreated()
: rend le nombre total de produits créés
Modifiez la classe Product
pour intégrer ces modifications.
Correction
Exercice 3 (Stock)
La classe Stock
gère un ensemble de produits. La taille maximale
d’un stock est fixée à sa création. Le contenu de ce stock est rangé
dans un tableau.
Dans un premier temps, les méthodes ne gèrent pas les erreurs d’ajout d’un produit dans un stock plein ou de retrait d’un produit d’un stock vide. Sa description est donc :
- Attributs d’instance :
size
: le nombre de produits présents dans le stockcontent
: le tableau contenant les produits
- Constructeurs :
- un constructeur avec comme paramètre le nombre maximum de produits que le stock peut contenir
- Méthodes d’instance :
void add(Product p)
: rajoute un nouveau produit dans le stockProduct remove()
: retire le dernier produit ajouté au stock et le rend en résultatboolean isEmpty()
: permet de savoir si le stock est videboolean isFull()
: permet de savoir si le stock pleinint getSize()
: permet de connaître le nombre de produits présents dans le stockString toString()
: rend une chaîne de caractères décrivant le stock
- Test :
- une méthode
main
qui teste cette classe
- une méthode
Réalisez la classe Stock
décrite ci-dessus.
Correction
Exercice 4 (Producer)
La classe Producer
crée des objets de type Product
et les range
dans un objet de type Stock
. Un producteur possède un nom (name
)
qui lui est attribué à sa création, il connaît aussi à sa création
l’objet de type Stock
(myStock
) où il doit ranger ses produits.
- Attributs d’instance :
name
: son nommyStock
: le stock où il dépose ses produits
- Constructeurs :
- un constructeur avec comme paramètres son nom et le stock qu’il utilise
- Méthodes d’instance :
String getName()
: donne le nom du producteurvoid setName(String name)
: change le nom du producteurStock getStock()
: donne le stock utilisé par le producteurvoid produce(String productName)
: création d’un nouveau produit dont le nom est passé en argument et rangement dans le stockString toString()
: rend une chaîne de caractères décrivant le producteur
- Test :
- une méthode
main
qui teste cette classe
- une méthode
Réaliser la classe Producer
en ignorant les problèmes d’erreur (ajout d’un produit dans un stock plein ou de retrait d’un produit d’un stock vide). Votre classe doit bien sûr être bien testée.
Correction
Documentation de programmes Java
Pour produire la documentation d’une classe, le JDK inclut l’outil
javadoc
. À partir du fichier source de la classe, il construit une
page Web décrivant les différentes propriétés de la classe. Pour le
réaliser, il utilise les commentaires commençant par /**
et se
terminant par */
. Vous trouverez ci-dessous un exemple de classe
(la classe Complex
) contenant la documentation en format javadoc
.
/**
* Une classe réalisant la notion de <i>nombre complexe</i>
*
* @author Fabien Dagnat
* @version 1.0
*/
public class Complex {
private final double x;
private final double y;
/**
* Création d'un nouvel objet représentant le nombre complexe x+iy
*
* @param x Partie réelle
* @param y Partie imaginaire
*/
public Complex(double x, double y) {
this.x = x;
this.y = y;
}
/**
* Calcul et renvoie la somme de deux nombres complexes.
*
* @param c1 Le premier nombre.
* @param c2 Le second nombre.
* @return La somme <code> c1 + c2 </code>
* @exception NullPointerException Si l'un des arguments est <code> null </code>.
*/
public Complex add(Complex c1, Complex c2) {
return new Complex(c1.getX() + c2.getX(), c1.getY() + c2.getY());
}
public double getX() {
return this.x;
}
public double getY() {
return this.y;
}
}
L’outil javadoc
peut être appelé en exécutant la commande javadoc
dans un terminal. Par exemple, la commande suivante génère la
documentation de la classe Complex
dans le répertoire doc
.
javadoc -d doc Complex.java
Vous trouverez des informations de base sur JavaDoc à https://www.baeldung.com/javadoc.
Exercice 5 (Documentation)
Compléter la classe Producer
en lui ajoutant tous les commentaires javadoc nécessaires. Puis générer les pages HTML de documentation et visualiser les dans un navigateur (en ouvrant le fichier index.html
généré).