Vous êtes sur la page 1sur 42

1. package ma.projet.

beans;
2.  
3. public class Livre {
4. private int id;
5. private String titre;
6. private String auteur;
7. private int prix;
8. public static int count;
9.  
10. public Livre(String titre, String auteur, int prix) {
11. this.id = ++count;
12. this.titre = titre;
13. this.auteur = auteur;
14. this.prix = prix;
15. }
16.  
17. public int getId() {
18. return id;
19. }
20.  
21. public void setId(int id) {
22. this.id = id;
23. }
24.  
25. public String getTitre() {
26. return titre;
27. }
28.  
29. public void setTitre(String titre) {
30. this.titre = titre;
31. }
32.  
33. public String getAuteur() {
34. return auteur;
35. }
36.  
37. public void setAuteur(String auteur) {
38. this.auteur = auteur;
39. }
40.  
41. public int getPrix() {
42. return prix;
43. }
44.  
45. public void setPrix(int prix) {
46. this.prix = prix;
47. }
48.  
49. @Override
50. public String toString() {
51. return "Le prix du livre " + this.titre + " de
l'auteur " + this.auteur
52. + " est :" + this.prix + " DH";
53. }
54.  
55. }

 La classe de Test 

1. package ma.projet.beans;
2.  
3. import java.util.Scanner;
4.  
5. public class TestLivre {
6.  
7. public static void main(String[] args) {
8. Livre[] livres = new Livre[3];
9. Scanner sc = null;
10. for (int i = 0; i < livres.length; i++) {
11. sc = new Scanner(System.in);
12. System.out.print("Donner le titre du livre
n° " + (i + 1) + " :");
13. String titre = sc.nextLine();
14. System.out.print("Donner l'auteur du livre
n° " + (i + 1) + " :");
15. String auteur = sc.nextLine();
16. System.out.print("Donner le prix du livre
n° " + (i + 1) + " :");
17. int prix = sc.nextInt();
18. livres[i] = new Livre(titre, auteur,
prix);
19. }
20. sc.close();
21. for (Livre l : livres)
22. System.out.println(l);
23.  
24. System.out.println("Le nombre de livres est " +
Livre.count);
25. }
26.  
27. }
//Source : www.exelib.net

2/

1. package ma.exelib.projet.classe;

2.  

3. public class Personne {

4. protected int id;

5. protected String nom;

6. protected String prenom;

7.  

8. private static int count;


9.  

10. public Personne(String nom, String prenom) {

11. this.id = ++count;

12. this.nom = nom;

13. this.prenom = prenom;

14. }

15.  

16. @Override

17. public String toString() {

18. return "Je suis " + this.nom.toUpperCase() + " "

19. + this.prenom.substring(0,
1).toUpperCase() + ""

20. +
this.prenom.substring(1).toLowerCase();

21. }

22. }

 La classe Etudiant

1. package ma.exelib.projet.classe;

2.  

3. public class Etudiant extends Personne {

4.  

5. private String cne;


6.  

7. public Etudiant(String nom, String prenom, String cne) {

8. super(nom, prenom);

9. this.cne = cne;

10. }

11.  

12. @Override

13. public String toString() {

14. return super.toString() + " mon CNE est: " +


this.cne;

15. }

16.  

17. }

 La classe Employe

1. package ma.exelib.projet.classe;

2.  

3. public class Employe extends Personne {

4.  

5. protected double salaire;

6.  

7. public Employe(String nom, String prenom, double salaire) {

8. super(nom, prenom);
9. this.salaire = salaire;

10. }

11.  

12. public String toString() {

13. return super.toString() + " mon salaire est: " +


this.salaire + " DH";

14. }

15.  

16. }

 La classe Professeur 

1. package ma.exelib.projet.classe;

2.  

3. public class Professeur extends Employe {

4.  

5. private String specialite;

6.  

7. public Professeur(String nom, String prenom, double salaire,

8. String specialite) {

9. super(nom, prenom, salaire);

10. this.specialite = specialite;

11. }

12.  
13. @Override

14. public String toString() {

15. return super.toString() + " ma spécialité est: " +


this.specialite;

16. }

17.  

18. }

 La classe Application

1. package ma.exelib.projet.test;

2.  

3. import ma.exelib.projet.classe.Employe;

4. import ma.exelib.projet.classe.Etudiant;

5. import ma.exelib.projet.classe.Professeur;

6.  

7. public class Application {

8. public static void main(String[] main) {

9. Employe[] employes = new Employe[2];

10. employes[0] = new Employe("Douk", "Rachid",


10000);

11. employes[1] = new Employe("Ngoye", "Roland",


10000);

12. System.out.println("La liste des employes : ");

13. for (Employe e : employes)


14. System.out.println("\t" + e);

15.  

16. Etudiant[] etudiants = new Etudiant[2];

17. etudiants[0] = new Etudiant("Obaka", "Med",


"65678754");

18. etudiants[1] = new Etudiant("Alseny", "Thomas",


"87543543");

19. System.out.println("La liste des étudiants : ");

20. for (Etudiant e : etudiants)

21. System.out.println("\t" + e);

22.  

23. Professeur[] professeurs = new Professeur[2];

24. professeurs[0] = new Professeur("Oba", "Kevin",


5700, "JAVA/JEE");

25. professeurs[1] = new Professeur("Magassouba",


"Cheick", 5000,

26. "Mathématique");

27. System.out.println("La liste des professeurs : ");

28. for (Professeur p : professeurs)

29. System.out.println("\t" + p);

30. }

31. }
//Source : www.exelib.net
1. 3/package ma.projet.beans;

2.  

3. public class Voiture {

4. //Attribut de l'objet

5. private int id;

6. private String marque;

7. private double vitesse;

8. private int puissance;

9.

10. //Variable de classe

11. //Variables dont il n’existe qu’un seul exemplaire

12. //associé à sa classe de définition

13. public static int count = 0;

14.

15. public Voiture(String marque, double vitesse, int


puissance) {

16. this.id = ++count;

17. this.marque = marque;

18. this.vitesse = vitesse;

19. this.puissance = puissance;

20. }
21.  

22. @Override

23. public String toString() {

24. return "id=" + id + ", marque=" + marque + ",


vitesse=" + vitesse

25. + ", puissance=" + puissance;

26. }

27.  

28. }

 La classe de Test 

1. package ma.projet.beans;

2.  

3.  

4. public class TestVoiture {

5.  

6. public static void main(String[] args) {

7. Voiture[] voitures = new Voiture[3];

8. voitures[0] = new Voiture("BMW", 220, 8);

9. voitures[1] = new Voiture("Ford", 200, 6);

10. voitures[2] = new Voiture("Audi", 240, 8);

11.  

12. for (Voiture v : voitures) {


13. System.out.println(v);

14. }

15.  

16. // Pour y accéder à une variable de classe,

17. // il faut utiliser non pas un identificateur

18. // d'objet mais le nom de la classe

19.  

20. System.out.println("Le nombre des voitures est : "


+ Voiture.count);

21.  

22. }

23. }
//Source : www.exelib.net

4/ chaine majus minus

1. import java.util.Scanner;

2.  

3. /**

4. *

5. * @author lachgar

6. */
7. public class Exo4 {

8.  

9. public static void main(String[] args) {

10. Scanner sc = new Scanner(System.in);

11. System.out.println("Donner le nom cet étudiant :");

12. String nom = sc.next();

13. System.out.println("Donner le prénom cet


étudiant :");

14. String prenom = sc.next();

15. System.out.println(">> " + nom.toUpperCase() + " " +


prenom.substring(0, 1).toUpperCase() + "" +
prenom.substring(1).toLowerCase());

16. }
//Source : www.exelib.net

5/La classe Forme : 

1. public abstract class Forme {

2.  

3. public abstract double getSurface();

4.  

5. }
 La classe Carre: 

1. public class Carre extends Forme {

2.  

3. private double cote;

4.  

5. public Carre(double cote) {

6. this.cote = cote;

7. }

8.  

9. @Override

10. public double getSurface() {

11. return Math.pow(cote, 2);

12. }

13.  

14. public String toString() {

15. return "Carré ( coté " + this.cote + " cm )";

16. }

17.  

18. }

 La classe Cercle : 

1. public class Cercle extends Forme {

2.  
3. private double rayon;

4.  

5. public Cercle(double rayon) {

6. this.rayon = rayon;

7. }

8.  

9. @Override

10. public double getSurface() {

11. return Math.PI * Math.pow(rayon, 2);

12. }

13.  

14. public String toString() {

15. return "Cercle ( rayon " + this.rayon + " cm )";

16. }

17.  

18. }
//Source : www.exelib.net

6/
1. Pour lire une valeur à partir du clavier comme on fait en c avec la méthode
scanf() vous devez  utiliser un objet de type Scanner qui propose un ensemble
de fonctions de lecture . 

Pour utiliser la classe Scanner il faut d'abord  l'importer :

import java.util.Scanner;

 Après on instancie un objet scanner (on le nomme ici "lecture" ):

Scanner lecture = new Scanner(System.in);

Enfin on peut utiliser cet objet pour lire les valeurs des variables suivant leurs
types.

float note1=lecture.nextFloat();
 int a =lecture.nextInt();
....

Code java question 1:

import java.util.Scanner;

public class Mention {

public static void main(String[] args) {

Scanner lecture = new Scanner(System.in);

System.out.print("Donner la 1ere note:");

float note1=lecture.nextFloat();

System.out.print("Donner la 2eme note:");


float note2=lecture.nextFloat();

System.out.print("Donner la 3eme note:");

float note3=lecture.nextFloat();

Float moy=(note1+note2+note2)/3;

String s = String.format("La moyenne des 3 notes est %.2f",


moy);//on affiche la moyenne sous la forme .2f (deux nombres après
la virgule)

System.out.println(s);

if(moy >= 12)

System.out.println("Bien");

else if(moy >= 10 && moy < 12)

System.out.println("Passable");

else {

System.out.println("Non Admis");
}

2. Code java question 2 : on va se contenter d'afficher le code de la méthode


main 
3. public static void main(String[] args) {

4. Scanner lecture = new Scanner(System.in);

5. System.out.print("Donner un nombre entier:");

6. int a =lecture.nextInt();

7. if(a%2==0){

8. System.out.print(a+" est un nombre pair");

9. }

10. else{

11. System.out.print(a+" est un nombre


impair");

12.

13. }

14. Code java Q3:


15. System.out.print("Saisissez votre nom complet:");

16. String nom = lecture.next();


17. System.out.print("Quel est votre sexe M/F:");

18. char sexe = lecture.next().charAt(0);

19. switch (sexe) {

20. case 'M': System.out.print("Bonjour Monsieur:


"+nom);

21.

22. break;

23. case 'F':System.out.print("Bonjour Madame: "+nom);

24. break;

25.

26. default:

27. System.out.print("Merci de saisir des


données correctes");

28. break;

}
//Source : www.exelib.net

7/ Création via les objets exécutables

En Java, la façon la plus simple pour créer un thread est la suivante :

On définit une classe qui implémente l’interface Runnable

public Classe_de Test implements Runnable { .....}


On redéfini la méthode run() de la classe :

public void run() {........ }


Attention on ne peut pas passer de paramètres à la méthode run(), si donc l’objet
doit pointer sur des objets externes on doit le faire lors de la création, ou avec une
méthode, avant de créer le thread proprement dit.

On crée l’objet exécutable :


Classe_de_Test mon_objet_executable = new Classe_de_Test();
Enfin on crée le Thread lui même, puis on le démarre :

Thread monJob = New Thread(mon_objet_executable);


monJob.start();

1. Écrire un programme dans lequel on demande à l’utilisateur de saisir un entier


en gérant l’exception dans le cas où il ne saisit pas un entier correctement.
2. Écrire un programme dans lequel on demande à l’utilisateur de saisir un entier
en gérant l’exception dans le cas où il ne saisit pas un entier correctement en
lui demandant de refaire la saisie.
3. Écrire un programme dans lequel on demande à l’utilisateur de saisir son date
de naissance en gérant l’exception dans le cas où il ne saisit pas une date
valide en lui demandant de refaire la saisie.
4. Ecrire un programme qui demande à l’utilisateur une date de départ et une
date d’arrivée, générer une exception si la date d’arrivée et inférieure à la date
de départ.
5. Créer une classe Élèves caractérisée par nom, âge et moyenne.

 L’âge doit être entre 18 et 26 sinon l’exception InvalidAgeException (elle


affiche le message "L’âge doit être entre 18 et 26") est générée.
 La note doit être entre 0 et 20 sinon l’exception InvalidNoteException est
générée (elle affiche le message "La note doit être entre 0 et 20").

        Définir les constructeurs de la classe, les accesseurs et les méthodes ToString.


//Source : www.exelib.net
Question 1:

1. class Program

2. {

3. static void Main(string[] args)

4. {

5. int a;

6. try

7. {

8. Console.Out.WriteLine("Donner un entier: ");

9. a = Int16.Parse(Console.In.ReadLine());
//Instruction susceptible de générer une exception

10. Console.Out.WriteLine("Votre entier est: " + a);

11. }

12. catch (Exception e)

13. {

14. Console.Out.WriteLine(e.Message);
//Gestion de l'exception

15. }

16. Console.ReadKey();

17. }

Question 2: Méthode 1

1. class Program
2. {

3. static void Main(string[] args)

4. {

5.  

6. int a;

7. bool r;

8. do

9. {

10. try

11. {

12. r = true;

13. Console.Out.WriteLine("Donner un entier: ");

14. a = Int16.Parse(Console.In.ReadLine());

15. Console.Out.WriteLine("Votre entier est: " +


a);

16. }

17. catch (Exception e)

18. {

19. Console.Out.WriteLine(e.Message);

20. r = false;

21. }

22. } while (r == false);


23. Console.ReadKey();

24. }

Question 2: Méthode 2:

1. class Program

2. {

3. static void Main(string[] args)

4. {

5.  

6. int a;

7. e: try

8. {

9.  

10. Console.Out.WriteLine("Donner un entier: ");

11. a = Int16.Parse(Console.In.ReadLine());

12. Console.Out.WriteLine("Votre entier est: " + a);

13. }

14. catch (Exception e)

15. {

16. Console.Out.WriteLine(e.Message);

17. goto e;

18.  

19. }
20.  

21. Console.ReadKey();

22. }

Question 3:

1. class Program

2. {

3. static void Main(string[] args)

4. {

5.  

6. l: try
//Marquer une étiquette nommée l

7. {

8. Console.Out.WriteLine("Donner votre date de


naissance (jj/mm/aaaa): ");

9. DateTime d =
DateTime.Parse(Console.In.ReadLine()); //
Instruction susceptible de générer une exception

10. Console.Out.WriteLine("Votre date de naissance


est: " + d.ToShortDateString());

11. }

12. catch (Exception e)

13. {

14. Console.Out.WriteLine(e.Message);
//Gestion de l'exception
15. goto l;
//Aller à l'étiquette l

16. }

17. Console.ReadKey();

18. }

Question 4:

1. class Program

2. {

3. static void Main(string[] args)

4. {

5.  

6. Console.Out.WriteLine("Donner la date de départ


(jj/mm/aaaa): ");

7. DateTime dp = DateTime.Parse(Console.In.ReadLine());

8. Console.Out.WriteLine("Donner la date d'arrivée


(jj/mm/aaaa): ");

9. DateTime da = DateTime.Parse(Console.In.ReadLine());

10. if (da.Date < dp.Date)

11. throw new Exception("Date d'arrivée doit être


supérieure à la date de départ"); //Générer une
exeption avec un message personnalisé

12. else

13. {
14. Console.Out.WriteLine("Date de départ: " +
dp.ToShortDateString());

15. Console.Out.WriteLine("Date d'arrivée: " +


da.ToShortDateString());

16. }

17. Console.ReadKey();

18. }

Question 5:
La classe InvalidAgeException:

1. class InvalidAgeException : Exception

2. {

3. public InvalidAgeException()

4. : base()

5. {

6. }

7.  

8. public override string Message


//Redéfinition de la propriété Message

9. {

10. get

11. {

12. return "L’âge doit être entre 18 et 26";

13. }
14. }

15. }

La classe InvalidNoteException:

1. class InvalidNoteException : Exception

2. {

3. public InvalidNoteException() : base() { }

4.  

5. public override string Message


//Redéfinition de la propriété Message

6. {

7. get

8. {

9. return "La note doit être entre 0 et 20";

10. }

11. }

12. }

La classe Eleve:

1. class Eleve

2. {

3. private string nom;

4. private int age;

5. private double moyenne;


6.  

7. public string Nom

8. {

9. get { return nom; }

10. set { nom = value; }

11. }

12.  

13. public int Age

14. {

15. get { return age; }

16. set

17. {

18. if (value >= 18 && value <= 26)

19. age = value;

20. else

21. throw new InvalidAgeException();


//Générer une exception de type InvalidAgeException

22. }

23. }

24.  

25. public double Moyenne

26. {
27. get { return moyenne; }

28. set

29. {

30. if (value >= 0 && value <= 20)

31. moyenne = value;

32. else

33. throw new InvalidNoteException();


//Générer une exception de type InvalidNoteException

34. }

35. }

36.  

37. public Eleve() { }

38.  

39. public Eleve(string n, int a, double m)

40. {

41. nom = n;

42. Age = a;
//Initialiser l'age à travers sa propriété pour tenir compte de
l'exception InvalidAgeException

43. Moyenne = m;
//Initialiser la moyenne à travers sa propriété pour tenir compte
de l'exception InvalidNoteException

44. }

45.  
46. public override string ToString()

47. {

48. return "Nom: "+nom+" Age: "+age+" Moyenne:


"+moyenne;

49. }

50.  

51. }

Le programme de test:

1. Eleve e = new Eleve("SALIM", 20, -1);


//Observer l'exception générée

2. Console.Out.WriteLine(e);

3. Console.ReadKey();
//Source : www.exelib.net

EX : Soit la classe abstraite Employé caractérisée par attributs suivants :

 Matricule
 Nom
 Prénom
 Date de naissance

La classe Employé doit disposer des méthodes suivantes :

 un constructeur d’initialisation
 des propriétés pour les différents attributs
 la méthode Tostring
 une méthode abstraite GetSalaire.

Un ouvrier est un employé qui se caractérise par sa date d’entrée à la société.


 Tous les ouvriers ont une valeur commune appelée SMIG=2500 DH
 L’ouvrier a un salaire mensuel qui est : Salaire = SMIG + (Ancienneté en
année)*100.
 De plus, le salaire ne doit pas dépasser SMIG*2.

 Un cadre est un employé qui se caractérise par un indice.

 Le cadre a un salaire qui dépend de son indice :


o 1 : salaire mensuel 13000 DH
o 2 : salaire mensuel 15000 DH
o 3 : salaire mensuel 17000 DH
o 4 : salaire mensuel 20000 DH

 Un patron est un employé qui se caractérise par un chiffre d’affaire et un


pourcentage.

 Le chiffre d’affaire est commun entre les patrons.


 Le patron a un salaire annuel qui est égal à x% du chiffre d'affaire : Salaire =
CA*pourcentage/100

Travail à faire:

1. Créer la classe abstraite Employé.


2. Créer la classe Ouvrier, la classe Cadre et la classe Patron qui héritent de la
classe Employé, et prévoir les Constructeurs et la méthode ToString de
chacune des 3 classes.
3. Implémenter la méthode GetSalaire() qui permet de calculer le salaire pour
chacune des classes.
//Source : www.exelib.net

1. //Auteur : CHAOULID

2. //Copyright: Exelib.net

3.
4. abstract class Employe

5. {

6. private int matircule;

7. private string nom;

8. private string prenom;

9. private DateTime datenaissance;

10.  

11. public int Matircule

12. {

13. get { return matircule; }

14. set { matircule = value; }

15. }

16.  

17. public string Nom

18. {

19. get { return nom; }

20. set { nom = value; }

21. }

22.  

23. public string Prenom

24. {

25. get { return prenom; }


26. set { prenom = value; }

27. }

28.  

29. public DateTime Datenaissance

30. {

31. get { return datenaissance; }

32. set { datenaissance = value; }

33. }

34.  

35. public Employe(int matricule,string nom,string


prenom,DateTime dn)

36. {

37. this.matircule = matricule;

38. this.nom = nom;

39. this.prenom = prenom;

40. this.datenaissance = dn;

41. }

42.  

43. public override string ToString()

44. {

45. return "Matricule: " + matircule + " Nom: " + nom +


" Prénom: " + prenom + "Date de naissance: " +
datenaissance.ToShortDateString();
46. }

47.  

48. public abstract double GetSalaire();

49.  

50. }

51. } 

La classe Ouvrier:
1. class Ouvrier : Employe

2. {

3. private DateTime dateentree;

4. private static double sMIG = 2500;

5.  

6. public static double SMIG

7. {

8. get { return sMIG; }

9.

10. }

11.  

12. public DateTime Dateentree

13. {

14. get { return dateentree; }


15. set { dateentree = value; }

16. }

17.  

18. public Ouvrier(int m, string n, string p, DateTime dn,


DateTime de)

19. : base(m, n, p, dn)

20. {

21. dateentree = de;

22. }

23.  

24. public override string ToString()

25. {

26. return "Employé:"+" "+base.ToString()+" Date


d'entrée: "+dateentree.ToShortDateString();

27. }

28.  

29. public override double GetSalaire()

30. {

31. double salaire;

32. int Anciennete = DateTime.Now.Year -


dateentree.Year;

33. if (dateentree.AddYears(Anciennete) >


DateTime.Now.Date)

34. Anciennete--;
35. if (sMIG + Anciennete * 100 <= 2 * sMIG)

36. salaire = sMIG + Anciennete * 100;

37. else

38. salaire = sMIG * 2;

39.  

40. return salaire;

41. }

42. }

La classe Cadre:
1. class Cadre : Employe

2. {

3. private int indice;

4.  

5. public int Indice

6. {

7. get { return indice; }

8. set { indice = value; }

9. }

10.  

11. public Cadre(int matricule, string nom, string prenom,


DateTime dn, int indice)

12. : base(matricule, nom, prenom, dn)


13. {

14. this.indice = indice;

15. }

16.  

17. public override string ToString()

18. {

19. return "Cadre: "+" "+base.ToString()+" Indice:


"+indice;

20. }

21.  

22. public override double GetSalaire()

23. {

24. if (indice == 1)

25. return 13000;

26. else if (indice == 2)

27. return 15000;

28. else if (indice == 3)

29. return 17000;

30. else if (indice == 4)

31. return 20000;

32. else

33. return -1;


//Problème d'indice
34. }

35. }

La classe Patron:
1. class Patron : Employe

2. {

3. private static double ca;

4. private double pourcentage;

5.  

6. public static double Ca

7. {

8. get { return ca; }

9. set { ca = value; }

10. }

11.

12. public double Pourcentage

13. {

14. get { return pourcentage; }

15. set { pourcentage = value; }

16. }

17.  

18. public Patron(int matricule, string nom, string prenom,


DateTime dn, double p)
19. : base(matricule, nom, prenom, dn)

20. {

21. this.pourcentage = p;

22. }

23.  

24. public override string ToString()

25. {

26. return "Patron: "+" "+base.ToString()+" Pourcentage:


"+pourcentage+"%";

27. }

28.  

29. public override double GetSalaire()

30. {

31. return Math.Round((ca * pourcentage / 100) / 12, 2);

32. }

33. }

Le programme de test: (Un exemple)


1. class Program

2. {

3. static void Main(string[] args)

4. {

5. // un exemple de programme de test simple


6. Ouvrier o = new Ouvrier(1, "Nom1", "Prenom1", new
DateTime(1980, 2, 3), new DateTime(2000, 4, 5));

7. Console.Out.WriteLine(o);

8. Console.Out.WriteLine("Salaire de l'employé: " +


o.GetSalaire());

9.
Console.Out.WriteLine("***********************************");

10. Cadre c = new Cadre(2, "Nom2", "Prenom2", new


DateTime(1986, 4, 3), 3);

11. Console.Out.WriteLine(c);

12. Console.Out.WriteLine("Le salaire du cadre est: " +


c.GetSalaire());

13.
Console.Out.WriteLine("***********************************");

14. Patron.Ca = 17000000;

15. Patron p = new Patron(3, "Nom3", "Prenom3", new


DateTime(1970, 6, 6), 3);

16. Console.Out.WriteLine(p);

17. Console.Out.WriteLine("Le salaire du patron est: " +


p.GetSalaire());

18. Console.ReadKey();

19. }

20. }
//Source : www.exelib.net
// Interface

interface Animal {

public void animalSound(); // interface method (does not have a body)

public void sleep(); // interface method (does not have a body)

// Pig "implements" the Animal interface

class Pig implements Animal {

public void animalSound() {

// The body of animalSound() is provided here

System.out.println("The pig says: wee wee");

public void sleep() {

// The body of sleep() is provided here

System.out.println("Zzz");

class Main {

public static void main(String[] args) {

Pig myPig = new Pig(); // Create a Pig object

myPig.animalSound();

myPig.sleep();

}
Exercice 2 : Nous allons présenter dans cet exercice une interaction classique entre deux entités :
un Producteur et un Consommateur. Un Producteur crée des messages et les place dans une file,
tandis qu’un Consommateur les lit et les affiche.

Pour être réalistes, nous donnerons à la file une taille maximale. Et pour rendre les choses plus intéressantes,
nous rendrons le consommateur un peu feignant, en faisant en sorte qu’il s’exécute plus lentement que le
producteur. Cela signifie que le producteur doit parfois s’arrêter et attendre que le consommateur se mette à
travailler.

1.         Identifier sur un diagramme UML les classes de cette application (propriétés et méthodes).

2.         Dans une première version de cet exercice et pour des raisons de simplification, nous allons dériver les
classes Producteur et Consommateur de la classe Thread.
2.1. Quel problème soulève l’interaction Production/Consommation sur l’objet unique « file de
message ». Comment le résoudre en java ?
2.2. Après avoir commenté le code des classes Producteur et Consommateur (donné), écrire la classe
principale Distributeur qui simule l’application.

3.        Reprendre l’exercice en implémentant pour les


classes Producteur et Consommateur l’interface Runnable (2ième version).

4.        Développer la version « N Files – X Producteurs – Y Consommateurs » de cet exercice

import java.util.Vector ;
 
class Producteur extends Thread
{
    static final int MAXFILE = 5;
    static final int MAXMESSAGES = 50;
    private Vector messages;
    private int nbMessage;
 
    public Producteur() {
        messages = new Vector();
         nbMessage = 0;
    }
    public void run(){
        try {
            while (nbMessage < MAXMESSAGES) {
                insererMessage();
                System.out.println("Message numéro "+nbMessage+" produit");
                nbMessage++;
                sleep(1000);
            }
        }
        catch (InterruptedException e) {}
    }
    private void insererMessage () {
        while (messages.size() == MAXFILE) {
            System.out.println("File pleine");
        }
 
        messages.addElement(new java.util.Date().toString());
    }
    public String recupererMessage() {
        while (messages.size() == 0) {
            System.out.println("File vide");
        }
        String message = (String)messages.firstElement();
        messages.removeElement(message);
        return message;
    }
}
 
class Consommateur extends Thread
{
    static final int MAXMESSAGES = 50;
    private int nbMessage;
 
    Producteur producteur;
    Consommateur(Producteur p) {
            producteur = p ;
             nbMessage++;
    }
 
    public void run(){
        try {
            while (nbMessage < MAXMESSAGES) {
                String message = producteur.recupererMessage();
               System.out.println("Message numéro "+nbMessage+" recu : " +message);
                nbMessage++;
                sleep(2000);
            }
        }
        catch (InterruptedException e) {}
    }
}
 
 

Vous aimerez peut-être aussi