Produit, stock et producteur

Durée2h

Gestion 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 produit
    • String toString() : rend une chaîne de caractères qui décrit le produit
  • Test :
    • une méthode main qui teste cette classe

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 stock
    • content : 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 stock
    • Product remove() : retire le dernier produit ajouté au stock et le rend en résultat
    • boolean isEmpty() : permet de savoir si le stock est vide
    • boolean isFull() : permet de savoir si le stock plein
    • int getSize() : permet de connaître le nombre de produits présents dans le stock
    • String toString() : rend une chaîne de caractères décrivant le stock
  • Test :
    • une méthode main qui teste cette classe

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 nom
    • myStock : 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 producteur
    • void setName(String name) : change le nom du producteur
    • Stock getStock() : donne le stock utilisé par le producteur
    • void produce(String productName) : création d’un nouveau produit dont le nom est passé en argument et rangement dans le stock
    • String toString() : rend une chaîne de caractères décrivant le producteur
  • Test :
    • une méthode main qui teste cette classe

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é).