TD6 JAVA - Training POO 1
Objectifs
- 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.
Partie 1 : Rappels – Implémentation d’un diagramme de classes simple
Objectifs :
- Lire et comprendre un diagramme de classes.
- Implémenter en Java une hiérarchie de classes de base.
Énoncé :
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).
Partie 2 : Correction et optimisation – Introduction d’une interface
Objectifs :
- Identifier des comportements communs.
- Extraire ces comportements dans une interface.
- Refactoriser le code pour améliorer la flexibilité.
Énoncé :
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
Partie 3 : Extension – Implémentation de diagrammes de classes complexes avec interfaces
Objectifs :
- Appliquer vos connaissances pour étendre l’application.
- Créer de nouvelles interfaces et classes en suivant un nouveau diagramme de classes.
Énoncé :
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
