Licence Science-Technologie-Santé - mention Informatique - 3e année module Programmation Objet Avancée
Examen – janvier 2012 – durée : 1h (partie 2) Documents autorisés : les polycopiés du cours.
Problème B : le salon de coiffure
Un coiffeur possède un salon de coiffure avec un nombre limité de sièges pour les clients qui attendent d'être coiffés. Un client qui arrive au salon entre seulement si un siège est libre, sinon il attend dehors. Une fois le client entré dans le salon, il attend sur un siège pour être coiffé. Si un client attend sur un siège, le coiffeur se met à le coiffer, puis le reconduit à la porte du salon. Puis il commence tout de suite à coiffer un autre des clients présents sur les sièges. S’il n’y a pas de client sur les sièges, le coiffeur dort.
Ci-dessous sont données 2 classes représentant un coiffeur et un client.
00 public class Coiffeur extends Thread{
01
02 private Salon s;
03 private String nom;
04
05 public Coiffeur(String n){
06 this.nom = n;
07 }
08
09 public void affecteSalon(Salon s){
10 this.s = s;
11 }
12
13 public void run(){
14 while(true){
15 if(s.estVide()){
16 System.out.println("le coiffeur dort");
17 ...
18 }
19 Client c = s.clientSuivant();
20 System.out.println("le coiffeur coiffe le client "+c.nom());
21 ...
22 }
23 }
24 25 }
01 public class Client extends Thread{
02
03 private String nom;
04 private Salon s;
05
06 public Client(String n, Salon s){
07 this.nom = n;
08 this.s = s;
09 }
10
11 public String nom(){
12 return this.nom;
13 }
14
15 public void run(){
16 boolean entre = false;
17 while(!entre) entre = s.entre(this);
18 }
19 20 }
Questions :
1- Ecrivez une classe Salon qui représente un salon de coiffure de capacité fixe avec la liste (générique) des clients assis sur les sièges et si besoin le coiffeur affecté au salon. La classe Salon doit avoir les méthodes suivantes :
– boolean estVide() renvoie vrai si les sièges sont tous vides et faux sinon
– boolean entre(Client c) qui, si un siège est disponible, fait entrer le client c et le place sur un siège et renvoie vrai, et, si aucun siège n'est disponible, renvoie faux.
– Client clientSuivant() qui renvoie un des clients présents sur les sièges et libère le siège qui était occupé par ce client.
2- Complétez les lignes 17 et 21 de la classe Coiffeur, ainsi que votre classe Salon, pour que votre programme simule correctement le fonctionnement du salon de coiffure.
On pourra simuler le temps que met le coiffeur à coiffer un client en mettant le thread Coiffeur en sommeil pendant 100ms.
3- Ecrivez un programme principal qui crée un salon, un coiffeur et 10 clients et simule le fonctionnement du salon de coiffure.