Date de première publication : 2024/1O/01
Nous voulons implémenter en Java :-) un modèle d'entreprise du bâtiment. Cet exercice s'inspire de l'examen de 2023 où l'on ne demandait pas de tout coder.
Il est possible de mettre en oeuvre des tests pour valider le code à écrire.
Modélisation simple
La première partie de la modélisation ne prend pas en compte les exceptions.
J'ai travaillé, chef ...
Intéressons-nous à la classe Adresse
.
- Écrire la classe
Adresse
avec ses attributs. - Écrire le constructeur de
Adresse
qui prend en paramètre tous les attributs - Écrire les méthodes qui permettent de lire ou de modifier la latitude et la longitude d’une Adresse
- Instancier un objet de type Adresse : "mon entreprise", latitude : 45,7598494, longitude : 3,1085476
- Écrire la méthode "naturelle" pour avoir un bel affichage de la forme" nom ( latitude ; longitude ) "
Il s'agit de la méthode toString()
Adresse adresse = new Adresse("mon entreprise", 45.7598494, 3.1085476);
adresse.toString().equals("mon entreprise ( 45.7598494 ; 3.1085476)");
Intéressons-nous à la classe Ouvrier
.
- Écrire la classe
Ouvrier
. Le compteur est incrémenté à chaque instanciation d’Ouvrier
et permet d’identifier de manière unique un ouvrier. - Écrire les méthodes qui permettent de lire les valeurs des attributs
nom
,disponible
etcompteur
. - Écrire les constructeurs de la classe
Ouvrier
sans duplication de code
int i = Ouvrier.getCompteur();
Ouvrier o1 = new Ouvrier();
assertTrue(Ouvrier.getCompteur() == (i+1));
- Écrire une méthode
travailler()
qui affiche sur la sortie standard « nom » travaille à adresse Latitude ; Longitude) si l’ouvrier est disponible ou affiche "non disponible" dans le cas contraire. "IndisponibleException" si ce n’est pas le cas
Les ouvriers sont encadrés par des chefs d’équipe qui sont eux-mêmes des ouvriers spécialisés.
- Écrire la classe
Chef
ainsi que l’attributequipe
. Si nécessaire on peut limiter le nombre d'ouvriers sous la coupe d'un chef àOUVRIERS_MAX = 8
La notion d'équipe peut se modéliser avec un tableau ou bien un conteneur dynamique.
- Implémenter le constructeur de la classe
Chef
. - Implémenter la méthode
ajouter()
qui permet d'ajouter un ouvrie. On ne peut pas ajouter un ouvrier à un chef non disponible. - Implémenter la méthode
enlever()
qui permet d'enlever un ouvrier - Implémenter la méthode
travailler()
. Si le chef est disponible, il travaille lui-même puis il demande aux membres de son équipe de travailler. Si le chef n’est pas disponible, on ne fait rien - Changer l'adresse du chantier d'un chef, doit changer l'adresse de chantier des ouvriers dépendants du chef.
int i = Ouvrier.getCompteur();
Ouvrier o2 = new Chef();
assertTrue(Ouvrier.getCompteur() == (i+1));
Spécialisation des ouvriers
Les ouvriers sont en général spécialisés (de formation). Les spécialités sont la plomberie, le chauffage et l’électricité.
On voudrait pouvoir identifier les ouvriers spécialisés et ainsi utiliser la modélisation naturelle : plombier, chauffagiste, plombier-chauffagiste et électricien.- Écrire l’interface
Specialite
(spécialité) - Proposer une classe
Plombier
. - Proposer une classe
PlombierChauffagiste
. - Comment rendre la classe
Ouvrier
abstraite ?
La modélisation précédente (statique) n’est pas satisfaisante car elle ne permet pas de prendre en compte l’évolution des compétences des ouvriers. Comment prendre cela en compte ?
L'idée est de faire un agrégation des spécialisations des ouvriers :-)
Modélisation exceptionnelle
- Écrire une classe d’exception
IndisponibleException
associée au message d’erreur "Ouvrier indisponible" - Adapter la méthode
ajouter()
deChef
pour lever une exception quand le chef n'est pas disponible. - Écrire une méthode
travailler()
deOuvrier
qui affiche sur la sortie standard "nom" travaille à adresse Latitude ; Longitude) si l’ouvrier est disponible ou lève une exception dans le cas contraire - Adapter la méthode
travailler()
de la classeChef
. Si le chef est disponible, il travaille lui-même comme un ouvrier puis il demande aux membres de son équipe de travailler (si un membre de l'équipe n'est pas disponible, cela ne doit pas perturber le travail des autres). Si le chef n’est pas disponible, une exception est levée..
- 1
- 2
- 3
- 4
- 5
- 6
- 7