Activité : Convertion d'unité et héritage

Consigne

Pour ce travail on vous demande de prendre connaissance de la situation et de réaliser les tâches proposées. Si vous ne parvenez pas à terminer le travail en classe, il vous appartient de prendre sur votre temps pour l’achever.

Le code des tests unitaires doit être utilisé tel quel et ne doit pas être modifié. Le code des classes doit être conforme à la spécification fournie sous forme de tests unitaires et de diagramme UML.

Le travail est individuel. Vous pouvez communiquer, mais en respectant le code d’honneur.

Situation

On vous confie la tâche de réaliser une application de conversion d’unité.

Objectifs

À la fin de ce travail, vous devez :

  1. Connaître les deux formes de la relation généralisation/spécialisation
  2. Connaître le termes héritage ou héritage d’implémentation
  3. Connaître les mots clé «implements» et «extends» en Java
  4. Connaître la notion de classe abstraite
  5. Connaître les notions de méthode virtuelle pure, de méthode virtuelle et de méthode non-virtuelle

Résultat attendu

Un projet Maven contenant les classes décrites

Ressources

Logiciel :

  • maven
  • Visual Studio Code

Documents :

Mise en route

Rendez-vous dans le répertoire de vos projets, lancez la commande ci-après et lorsque le système vous le demande, saisissez votre nom et votre mot de passe I-FR.

1
git clone https://gitlab.epai-ict.ch/m226/simple-unit-converter.git --single-branch

Déplacez-vous dans le répertoire simple-unit-converter et lancer la commande code . pour ouvrir le projet dans VSC (Visual Studio Code).

À vous de jouer !

Tâches

  1. Réalisez toute les classes et les interfaces manquante en vous référant au diagramme ci-dessous. Il n'y a rien de nouveau, il s'agit simplement d'appliquer ce que vous connaissez déjà. Les classes App et UnitConverterImpl sont fournies.

    Fig. 1 – Diagramme de classe de l'application
    Fig. 1 – Diagramme de classe de l'application

  2. Testez le programme en lançant l'application ou en utilisant le debugger.

  3. Lorsque l'application fonctionne, modifiez votre code pour éviter la duplication de code en utilisant l'héritage d'implémentation (voir capsule de thérorie). Cette tâche vous permet de découvrir les notions de classe abstraite et d'héritage d'implémentation.

    Fig. 2 – Utilisation de l'héritage pour éviter la duplication de code
    Fig. 2 – Utilisation de l'héritage pour éviter la duplication de code

  4. Enfin, pour respecter le principe de ségrégation des interfaces, modifiez votre code conformément au diagramme de la figure 3. Le client de la classe UnitConverter n'a pas besoin des méthodes `convertFromBaseUnit` et `convertToBaseUnit`. Cette tâche vous permet d'expérimenter l'utilisation du mot clé `extends` avec une interface.

    Fig. 4 – Utilisation de l'héritage pour étendre une interface
    Fig. 3 – Utilisation de l'héritage pour étendre une interface


Demandez de l’aide en cas de besoin, mais essayez d’abord par vous-même et respectez toujours le code d’honneur !