Exercices sur l'héritage

Durée1h15

Gestion de stock

Contexte

Pour aborder ces différentes notions, nous allons étendre le logiciel de gestion de stock pour permettre :

  • la gestion de produits périssables,
  • la réalisation de plusieurs formes de stocks.

Pour cela, nous ajouterons au système les classes : Date, PerishableProduct, StockArray et StockList et nous transformerons la classe Stock en interface.

Les exercices

Exercice 1 (Produit périssable)

L’objectif de ce premier exercice est d’illustrer les notions d’héritage et de redéfinition. Pour cela nous allons créer une nouvelle classe PerishableProduct qui étend la notion de produit pour permettre d’ajouter une date de péremption.

Cette nouvelle classe utilisera une classe Date qui vous est fournie ici. Le diagramme UML de la classe Date est présentée ci-dessous (sa structure interne n’est pas explicitée).

  • Constructeurs

    • un constructeur sans paramètre qui initialise à la date du jour
    • un constructeur qui prend en paramètre trois entiers, à savoir l’année, le mois et le jour
  • Méthodes d’instance :

    • before(Date) : indique si l’objet courant (this) est antérieur à la date fournie en paramètre
    • after(Date) : indique si l’objet courant (this) est postérieur à la date fournie en paramètre
    • toString() : rend en résultat une chaîne de caractères qui décrit la date

Écrivez une classe PerishableProduct qui étend la classe Product. Sa description en UML résume graphiquement toutes ses caractéristiques figure au dessus.

La spécification de la classe PerishableProduct est la suivante :

  • Variables d’instance :
    • bestBeforeDate : la date de péremption du produit
  • Constructeur :
    • un constructeur qui prend en paramètre le nom du nouveau produit et sa date de péremption
  • Méthodes d’instance :
    • getBestBeforeDate() : rend en résultat la date de péremption
    • isOutOfDate() : indique si la date de péremption est dépassée
    • toString() : rend en résultat une chaîne de caractères qui décrit le produit
  • Test :
    • Une méthode main qui teste cette classe
Correction

Exercice 2 (Interface Stock)

Cet exercice aborde la dernière notion mentionnée dans l’introduction : la notion d’interface.

Une manière simple pour permettre l’utilisation de plusieurs formes de stock est de convertir notre classe Stock en interface. La classe Stock existante sera renommée StockArray et deviendra une réalisation de l’interface Stock sous la forme d’un tableau (voir diagramme UML suivant).

Réalisez l’interface Stock. Les méthodes déclarées dans cette interface correspondent aux méthodes d’instance de la classe Stock décrite ci-dessous.

  • add(Product) : rajoute un nouveau produit dans le stock
  • remove() : retire le dernier produit ajouté au stock et le rend en résultat
  • isEmpty() : permet de savoir si le stock est vide
  • isFull() : permet de savoir si le stock est plein
  • getSize() : permet de connaître le nombre de produits dans le stock
  • toString() : donne une description du stock

À partir du code de la session 1 que vous réutiliserez, réalisez la classe StockArray. Sa description figure ci-dessous ainsi que son diagramme UML ci-dessus.

  • Attributs d’instance :
    • size : le nombre de produits actuellement dans le stock
    • content : le tableau contenant les produits
  • Constructeurs :
    • un constructeur avec comme paramètre le nombre maximum de produits dans le stock
  • Méthodes d’instance :
    • mêmes méthodes que l’interface Stock qu’elle réalise
  • Test :
    • Une méthode main qui teste cette classe
Correction

Pour aller plus loin

Exercice 3 (Classe StockList)

Le but de cet exercice est de réaliser une implantation du stock utilisant une LinkedList pour stocker les produits. Pour cela, vous devez ajouter une classe StockList suivant la conception décrite dans le diagramme UML ci-dessous.

La documentation Javadoc de la classe LinkedList est disponible sous https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/LinkedList.html. Un extrait de cette documentation est donnée en annexes.

Réaliser en Java la classe StockList en utilisant une LinkedList pour stocker les produits. Des tests de cette classe vous sont fournies ici.

Correction

Annexes

Extrait de la javadoc de la classe LinkedList

Class LinkedList<E>

Constructor Summary
LinkedList()        Constructs an empty list.
Method Summary
void add(int index, E element)
Inserts the specified element at the specified position in this list.
boolean add(E o)
Appends the specified element to the end of this list.
E get(int index)
Returns the element at the specified position in this list.
int size()
Returns the number of elements in this list.