Exercices sur l'héritage
Durée1h15Gestion 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ètreafter(Date)
: indique si l’objet courant (this
) est postérieur à la date fournie en paramètretoString()
: 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éremptionisOutOfDate()
: indique si la date de péremption est dépasséetoString()
: rend en résultat une chaîne de caractères qui décrit le produit
- Test :
- Une méthode
main
qui teste cette classe
- Une méthode
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 stockremove()
: retire le dernier produit ajouté au stock et le rend en résultatisEmpty()
: permet de savoir si le stock est videisFull()
: permet de savoir si le stock est pleingetSize()
: permet de connaître le nombre de produits dans le stocktoString()
: 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 stockcontent
: 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
- mêmes méthodes que l’interface
- Test :
- Une méthode
main
qui teste cette classe
- Une méthode
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. |