- Les concepts d’interfaces en Java.
- La lecture et l’interprétation d’un diagramme de classe.
- L’implémentation d’un diagramme de classe simple.
- La refactorisation du code afin d’améliorer sa modularité et sa maintenabilité.
Vous travaillerez sur une application de gestion de véhicules. L’exercice se découpe en trois parties progressives.
- Lire et comprendre un diagramme de classes.
- Implémenter en Java une hiérarchie de classes de base.
Vous disposez du diagramme de classes suivant :
classDiagram
    class Vehicule {
        <<Abstract>>
        # String marque
        # String modele
        + demarrer() void
        + arreter() void
    }
    class Voiture {
        - int nbPortes
        + klaxonner() void
    }
    class Camion {
        - double capaciteChargement
        + klaxonner() void
    }
    Vehicule <|-- Voiture
    Vehicule <|-- Camion
    Tâches :
- Créez une classe abstraite Vehiculequi contient les attributsmarqueetmodele, ainsi que les méthodesdemarrer()etarreter().
- Créez deux classes concrètes, VoitureetCamion, qui étendentVehicule. Chacune doit implémenter une méthodeklaxonner().
- Veillez à respecter les conventions de nommage et la bonne organisation du code (constructeurs, getters/setters si nécessaire, commentaires).
- Identifier des comportements communs.
- Extraire ces comportements dans une interface.
- Refactoriser le code pour améliorer la flexibilité.
En observant votre code de la Partie 1, vous remarquez que la méthode klaxonner() est présente dans les deux classes Voiture et Camion.
Tâches :
- Créez une interface nommée Klaxonnablequi déclare la méthodeklaxonner().
- Faites en sorte que les classes VoitureetCamionimplémentent cette interface.
classDiagram
    class Vehicule {
        <<Abstract>>
        # String marque
        # String modele
        + demarrer() void
        + arreter() void
    }
    class Voiture {
        - int nbPortes
        + klaxonner() void
    }
    class Camion {
        - double capaciteChargement
        + klaxonner() void
    }
    class Klaxonnable {
        <<interface>>
        + klaxonner() void
    }
    Vehicule <|-- Voiture
    Vehicule <|-- Camion
    Klaxonnable <|.. Voiture
    Klaxonnable <|.. Camion
    - Appliquer vos connaissances pour étendre l’application.
- Créer de nouvelles interfaces et classes en suivant un nouveau diagramme de classes.
Vous allez maintenant ajouter de nouvelles fonctionnalités à votre application en suivant le diagramme de classes suivant :
classDiagram
%% Classes de base
    class Vehicule {
        # String marque
        # String modele
        + demarrer() void
        + arreter() void
    }
    class Voiture {
        # int nbPortes
        + klaxonner() void
    }
    class Camion {
        # double capaciteChargement
        + klaxonner() void
    }
%% Classes étendues
    class VoitureDeCourse {
        - boolean turboActive
        + activerTurbo() void
        + desactiverTurbo() void
    }
    class CamionDeTransport {
        - double chargeActuelle
        + charger(poids: double) void
        + decharger(poids: double) void
    }
%% Interfaces
    class Klaxonnable {
        <<interface>>
        + klaxonner() void
    }
    class Transportable {
        <<interface>>
        + charger(poids: double) void
        + decharger(poids: double) void
    }
%% Relations d'héritage
    Vehicule <|-- Voiture
    Vehicule <|-- Camion
    Voiture <|-- VoitureDeCourse
    Camion <|-- CamionDeTransport
%% Implémentation d'interfaces
    Klaxonnable <|.. Voiture
    Klaxonnable <|.. Camion
    Transportable <|.. CamionDeTransport
    