Exercices en Java (08-Programmation orientée objet)

Sébastien ESTIENNE

Ce huitième chapitre concerne la programmation orientée objet.
Le premier exercice « Parallélépipède » et le deuxième exercice « Bâtiment » illustrent le principe de l'héritage. L'exercice « Figure » et « Employé » portent sur la notion de classes abstraites. Le cinquième exercice « Forme » montre l'utilisation des interfaces. Le sixième exercice « GeoVecteur » utilise des méthodes statiques. Le septième exercice « Événement » porte sur la notion de classe interne.

Les principales notions abordées sont les suivantes :

- Modificateurs d'accès ;

- Héritage ;

- Super classe et sous-classe ;

- Réutilisabilité logicielle ;

- Polymorphisme ;

- Édition dynamique des liens ;

- Classes abstraites ;

- Interfaces ;

- Classes internes.

Pour faire et comprendre ces exercices, vous aurez besoin d'un certain nombre de notions sur le Java en rapport avec le chapitre. Pour cela, vous pouvez consulter les tutoriels java de developpez à l'adresse suivante : https://java.developpez.com/cours/

La documentation de l'API sur le site de Sun est aussi une mine d'or : http://java.sun.com/javase/6/docs/api/ ♪

- Titre : Exercices en Java (08-Programmation orientée objet)

- Auteur : Sébastien ESTIENNE

- Parution : 29 juillet 2007

- Mise à jour : 7 décembre 2008

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2007 Sébastien ESTIENNE. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Parallélépipède

- I-1. Énoncé

- I-2. Aperçu

- I-3. Démonstration

- I-4. Solution

- II. Bâtiment

- II-1. Énoncé

- II-2. Aperçu

- II-3. Démonstration

- II-4. Solution

- III. Figure

- III-1. Énoncé

- III-2. Aperçu

- III-3. Démonstration

- III-4. Solution

- IV. Employé

- IV-1. Énoncé

- IV-2. Aperçu

- IV-3. Démonstration

- IV-4. Solution

- V. Forme

- V-1. Énoncé

- V-2. Aperçu

- V-3. Démonstration

- V-4. Solution

- VI. GéoVecteur

- VI-1. Énoncé

- VI-2. Aperçu

- VI-3. Démonstration

- VI-4. Solution

- VII. Événement

- VII-1. Énoncé

- VII-2. Aperçu

- VII-3. Démonstration

- VII-4. Solution

- VIII. Remerciements

I - Parallélépipède

I-1 - Énoncé

Écrivez une classe Point avec les attributs suivants :

- x : l’abscisse du point ;

- y : l'ordonnée du point.

La classe Point doit disposer des constructeurs suivants :

- Point() ;

- Point(x, y).

La classe Point doit contenir les accesseurs (get) et mutateurs (set) et aussi une méthode toString() donnant une représentation du point.

Écrivez une classe Rectangle héritant de Point avec les attributs suivants :

- longueur : la longueur du rectangle ;

- largeur : la largeur du rectangle.

La classe Rectangle doit disposer des constructeurs suivants :

- Rectangle() ;

- Rectangle(x, y, longueur, largeur).

La classe Rectangle doit contenir des accesseurs (get) et mutateurs (set) et aussi les méthodes suivantes :

- aire() : donne l'aire du rectangle ;

- toString() : donne une représentation du rectangle (surcharge).

Écrivez une classe Parallelepipede héritant de Rectangle avec les attributs suivants :

- hauteur : la hauteur du parallélépipède.

La classe Parallelepipede doit disposer des constructeurs suivants :

- Parallelepipede() ;

- Parallelepipede(x, y, longueur, largeur, hauteur).

La classe Parallelepipede doit contenir des accesseurs (get) et mutateurs (set) et aussi les méthodes suivantes :

- aire() : donne l'aire du parallélépipède (surcharge) ;

- volume() : donne le volume du parallélépipède ;

- toString() : donne une représentation du parallélépipède (surcharge).

Écrivez aussi une classe TestParallelepipede afin de tester les classes.

Classes de l'API utilisées :

- java.awt.BorderLayout

- javax.swing.JFrame

- javax.swing.JScrollPane

- javax.swing.JTextArea

I-2 - Aperçu

Aperçu du résultat.

I-3 - Démonstration

Lancer avec Java Web Start

Note : javaws -viewer (accessible aussi dans le panneau de configuration Java) permet de voir les différentes applications JWS en cache et de les gérer.

I-4 - Solution

parallelepipede/Point.java

1. /*

2. * Fichier: Point.java

3. * Crée le: 29 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.parallelepipede;

27. /**

28. * <p>Classe représentant un point.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public class Point

32. {

33. /** L'abscisse du point. */

34. protected double x;

36. /** L'ordonnée du point. */

37. protected double y;

40. /**

41. * <p>Constructeur par défaut.</p>

42. */

43. public Point()

44. {

45. this(0.0, 0.0);

46. }

49. /**

50. * <p>Constructeur de Point avec l'abscisse et l'ordonnée spécifiées.</p>

51. * @param x L'abscisse du point.

52. * @param y L'ordonnée du point.

53. */

54. public Point(double x, double y)

55. {

56. setX(x);

57. setY(y);

58. }

61. /**

62. * <p>Retourne l'abscisse du point.</p>

63. * @return Renvoie l'abscisse du point.

64. */

65. public double getX()

66. {

67. return this.x;

68. }

71. /**

72. * <p>Modifie l'abscisse du point.</p>

73. * @param x L'abscisse du point.

74. */

75. public void setX(double x)

76. {

77. this.x = x;

78. }

81. /**

82. * <p>Retourne l'ordonnée du point.</p>

83. * @return Renvoie l'ordonnée du point.

84. */

85. public double getY()

86. {

87. return this.y;

88. }

91. /**

92. * <p>Modifie l'ordonnée du point.</p>

93. * @param y L'ordonnée du point.

94. */

95. public void setY(double y)

96. {

97. this.y = y;

98. }

101. /**

102. * <p>Retourne une représentation du point.</p>

103. * @return Renvoie une représentation du point.

104. */

105. @Override

106. public String toString()

107. {

108. return new StringBuilder("Point [ ").append(getX()).append("; ").append(getY()).append(" ]")

109. .toString();

110. }

111. }

parallelepipede/Rectangle.java

1. /*

2. * Fichier: Rectangle.java

3. * Crée le: 29 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.parallelepipede;

27. /**

28. * <p>Classe représentant un rectangle.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public class Rectangle extends Point

32. {

33. /** La longueur du rectangle. */

34. protected double longueur;

36. /** La largeur du rectangle. */

37. protected double largeur;

40. /**

41. * <p>Constructeur par défaut.</p>

42. */

43. public Rectangle()

44. {

45. this(0.0, 0.0, 0.0, 0.0);

46. }

49. /**

50. * <p>Constructeur de rectangle avec l'abscisse, l'ordonnée, la longueur et la largeur

51. * spécifiés.</p>

52. * @param x L'abscisse de la position du rectangle.

53. * @param y L'ordonnée de la position du rectangle.

54. * @param longueur La longueur du rectangle.

55. * @param largeur La largeur du rectangle.

56. */

57. public Rectangle(double x, double y, double longueur, double largeur)

58. {

59. super(x, y);

60. setLongueur(longueur);

61. setLargeur(largeur);

62. }

65. /**

66. * <p>Retourne la largeur du rectangle.</p>

67. * @return Renvoie la largeur du rectangle.

68. */

69. public double getLargeur()

70. {

71. return this.largeur;

72. }

75. /**

76. * <p>Modifie la largeur du rectangle.</p>

77. * @param largeur La largeur du rectangle.

78. */

79. public void setLargeur(double largeur)

80. {

81. if(largeur < 0.0)

82. {

83. this.largeur = 0.0;

84. }

85. else

86. {

87. this.largeur = largeur;

88. }

89. }

92. /**

93. * <p>Retourne la longueur du rectangle.</p>

94. * @return Renvoie la longueur du rectangle.

95. */

96. public double getLongueur()

97. {

98. return this.longueur;

99. }

102. /**

103. * <p>Modifie la longueur du rectangle.</p>

104. * @param longueur La longueur du rectangle.

105. */

106. public void setLongueur(double longueur)

107. {

108. if(longueur < 0.0)

109. {

110. this.longueur = 0.0;

111. }

112. else

113. {

114. this.longueur = longueur;

115. }

116. }

119. /**

120. * <p>Calcule l'aire du rectangle.</p>

121. * @return Retourne l'aire du rectangle.

122. */

123. public double aire()

124. {

125. return getLongueur() * getLargeur();

126. }

129. /**

130. * <p>Retourne une représentation du rectangle.</p>

131. * @return Renvoie une représentation du rectangle.

132. */

133. @Override

134. public String toString()

135. {

136. return new StringBuilder("Rectangle [ position : (").append(getX()).append("; ").append(

137. getY()).append("); longueur : ").append(getLongueur()).append("; largeur : ").append(

138. getLargeur()).append(" ]").toString();

139. }

140. }

parallelepipede/Parallelepipede.java

1. /*

2. * Fichier: Parallelepipede.java

3. * Crée le: 29 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.parallelepipede;

27. /**

28. * <p>Classe représentant un parallélépipède rectangle.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public class Parallelepipede extends Rectangle

32. {

33. /** La hauteur du parallélépipède rectangle. */

34. protected double hauteur;

37. /**

38. * <p>Constructeur par défaut.</p>

39. */

40. public Parallelepipede()

41. {

42. this(0.0, 0.0, 0.0, 0.0, 0.0);

43. }

46. /**

47. * <p>Constructeur de parallélépipède rectangle avec l'abscisse, l'ordonnée, la longueur, la

48. * largeur et la hauteur spécifiées.</p>

49. * @param x L'abscisse de la position du parallélépipède rectangle.

50. * @param y L'ordonnée de la position du parallélépipède rectangle.

51. * @param longueur La longueur du parallélépipède rectangle.

52. * @param largeur La largeur du parallélépipède rectangle.

53. * @param hauteur La hauteur du parallélépipède rectangle.

54. */

55. public Parallelepipede(double x, double y, double longueur, double largeur, double hauteur)

56. {

57. super(x, y, longueur, largeur);

58. setHauteur(hauteur);

59. }

62. /**

63. * <p>Retourne la hauteur du parallélépipède rectangle.</p>

64. * @return Renvoie la hauteur du parallélépipède rectangle.

65. */

66. public double getHauteur()

67. {

68. return this.hauteur;

69. }

72. /**

73. * <p>Modifie la hauteur du parallélépipède rectangle.</p>

74. * @param hauteur La hauteur du parallélépipède rectangle.

75. */

76. public void setHauteur(double hauteur)

77. {

78. if(hauteur < 0.0)

79. {

80. this.hauteur = 0.0;

81. }

82. else

83. {

84. this.hauteur = hauteur;

85. }

86. }

89. /**

90. * <p>Calcule l'aire du parallélépipède rectangle.</p>

91. * @return Retourne l'aire du parallélépipède rectangle.

92. */

93. @Override

94. public double aire()

95. {

96. return 2 * getLongueur() * getLargeur() + 2 * getLongueur() * getHauteur() + 2 * getLargeur()

97. * getHauteur();

98. }

101. /**

102. * <p>Calcule le volume du parallélépipède rectangle.</p>

103. * @return Retourne le volume du parallélépipède rectangle.

104. */

105. public double volume()

106. {

107. return getLongueur() * getLargeur() * getHauteur();

108. }

111. /**

112. * <p>Retourne une représentation du parallélépipède rectangle.</p>

113. * @return Renvoie une représentation du parallélépipède rectangle.

114. */

115. @Override

116. public String toString()

117. {

118. return new StringBuilder("Parallélépipède rectangle [ position : (").append(getX()).append(

119. "; ").append(getY()).append("); longueur : ").append(getLongueur()).append(

120. "; largeur : ").append(getLargeur()).append("; hauteur : ").append(getHauteur())

121. .append(" ]").toString();

122. }

123. }

parallelepipede/TestParallelepipede.java

1. /*

2. * Fichier: TestParallelepipede.java

3. * Crée le: 29 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.parallelepipede;

27. import java.awt.BorderLayout;

29. import javax.swing.JFrame;

30. import javax.swing.JScrollPane;

31. import javax.swing.JTextArea;

35. /**

36. * <p>Classe de test pour les classes Point, Rectangle et Parallelepipede.</p>

37. * @author Sébastien ESTIENNE.

38. */

39. public class TestParallelepipede extends JFrame

40. {

41. /**

42. * <p>Serial version UID.</p>

43. */

44. private static final long serialVersionUID = 1L;

47. /**

48. * <p>Construction de l'application.</p>

49. */

50. public TestParallelepipede()

51. {

52. // Appel du constructeur de la classe JFrame.

53. super("Parallélépipède");

55. // Ajoute les composants au conteneur.

56. JTextArea zoneSortie = new JTextArea();

57. getContentPane().add(new JScrollPane(zoneSortie), BorderLayout.CENTER);

59. // Texte de sortie.

60. StringBuilder sortie = new StringBuilder();

62. // Point.

63. Point p = new Point(1.3, 4.8);

64. sortie.append(p).append('\n');

66. // Rectangle.

67. Rectangle r = new Rectangle(2.5, 6.2, 5.0, 3.0);

68. sortie.append(r).append('\n');

69. sortie.append("Aire : ").append(r.aire()).append('\n');

71. // Parallélépipède.

72. Parallelepipede m = new Parallelepipede(1.7, 3.2, 7.0, 4.0, 2.0);

73. sortie.append(m).append('\n');

74. sortie.append("Aire : ").append(m.aire()).append('\n');

75. sortie.append("Volume : ").append(m.volume()).append('\n');

77. // Met à jour la zone de sortie.

78. zoneSortie.setText(sortie.toString());

80. // Modifie les propriétés de la fenêtre.

81. setSize(600, 200);

82. setLocation(100, 100);

83. setVisible(true);

84. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

85. }

88. /**

89. * <p>Débute l'exécution du test.</p>

90. * @param args Les paramètres de la ligne de commande.

91. */

92. public static void main(String[] args)

93. {

94. new TestParallelepipede();

95. }

96. }

II - Bâtiment

II-1 - Énoncé

Écrivez une classe Batiment avec les attributs suivants :

- adresse : l'adresse du bâtiment.

La classe Batiment doit disposer des constructeurs suivants :

- Batiment() ;

- Batiment(adresse).

La classe Batiment doit contenir des accesseurs (get) et mutateurs (set) pour les différents attributs. La classe Batiment doit contenir une méthode toString() donnant une représentation du bâtiment.

Écrivez une classe Maison héritant de Batiment avec les attributs suivants :

- nbPieces : le nombre de pièces de la maison.

La classe Maison doit disposer des constructeurs suivants :

- Maison() ;

- Maison(adresse, nbPieces).

La classe Maison doit contenir des accesseurs (get) et mutateurs (set) pour les différents attributs. La classe Maison doit contenir une méthode toString() donnant une représentation de la maison.

Écrivez une classe Immeuble héritant de Bâtiment avec les attributs suivants :

- nbAppart : le nombre d'appartements de l'immeuble.

La classe Immeuble doit disposer des constructeurs suivants :

- Immeuble() ;

- Immeuble(adresse, nbAppart).

La classe Immeuble doit contenir des accesseurs (get) et mutateurs (set) pour les différents attributs. La classe Immeuble doit contenir une méthode toString() donnant une représentation de l'immeuble.

Écrivez aussi une classe TestBatiment afin de tester les classes.

Classes de l'API utilisées :

- java.awt.BorderLayout

- javax.swing.JFrame

- javax.swing.JScrollPane

- javax.swing.JTextArea

II-2 - Aperçu

Aperçu du résultat.

II-3 - Démonstration

Lancer avec Java Web Start

Note : javaws -viewer (accessible aussi dans le panneau de configuration Java) permet de voir les différentes applications JWS en cache et de les gérer.

II-4 - Solution

batiment/Batiment.java

1. /*

2. * Fichier: Batiment.java

3. * Crée le: 29 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.batiment;

27. /**

28. * <p>Classe représentant un bâtiment.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public class Batiment

32. {

33. /** L'adresse du bâtiment. */

34. protected String adresse;

37. /**

38. * <p>Constructeur par défaut.</p>

39. */

40. public Batiment()

41. {

42. this("");

43. }

46. /**

47. * <p>Constructeur de bâtiment avec une adresse spécifiée.</p>

48. * @param adresse L'adresse du bâtiment.

49. */

50. public Batiment(String adresse)

51. {

52. setAdresse(adresse);

53. }

56. /**

57. * <p>Retourne l'adresse du bâtiment.</p>

58. * @return Renvoie l'adresse du bâtiment.

59. */

60. public String getAdresse()

61. {

62. return this.adresse;

63. }

66. /**

67. * <p>Modifie l'adresse du bâtiment.</p>

68. * @param adresse L'adresse du bâtiment.

69. */

70. public void setAdresse(String adresse)

71. {

72. this.adresse = adresse;

73. }

76. /**

77. * <p>Retourne une représentation d'un bâtiment.</p>

78. * @return Renvoie une représentation d'un bâtiment.

79. */

80. @Override

81. public String toString()

82. {

83. return new StringBuilder("Bâtiment [ adresse : ").append(getAdresse()).append(" ]")

84. .toString();

85. }

86. }

batiment/Maison.java

1. /*

2. * Fichier: Maison.java

3. * Crée le: 29 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.batiment;

27. /**

28. * <p>Classe représentant une maison.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public class Maison extends Batiment

32. {

33. /** Le nombre de pièces de la maison. */

34. protected int nbPieces;

37. /**

38. * <p>Constructeur par défaut.</p>

39. */

40. public Maison()

41. {

42. this("", 0);

43. }

46. /**

47. * <p>Constructeur de maison avec une adresse et un nombre de pièces spécifiés.</p>

48. * @param adresse L'adresse de la maison.

49. * @param nbPieces Le nombre de pièces de la maison.

50. */

51. public Maison(String adresse, int nbPieces)

52. {

53. super(adresse);

54. setNbPieces(nbPieces);

55. }

58. /**

59. * <p>Retourne le nombre de pièces de la maison.</p>

60. * @return Renvoie le nombre de pièces de la maison.

61. */

62. public int getNbPieces()

63. {

64. return this.nbPieces;

65. }

68. /**

69. * <p>Modifie le nombre de pièces de la maison.</p>

70. * @param nbPieces Le nombre de pièces de la maison.

71. */

72. public void setNbPieces(int nbPieces)

73. {

74. if(nbPieces < 0)

75. {

76. this.nbPieces = 0;

77. }

78. else

79. {

80. this.nbPieces = nbPieces;

81. }

82. }

85. /**

86. * <p>Retourne une représentation d'une maison.</p>

87. * @return Renvoie une représentation d'une maison.

88. */

89. @Override

90. public String toString()

91. {

92. return new StringBuilder("Maison [ adresse : ").append(getAdresse()).append("; nbPieces : ")

93. .append(getNbPieces()).append(" ]").toString();

94. }

95. }

batiment/Immeuble.java

1. /*

2. * Fichier: Immeuble.java

3. * Crée le: 29 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.batiment;

27. /**

28. * <p>Classe représentant un immeuble.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public class Immeuble extends Batiment

32. {

33. /** Le nombre d'appartements de l'immeuble. */

34. protected int nbAppart;

37. /**

38. * <p>Constructeur par défaut.</p>

39. */

40. public Immeuble()

41. {

42. this("", 0);

43. }

46. /**

47. * <p>Constructeur d'Immeuble avec une adresse et un nombre d'appartements spécifiés.</p>

48. * @param adresse L'adresse de l'immeuble.

49. * @param nbAppart Le nombre d'appartements de l'immeuble.

50. */

51. public Immeuble(String adresse, int nbAppart)

52. {

53. super(adresse);

54. setNbAppart(nbAppart);

55. }

58. /**

59. * <p>Retourne le nombre d'appartements de l'immeuble.</p>

60. * @return Renvoie le nombre d'appartements de l'immeuble.

61. */

62. public int getNbAppart()

63. {

64. return this.nbAppart;

65. }

68. /**

69. * <p>Modifie le nombre d'appartements de l'immeuble.</p>

70. * @param nbAppart Le nombre d'appartements de l'immeuble.

71. */

72. public void setNbAppart(int nbAppart)

73. {

74. if(nbAppart < 0)

75. {

76. this.nbAppart = 0;

77. }

78. else

79. {

80. this.nbAppart = nbAppart;

81. }

82. }

85. /**

86. * <p>Retourne une représentation d'un immeuble.</p>

87. * @return Renvoie une représentation d'un immeuble.

88. */

89. @Override

90. public String toString()

91. {

92. return new StringBuilder("Immeuble [ adresse : ").append(getAdresse()).append(

93. "; nb Appart : ").append(getNbAppart()).append(" ]").toString();

94. }

95. }

batiment/TestBatiment.java

1. /*

2. * Fichier: TestBatiment.java

3. * Crée le: 29 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.batiment;

27. import java.awt.BorderLayout;

29. import javax.swing.JFrame;

30. import javax.swing.JScrollPane;

31. import javax.swing.JTextArea;

35. /**

36. * <p>Classe de test pour les classes Batiment, Maison et Immeuble.</p>

37. * @author Sébastien ESTIENNE.

38. */

39. public class TestBatiment extends JFrame

40. {

41. /**

42. * <p>Serial version UID.</p>

43. */

44. private static final long serialVersionUID = 1L;

47. /**

48. * <p>Construction de l'application.</p>

49. */

50. public TestBatiment()

51. {

52. // Appel du constructeur de la classe JFrame.

53. super("Bâtiment");

55. // Ajoute les composants au conteneur.

56. JTextArea zoneSortie = new JTextArea();

57. getContentPane().add(new JScrollPane(zoneSortie), BorderLayout.CENTER);

59. // Texte de sortie.

60. StringBuilder sortie = new StringBuilder();

62. // Bâtiment.

63. Batiment b = new Batiment("4 avenue du Palys");

64. sortie.append(b).append('\n');

66. // Maison.

67. Maison m = new Maison("12 rue Pimer", 4);

68. sortie.append(m).append('\n');

70. // Immeuble.

71. Immeuble i = new Immeuble("7 boulevard des Pins", 24);

72. sortie.append(i).append('\n');

74. // Met à jour la zone de sortie.

75. zoneSortie.setText(sortie.toString());

77. // Modifie les propriétés de la fenêtre.

78. setSize(600, 200);

79. setLocation(100, 100);

80. setVisible(true);

81. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

82. }

85. /**

86. * <p>Débute l'exécution du test.</p>

87. * @param args Les paramètres de la ligne de commande.

88. */

89. public static void main(String[] args)

90. {

91. new TestBatiment();

92. }

93. }

III - Figure

III-1 - Énoncé

Écrivez une classe abstraite Figure avec les attributs suivants :

- nom : le nom de la figure.

La classe Figure doit contenir des accesseurs (get) et mutateurs pour les différents attributs et les méthodes suivantes :

- aire() : l'aire de la figure (abstraite) ;

- toString() : donne une représentation de la figure.

Écrivez une classe Disque héritant de Figure avec les attributs suivants :

- centre : le centre du disque ;

- rayon : le rayon du disque.

La classe Disque doit disposer des constructeurs suivants :

- Disque() ;

- Disque(centre, rayon).

La classe Disque doit contenir des accesseurs (get) et mutateurs (set) pour les différents attributs et les méthodes suivantes :

- aire() : donne l'aire du disque ;

- toString(): donne une représentation du disque.

Écrivez une classe Rectangle héritant de Figure avec les attributs suivants :

- longueur : la longueur du rectangle,

- largeur : la largeur du rectangle.

La classe Rectangle doit disposer des constructeurs suivants :

- Rectangle() ;

- Rectangle(longueur, largeur).

La classe Rectangle doit contenir des accesseurs (get) et mutateurs (set) pour les différents attributs et les méthodes suivantes :

- aire() : donne l'aire du rectangle ;

- toString() : donne une représentation du rectangle.

Écrivez aussi une classe TestFigure afin de tester les classes.
Utilisez les propriétés du polymorphisme.

Classes de l'API utilisées :

- java.awt.geom.Point2D

- java.awt.BorderLayout

- java.awt.geom.Point2D

- java.text.DecimalFormat

- javax.swing.JFrame

- javax.swing.JScrollPane

- javax.swing.JTextArea

III-2 - Aperçu

Aperçu du résultat.

III-3 - Démonstration

Lancer avec Java Web Start

Note : javaws -viewer (accessible aussi dans le panneau de configuration Java) permet de voir les différentes applications JWS en cache et de les gérer.

III-4 - Solution

figure/Figure.java

1. /*

2. * Fichier: Figure.java

3. * Crée le: 30 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.figure;

27. /**

28. * <p>Classe représentant une figure.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public abstract class Figure

32. {

33. /** Le nom de la figure. */

34. protected String nom;

37. /**

38. * <p>Constructeur par défaut.</p>

39. */

40. public Figure()

41. {

42. this("Figure");

43. }

46. /**

47. * <p>Constructeur de figure avec un nom spécifié.</p>

48. * @param nom Le nom de la figure.

49. */

50. public Figure(String nom)

51. {

52. setNom(nom);

53. }

56. /**

57. * <p>Retourne le nom de la figure.</p>

58. * @return Renvoie le nom de la figure.

59. */

60. public String getNom()

61. {

62. return this.nom;

63. }

66. /**

67. * <p>Modifie le nom de la figure.</p>

68. * @param nom Le nom de la figure.

69. */

70. public void setNom(String nom)

71. {

72. this.nom = nom;

73. }

76. /**

77. * <p>Calcule l'aire de la figure.</p>

78. * @return Retourne l'aire de la figure.

79. */

80. public abstract double aire();

83. /**

84. * <p>Retourne une représentation de la figure.</p>

85. * @return Renvoie une représentation de la figure.

86. */

87. @Override

88. public String toString()

89. {

90. return getNom();

91. }

92. }

figure/Disque.java

1. /*

2. * Fichier: Disque.java

3. * Crée le: 30 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.figure;

27. import java.awt.geom.Point2D;

31. /**

32. * <p>Classe représentant un disque.</p>

33. * @author Sébastien ESTIENNE.

34. */

35. public class Disque extends Figure

36. {

37. /** Le centre du disque. */

38. protected Point2D.Double centre;

40. /** Le rayon du disque. */

41. protected double rayon;

44. /**

45. * <p>Constructeur par défaut.</p>

46. */

47. public Disque()

48. {

49. this(new Point2D.Double(0.0, 0.0), 0);

50. }

53. /**

54. * <p>Constructeur de disque avec un nom, un centre et un rayon spécifié.</p>

55. * @param centre Le centre du disque.

56. * @param rayon Le rayon du disque.

57. */

58. public Disque(Point2D.Double centre, double rayon)

59. {

60. super("Disque");

61. setCentre((Point2D.Double) centre.clone());

62. setRayon(rayon);

63. }

66. /**

67. * <p>Calcule l'aire de la figure.</p>

68. * @return Retourne l'aire de la figure.

69. */

70. @Override

71. public double aire()

72. {

73. return 2 * Math.PI * getRayon();

74. }

77. /**

78. * <p>Retourne le centre du disque.</p>

79. * @return Renvoie le centre du disque.

80. */

81. public Point2D.Double getCentre()

82. {

83. return this.centre;

84. }

87. /**

88. * <p>Modifie le centre du disque.</p>

89. * @param centre Le centre du disque.

90. */

91. public void setCentre(Point2D.Double centre)

92. {

93. this.centre = centre;

94. }

97. /**

98. * <p>Retourne le rayon du disque.</p>

99. * @return Renvoie Le rayon du disque.

100. */

101. public double getRayon()

102. {

103. return this.rayon;

104. }

107. /**

108. * <p>Modifie le rayon du disque.</p>

109. * @param rayon Le rayon du disque.

110. */

111. public void setRayon(double rayon)

112. {

113. if(rayon < 0.0)

114. {

115. this.rayon = 0.0;

116. }

117. else

118. {

119. this.rayon = rayon;

120. }

121. }

124. /**

125. * <p>Retourne une représentation du disque.</p>

126. * @return Renvoie une représentation du disque.

127. */

128. @Override

129. public String toString()

130. {

131. return new StringBuilder(getNom()).append(" [ centre : (").append(getCentre().getX()).append(

132. "; ").append(getCentre().getY()).append("); rayon:").append(getRayon()).append(" ]")

133. .toString();

134. }

135. }

figure/Rectangle.java

1. /*

2. * Fichier: Rectangle.java

3. * Crée le: 30 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.figure;

27. /**

28. * <p>Classe représentant un rectangle.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public class Rectangle extends Figure

32. {

33. /** La longueur du rectangle. */

34. protected double longueur;

36. /** La largeur du rectangle. */

37. protected double largeur;

40. /**

41. * <p>Constructeur par défaut.</p>

42. */

43. public Rectangle()

44. {

45. this(0.0, 0.0);

46. }

49. /**

50. * <p>Constructeur de rectangle avec une longueur et une largeur spécifiées.</p>

51. * @param longueur La longueur du rectangle.

52. * @param largeur La largeur du rectangle.

53. */

54. public Rectangle(double longueur, double largeur)

55. {

56. super("Rectangle");

57. setLongueur(longueur);

58. setLargeur(largeur);

59. }

62. /**

63. * <p>Calcule l'aire de la figure.</p>

64. * @return Retourne l'aire de la figure.

65. */

66. @Override

67. public double aire()

68. {

69. return getLongueur() * getLargeur();

70. }

73. /**

74. * <p>Retourne la largeur du rectangle.</p>

75. * @return Renvoie la largeur du rectangle.

76. */

77. public double getLargeur()

78. {

79. return this.largeur;

80. }

83. /**

84. * <p>Modifie la largeur du rectangle.</p>

85. * @param largeur La largeur du rectangle.

86. */

87. public void setLargeur(double largeur)

88. {

89. if(largeur < 0.0)

90. {

91. this.largeur = 0.0;

92. }

93. else

94. {

95. this.largeur = largeur;

96. }

97. }

100. /**

101. * <p>Retourne la longueur du rectangle.</p>

102. * @return Renvoie la longueur du rectangle.

103. */

104. public double getLongueur()

105. {

106. return this.longueur;

107. }

110. /**

111. * <p>Modifie la longueur du rectangle.</p>

112. * @param longueur La longueur du rectangle.

113. */

114. public void setLongueur(double longueur)

115. {

116. if(longueur < 0.0)

117. {

118. this.longueur = 0.0;

119. }

120. else

121. {

122. this.longueur = longueur;

123. }

124. }

127. /**

128. * <p>Retourne une représentation du rectangle.</p>

129. * @return Renvoie une représentation du rectangle.

130. */

131. @Override

132. public String toString()

133. {

134. return new StringBuilder(getNom()).append(" [ longueur : ").append(getLongueur()).append(

135. "; largeur : ").append(getLargeur()).append(" ]").toString();

136. }

137. }

figure/TestFigure.java

1. /*

2. * Fichier: TestFigure.java

3. * Crée le: 30 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.figure;

27. import java.awt.BorderLayout;

28. import java.awt.geom.Point2D;

29. import java.text.DecimalFormat;

31. import javax.swing.JFrame;

32. import javax.swing.JScrollPane;

33. import javax.swing.JTextArea;

37. /**

38. * <p>Classe de test pour les classes Figure, Disque et Rectangle.</p>

39. * @author Sébastien ESTIENNE.

40. */

41. public class TestFigure extends JFrame

42. {

43. /**

44. * <p>Serial version UID.</p>

45. */

46. private static final long serialVersionUID = 1L;

49. /**

50. * <p>Construction de l'application.</p>

51. */

52. public TestFigure()

53. {

54. // Appel du constructeur de la classe JFrame.

55. super("Figure");

57. // Ajoute les composants au conteneur.

58. JTextArea zoneSortie = new JTextArea();

59. getContentPane().add(new JScrollPane(zoneSortie), BorderLayout.CENTER);

61. // Texte de sortie.

62. StringBuilder sortie = new StringBuilder();

64. // Formateur de nombres.

65. DecimalFormat dFormat = new DecimalFormat();

66. dFormat.setMinimumIntegerDigits(1);

67. dFormat.setMaximumFractionDigits(2);

69. // Une figure.

70. Figure fig;

72. // Disque.

73. Disque d = new Disque(new Point2D.Double(3.1, 5.7), 2.5);

74. fig = d;

75. sortie.append(fig).append('\n');

76. sortie.append("Aire : ").append(dFormat.format(fig.aire())).append('\n');

78. // Rectangle.

79. Rectangle r = new Rectangle(7.0, 3.0);

80. fig = r;

81. sortie.append(fig).append('\n');

82. sortie.append("Aire : ").append(dFormat.format(fig.aire())).append('\n');

84. // Met à jour la zone de sortie.

85. zoneSortie.setText(sortie.toString());

87. // Modifie les propriétés de la fenêtre.

88. setSize(600, 200);

89. setLocation(100, 100);

90. setVisible(true);

91. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

92. }

95. /**

96. * <p>Débute l'exécution du test.</p>

97. * @param args Les paramètres de la ligne de commande.

98. */

99. public static void main(String[] args)

100. {

101. new TestFigure();

102. }

103. }

IV - Employé

IV-1 - Énoncé

Écrivez une classe abstraite Employe avec les attributs suivants :

- nom : le nom de famille de l'employé ;

- prenom : le prénom de l'employé.

La classe Employe doit disposer des constructeurs suivants :

- Employe() ;

- Employe(nom, prenom).

La classe Employe doit contenir des accesseurs (get) et mutateurs (set) pour les différents attributs et les méthodes suivantes :

- toString() : retourne une représentation d'un employé ;

- gains() : retourne le salaire (abstraite).

Écrivez une classe Patron héritant de Employe avec les attributs suivants :

- salaire : le salaire mensuel.

La classe Patron doit disposer des constructeurs suivants :

- Patron() ;

- Patron(nom, prenom, salaire).

La classe Patron doit contenir des accesseurs (get) et mutateurs (set) pour les différents attributs et les méthodes suivantes :

- toString() : retourne une représentation du patron ;

- gains() : retourne le salaire du patron.

Écrivez une classe TravailleurCommission héritant de Employe avec les attributs suivants :

- salaire : le salaire mensuel de base ;

- commission : montant de la commission par article vendus ;

- quantite : nombre d'articles vendus par mois.

La classe TravailleurCommission doit disposer des constructeurs suivants :

- TravailleurCommission() ;

- TravailleurCommission(nom, prenom, salaire, commision).

La classe TravailleurCommission doit contenir des accesseurs (get) et mutateurs (set) pour les différents attributs et les méthodes suivantes :

- toString() : retourne une représentation du travailleur à la commission ;

- gains() : retourne la rétribution totale du travailleur à la commission.

Écrivez une classe TravailleurHoraire héritant de Employe avec les attributs suivants :

- retribution : la rétribution horaire ;

- heures : le nombre d'heures de travail par mois.

La classe TravailleurHoraire doit disposer des constructeurs suivants :

- TravailleurHoraire() ;

- TravailleurHoraire(nom, prenom, retribution).

La classe TravailleurHoraire doit contenir des accesseurs (get) et mutateurs (set) pour les différents attributs et les méthodes suivantes :

- toString() : retourne une représentation du travailleur horaire ;

- gains() : retourne la rétribution totale du travailleur horaire.

Écrivez aussi une classe TestEmploye afin de tester les classes.
Utilisez les propriétés du polymorphisme.

Classes de l'API utilisées :

- java.awt.BorderLayout

- javax.swing.JFrame

- javax.swing.JScrollPane

- javax.swing.JTextArea

IV-2 - Aperçu

Aperçu du résultat.

IV-3 - Démonstration

Lancer avec Java Web Start

Note : javaws -viewer (accessible aussi dans le panneau de configuration Java) permet de voir les différentes applications JWS en cache et de les gérer.

IV-4 - Solution

employe/Employe.java

1. /*

2. * Fichier: Employe.java

3. * Crée le: 30 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.employe;

27. /**

28. * <p>Classe représentant un employé.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public abstract class Employe

32. {

33. /** Le nom de l'employé. */

34. protected String nom;

36. /** Le prénom de l'employé. */

37. protected String prenom;

40. /**

41. * <p>Constructeur par défaut.</p>

42. */

43. public Employe()

44. {

45. this("", "");

46. }

49. /**

50. * <p>Constructeur d'employé avec un nom et un prénom spécifiés.</p>

51. * @param nom Le nom de l'employé.

52. * @param prenom Le prénom de l'employé.

53. */

54. protected Employe(String nom, String prenom)

55. {

56. setNom(nom);

57. setPrenom(prenom);

58. }

61. /**

62. * <p>Calcule le salaire de l'employé par mois.</p>

63. * @return Retourne le salaire de l'employé par mois.

64. */

65. public abstract double gains();

68. /**

69. * <p>Retourne le nom de l'employé.</p>

70. * @return Renvoie le nom de l'employé.

71. */

72. public String getNom()

73. {

74. return this.nom;

75. }

78. /**

79. * <p>Modifie le nom de l'employé.</p>

80. * @param nom Le nom de l'employé.

81. */

82. public void setNom(String nom)

83. {

84. this.nom = nom;

85. }

88. /**

89. * <p>Retourne le prénom de l'employé.</p>

90. * @return Renvoie le prénom de l'employé.

91. */

92. public String getPrenom()

93. {

94. return this.prenom;

95. }

98. /**

99. * <p>Modifie le prénom de l'employé.</p>

100. * @param prenom Le prénom de l'employé.

101. */

102. public void setPrenom(String prenom)

103. {

104. this.prenom = prenom;

105. }

108. /**

109. * <p>Retourne une représentation de l'employé.</p>

110. * @return Renvoie une représentation de l'employé.

111. */

112. @Override

113. public String toString()

114. {

115. return new StringBuilder("Employé [ nom : ").append(getNom()).append("; prénom : ").append(

116. getPrenom()).append(" ]").toString();

117. }

118. }

employe/Patron.java

1. /*

2. * Fichier: Patron.java

3. * Crée le: 30 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.employe;

27. /**

28. * <p>Classe représentant un patron.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public class Patron extends Employe

32. {

33. /** Le salaire mensuel du patron. */

34. protected double salaire;

37. /**

38. * <p>Constructeur par défaut.</p>

39. */

40. public Patron()

41. {

42. this("", "", 0.0);

43. }

46. /**

47. * <p>Constructeur de patron avec un nom, un prénom et un salaire spécifiés.</p>

48. * @param nom Le nom du patron.

49. * @param prenom Le prénom du patron.

50. * @param salaire Le salaire du patron.

51. */

52. public Patron(String nom, String prenom, double salaire)

53. {

54. super(nom, prenom);

55. setSalaire(salaire);

56. }

59. /**

60. * <p>Calcule le salaire de l'employé par mois.</p>

61. * @return Retourne le salaire de l'employé par mois.

62. */

63. @Override

64. public double gains()

65. {

66. return getSalaire();

67. }

70. /**

71. * <p>Retourne le salaire mensuel du patron.</p>

72. * @return Renvoie le salaire mensuel du patron.

73. */

74. public double getSalaire()

75. {

76. return this.salaire;

77. }

80. /**

81. * <p>Modifie le salaire mensuel du patron.</p>

82. * @param salaire Le salaire mensuel du patron.

83. */

84. public void setSalaire(double salaire)

85. {

86. if(salaire < 0)

87. {

88. this.salaire = 0.0;

89. }

90. else

91. {

92. this.salaire = salaire;

93. }

94. }

97. /**

98. * <p>Retourne une représentation du patron.</p>

99. * @return Renvoie une représentation du patron.

100. */

101. @Override

102. public String toString()

103. {

104. return new StringBuilder("Patron [ nom : ").append(getNom()).append("; prénom : ").append(

105. getPrenom()).append("; salaire : ").append(gains()).append(" ]").toString();

106. }

107. }

employe/TravailleurCommission.java

1. /*

2. * Fichier: TravailleurCommission.java

3. * Crée le: 30 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.employe;

27. /**

28. * <p>Classe représentant un travailleur à la commission.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public class TravailleurCommission extends Employe

32. {

33. /** Le salaire mensuel de base. */

34. protected double salaire;

36. /** Le montant de la commission par article vendu. */

37. protected double commission;

39. /** Le nombre d'articles vendus par mois. */

40. protected int quantite;

43. /**

44. * <p>Constructeur par défaut.</p>

45. */

46. public TravailleurCommission()

47. {

48. this("", "", 0.0, 0.0);

49. }

52. /**

53. * <p>Constructeur de travailleur à la commission avec un nom, un prénom, un salaire et la

54. * commission spécifiée.</p>

55. * @param nom Le nom du travailleur à la commission.

56. * @param prenom Le prénom du travailleur à la commission.

57. * @param salaire Le salaire du travailleur à la commission.

58. * @param commission La commission du travailleur à la commission.

59. */

60. TravailleurCommission(String nom, String prenom, double salaire, double commission)

61. {

62. super(nom, prenom);

63. setSalaire(salaire);

64. setCommission(commission);

65. }

68. /**

69. * <p>Calcule le salaire de l'employé par mois.</p>

70. * @return Retourne le salaire de l'employé par mois.

71. */

72. @Override

73. public double gains()

74. {

75. return getSalaire() + getQuantite() * getCommission();

76. }

79. /**

80. * <p>Retourne le montant de la commission par article vendu.</p>

81. * @return Renvoie le montant de la commission par article vendu.

82. */

83. public double getCommission()

84. {

85. return this.commission;

86. }

89. /**

90. * <p>Modifie montant de la commission par article vendu.</p>

91. * @param commission Le montant de la commission par article vendu.

92. */

93. public void setCommission(double commission)

94. {

95. if(commission < 0.0)

96. {

97. this.commission = 0.0;

98. }

99. else

100. {

101. this.commission = commission;

102. }

103. }

106. /**

107. * <p>Retourne le nombre d'articles vendus par mois.</p>

108. * @return Renvoie le nombre d'articles vendus par mois.

109. */

110. public int getQuantite()

111. {

112. return this.quantite;

113. }

116. /**

117. * <p>Modifie le nombre d'articles vendus par mois.</p>

118. * @param quantite Le nombre d'articles vendus par mois.

119. */

120. public void setQuantite(int quantite)

121. {

122. if(quantite < 0)

123. {

124. this.quantite = 0;

125. }

126. else

127. {

128. this.quantite = quantite;

129. }

130. }

133. /**

134. * <p>Retourne le salaire mensuel de base.</p>

135. * @return Renvoie le salaire mensuel de base..

136. */

137. public double getSalaire()

138. {

139. return this.salaire;

140. }

143. /**

144. * <p>Modifie le salaire mensuel de base.</p>

145. * @param salaire Le salaire mensuel de base.

146. */

147. public void setSalaire(double salaire)

148. {

149. if(salaire < 0.0)

150. {

151. this.salaire = 0.0;

152. }

153. else

154. {

155. this.salaire = salaire;

156. }

157. }

160. /**

161. * <p>Retourne une représentation du travailleur à la commission.</p>

162. * @return Renvoie une représentation du travailleur à la commission.

163. */

164. @Override

165. public String toString()

166. {

167. return new StringBuilder("TravailleurCommission [ nom : ").append(getNom()).append(

168. "; prénom : ").append(getPrenom()).append("; salaire : ").append(gains())

169. .append(" ]").toString();

170. }

171. }

employe/TravailleurHoraire.java

1. /*

2. * Fichier: TravailleurHoraire.java

3. * Crée le: 30 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.employe;

27. /**

28. * <p>Classe représentant un travailleur horaire.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public class TravailleurHoraire extends Employe

32. {

33. /** La rétribution horaire. */

34. protected double retribution;

36. /** Le nombre d'heures de travail par mois. */

37. protected int heures;

40. /**

41. * <p>Constructeur par défaut.</p>

42. */

43. public TravailleurHoraire()

44. {

45. this("", "", 0.0);

46. }

49. /**

50. * <p>Constructeur de travailleur horaire avec un nom, un prénom, une rétribution horaire

51. * spécifiés.</p>

52. * @param nom Le nom du travailleur horaire.

53. * @param prenom Le prénom du travailleur horaire.

54. * @param retribution La rétribution horaire.

55. */

56. TravailleurHoraire(String nom, String prenom, double retribution)

57. {

58. super(nom, prenom);

59. setRetribution(retribution);

60. }

63. /**

64. * <p>Calcule le salaire de l'employé par mois.</p>

65. * @return Retourne le salaire de l'employé par mois.

66. */

67. @Override

68. public double gains()

69. {

70. return getHeures() * getRetribution();

71. }

74. /**

75. * <p>Retourne le nombre d'heures de travail par mois.</p>

76. * @return Renvoie le nombre d'heures de travail par mois.

77. */

78. public int getHeures()

79. {

80. return this.heures;

81. }

84. /**

85. * <p>Modifie le nombre d'heures de travail par mois.</p>

86. * @param heures Le nombre d'heures de travail par mois.

87. */

88. public void setHeures(int heures)

89. {

90. if(heures < 0)

91. {

92. this.heures = 0;

93. }

94. else

95. {

96. this.heures = heures;

97. }

98. }

101. /**

102. * <p>Retourne la rétribution horaire.</p>

103. * @return Renvoie la rétribution horaire.

104. */

105. public double getRetribution()

106. {

107. return this.retribution;

108. }

111. /**

112. * <p>Modifie la rétribution horaire.</p>

113. * @param retribution La rétribution horaire.

114. */

115. public void setRetribution(double retribution)

116. {

117. if(retribution < 0.0)

118. {

119. this.retribution = 0.0;

120. }

121. else

122. {

123. this.retribution = retribution;

124. }

125. }

128. /**

129. * <p>Retourne une représentation du travailleur horaire.</p>

130. * @return Renvoie une représentation du travailleur horaire.

131. */

132. @Override

133. public String toString()

134. {

135. return new StringBuilder("TravailleurHoraire [ nom : ").append(getNom()).append(

136. "; prénom : ").append(getPrenom()).append("; salaire : ").append(gains())

137. .append(" ]").toString();

138. }

139. }

employe/TestEmploye.java

1. /*

2. * Fichier: TestEmploye.java

3. * Crée le: 30 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.employe;

27. import java.awt.BorderLayout;

29. import javax.swing.JFrame;

30. import javax.swing.JScrollPane;

31. import javax.swing.JTextArea;

35. /**

36. * <p>Classe de test pour les classes Employe, Patron, TravailleurCommission, TravailleurHoraire.</p>

37. * @author Sébastien ESTIENNE.

38. */

39. public class TestEmploye extends JFrame

40. {

41. /**

42. * <p>Serial version UID.</p>

43. */

44. private static final long serialVersionUID = 1L;

47. /**

48. * <p>Construction de l'application.</p>

49. */

50. public TestEmploye()

51. {

52. // Appel du constructeur de la classe JFrame.

53. super("Employé");

55. // Ajoute les composants au conteneur.

56. JTextArea zoneSortie = new JTextArea();

57. getContentPane().add(new JScrollPane(zoneSortie), BorderLayout.CENTER);

59. // Texte de sortie.

60. StringBuilder sortie = new StringBuilder();

62. // Employe.

63. Employe emp;

65. // Patron.

66. Patron p = new Patron("Paul", "MARTIN", 6500);

67. emp = p;

68. sortie.append(emp).append('\n');

70. // TravailleurCommission.

71. TravailleurCommission tc = new TravailleurCommission("Jean", "DUPONT", 3000, 15);

72. tc.setQuantite(60);

73. emp = tc;

74. sortie.append(emp).append('\n');

76. // TravailleurHoraire.

77. TravailleurHoraire th = new TravailleurHoraire("Luc", "THOMAS", 12);

78. th.setRetribution(150);

79. emp = tc;

80. sortie.append(th).append('\n');

82. // Met à jour la zone de sortie.

83. zoneSortie.setText(sortie.toString());

85. // Modifie les propriétés de la fenêtre.

86. setSize(600, 200);

87. setLocation(100, 100);

88. setVisible(true);

89. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

90. }

93. /**

94. * <p>Débute l'exécution du test.</p>

95. * @param args Les paramètres de la ligne de commande.

96. */

97. public static void main(String[] args)

98. {

99. new TestEmploye();

100. }

101. }

V - Forme

V-1 - Énoncé

Écrivez une interface Forme avec les méthodes abstraites suivantes :

- perimetre() : renvoie le périmètre de la forme ;

- aire() : renvoie l'aire de la forme.

Écrivez une classe Carre implémentant l'interface Forme avec les attributs suivants :

- cote : le côté du carré.

La classe Carre doit disposer des constructeurs suivants :

- Carre() ;

- Carre(cote).

La classe Carre doit contenir des accesseurs (get) et mutateurs (set) pour les différents attributs et les méthodes suivantes :

- perimetre() : donne le périmètre du carré ;

- aire() : donne l'aire du carré ;

- toString() : donne une représentation du carré.

Écrivez aussi une classe TestForme afin de tester les classes.

Classes de l'API utilisées :

- java.awt.BorderLayout

- javax.swing.JFrame

- javax.swing.JScrollPane

- javax.swing.JTextArea

V-2 - Aperçu

Aperçu du résultat.

V-3 - Démonstration

Lancer avec Java Web Start

Note : javaws -viewer (accessible aussi dans le panneau de configuration Java) permet de voir les différentes applications JWS en cache et de les gérer.

V-4 - Solution

forme/Forme.java

1. /*

2. * Fichier: Forme.java

3. * Crée le: 31 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.forme;

27. /**

28. * <p>Interface représentant une forme.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public interface Forme

32. {

33. /**

34. * <p>Calcule le périmètre de la forme.</p>

35. * @return Retourne le périmètre de la forme.

36. */

37. public double perimetre();

40. /**

41. * <p>Calcule l'aire de la forme.</p>

42. * @return Retourne l'aire de la forme.

43. */

44. public double aire();

45. }

forme/Carre.java

1. /*

2. * Fichier: Carre.java

3. * Crée le: 31 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.forme;

27. /**

28. * <p>Classe représentant un carré.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public class Carre implements Forme

32. {

33. /** La longueur du côté du carré. */

34. protected double cote;

37. /**

38. * <p>Constructeur par défaut.</p>

39. */

40. public Carre()

41. {

42. this(0.0);

43. }

46. /**

47. * <p>Constructeur de carré avec la longueur du côté spécifié.</p>

48. * @param cote La longueur du côté du carré.

49. */

50. public Carre(double cote)

51. {

52. setCote(cote);

53. }

56. /**

57. * <p>Calcule le périmètre de la forme.</p>

58. * @return Retourne le périmètre de la forme.

59. */

60. public double perimetre()

61. {

62. return 4 * getCote();

63. }

66. /**

67. * <p>Calcule l'aire de la forme.</p>

68. * @return Retourne l'aire de la forme.

69. */

70. public double aire()

71. {

72. return getCote() * getCote();

73. }

76. /**

77. * <p>Retourne la longueur du côté du carré.</p>

78. * @return Renvoie la longueur du côté du carré.

79. */

80. public double getCote()

81. {

82. return this.cote;

83. }

86. /**

87. * <p>Modifie la longueur du côté du carré.</p>

88. * @param cote La longueur du côté du carré.

89. */

90. public void setCote(double cote)

91. {

92. this.cote = cote;

93. }

96. /**

97. * <p>Renvoie une représentation d'un carré.</p>

98. * @return Retourne une représentation d'un carré.

99. */

100. @Override

101. public String toString()

102. {

103. return new StringBuilder("Carré [ côté : ").append(getCote()).append(" ]").toString();

104. }

105. }

forme/TestForme.java

1. /*

2. * Fichier: TestForme.java

3. * Crée le: 31 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.forme;

27. import java.awt.BorderLayout;

29. import javax.swing.JFrame;

30. import javax.swing.JScrollPane;

31. import javax.swing.JTextArea;

35. /**

36. * <p>Classe de test pour les classes Forme et Carre.</p>

37. * @author Sébastien ESTIENNE.

38. */

39. public class TestForme extends JFrame

40. {

41. /**

42. * <p>Serial version UID.</p>

43. */

44. private static final long serialVersionUID = 1L;

47. /**

48. * <p>Construction de l'application.</p>

49. */

50. public TestForme()

51. {

52. // Appel du constructeur de la classe JFrame.

53. super("Forme");

55. // Ajoute les composants au conteneur.

56. JTextArea zoneSortie = new JTextArea();

57. getContentPane().add(new JScrollPane(zoneSortie), BorderLayout.CENTER);

59. // Texte de sortie.

60. StringBuilder sortie = new StringBuilder();

62. // Forme.

63. Forme f;

65. // Carré.

66. Carre c = new Carre(3.0);

67. sortie.append(c).append('\n');

68. f = c;

69. sortie.append(f).append('\n');

70. sortie.append("Périmètre : " + c.perimetre()).append('\n');

71. sortie.append("Aire : " + f.aire()).append('\n');

73. // Met à jour la zone de sortie.

74. zoneSortie.setText(sortie.toString());

76. // Modifie les propriétés de la fenêtre.

77. setSize(600, 200);

78. setLocation(100, 100);

79. setVisible(true);

80. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

81. }

84. /**

85. * <p>Débute l'exécution du test.</p>

86. * @param args Les paramètres de la ligne de commande.

87. */

88. public static void main(String[] args)

89. {

90. new TestForme();

91. }

92. }

VI - GéoVecteur

VI-1 - Énoncé

Écrivez une classe finale GeoVecteur avec les méthodes statiques suivantes :

- longueur(ux, uy, uz) : renvoie la longueur du vecteur ;

- produitScalaire(ux, uy, uz, vx, vy, vz) : retourne le produit scalaire de deux vecteurs ;

- produitVectoriel(ux, uy, uz, vx, vy, vz) : retourne le produit vectoriel de deux vecteurs.

Écrivez aussi une classe TestVecteur afin de tester les classes.

Classes de l'API utilisées :

- java.awt.BorderLayout

- java.text.DecimalFormat

- javax.swing.JFrame

- javax.swing.JScrollPane

- javax.swing.JTextArea

VI-2 - Aperçu

Aperçu du résultat.

VI-3 - Démonstration

Lancer avec Java Web Start

Note : javaws -viewer (accessible aussi dans le panneau de configuration Java) permet de voir les différentes applications JWS en cache et de les gérer.

VI-4 - Solution

geovecteur/GeoVecteur.java

1. /*

2. * Fichier: GeoVecteur.java

3. * Crée le: 31 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.geovecteur;

27. /**

28. * <p>Classe de géométrie sur les vecteurs.</p>

29. * @author Sébastien ESTIENNE.

30. */

31. public final class GeoVecteur

32. {

33. /**

34. * <p>Calcule la longueur du vecteur.</p>

35. * @param ux La valeur du vecteur en abscisse.

36. * @param uy La valeur du vecteur en ordonnée.

37. * @param uz La valeur du vecteur en hauteur.

38. * @return Retourne la longueur du vecteur.

39. */

40. public static double longueur(double ux, double uy, double uz)

41. {

42. return Math.sqrt(ux * ux + uy * uy + uz * uz);

43. }

46. /**

47. * <p>Calcule le produit scalaire de deux vecteurs.</p>

48. * @param ux La valeur du premier vecteur en abscisse.

49. * @param uy La valeur du premier vecteur en ordonnée.

50. * @param uz La valeur du premier vecteur en hauteur.

51. * @param vx La valeur du second vecteur en abscisse.

52. * @param vy La valeur du second vecteur en ordonnée.

53. * @param vz La valeur du second vecteur en hauteur.

54. * @return Retourne le produit scalaire de deux vecteurs.

55. */

56. public static double produitScalaire(double ux, double uy, double uz, double vx, double vy,

57. double vz)

58. {

59. return ux * vx + uy * vy + uz * vz;

60. }

63. /**

64. * <p>Calcule le produit vectoriel de deux vecteurs.</p>

65. * @param ux La valeur du premier vecteur en abscisse.

66. * @param uy La valeur du premier vecteur en ordonnée.

67. * @param uz La valeur du premier vecteur en hauteur.

68. * @param vx La valeur du second vecteur en abscisse.

69. * @param vy La valeur du second vecteur en ordonnée.

70. * @param vz La valeur du second vecteur en hauteur.

71. * @return Retourne le produit vectoriel de deux vecteurs.

72. */

73. public static double produitVectoriel(double ux, double uy, double uz, double vx, double vy,

74. double vz)

75. {

76. return ux * vy - uy * vx + uy * vz - uz * vy + uz * vx - ux * vz;

77. }

78. }

geovecteur/TestVecteur.java

1. /*

2. * Fichier: TestVecteur.java

3. * Crée le: 31 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.geovecteur;

27. import java.awt.BorderLayout;

28. import java.text.DecimalFormat;

30. import javax.swing.JFrame;

31. import javax.swing.JScrollPane;

32. import javax.swing.JTextArea;

36. /**

37. * <p>Classe de test pour la classe GeoVecteur.</p>

38. * @author Sébastien ESTIENNE.

39. */

40. public class TestVecteur extends JFrame

41. {

42. /**

43. * <p>Serial version UID.</p>

44. */

45. private static final long serialVersionUID = 1L;

48. /**

49. * <p>Construction de l'application.</p>

50. */

51. public TestVecteur()

52. {

53. // Appel du constructeur de la classe JFrame.

54. super("Vecteur");

56. // Ajoute les composants au conteneur.

57. JTextArea zoneSortie = new JTextArea();

58. getContentPane().add(new JScrollPane(zoneSortie), BorderLayout.CENTER);

60. // Texte de sortie.

61. StringBuilder sortie = new StringBuilder();

63. // Formateur de nombres.

64. DecimalFormat dFormat = new DecimalFormat();

65. dFormat.setMinimumIntegerDigits(1);

66. dFormat.setMaximumFractionDigits(2);

68. // Longueur.

69. double l = GeoVecteur.longueur(2.5, 4.3, 1.7);

70. sortie.append("Longueur : ").append(dFormat.format(l)).append('\n');

72. // Produit scalaire.

73. double ps = GeoVecteur.produitScalaire(2.5, 4.3, 1.7, 4.9, -5.3, 3.8);

74. sortie.append("Produit scalaire : ").append(dFormat.format(ps)).append('\n');

76. // Produit vectoriel.

77. double pv = GeoVecteur.produitVectoriel(2.5, 4.3, 1.7, 4.9, -5.3, 3.8);

78. sortie.append("Produit vectoriel : ").append(dFormat.format(pv)).append('\n');

80. // Met à jour la zone de sortie.

81. zoneSortie.setText(sortie.toString());

83. // Modifie les propriétés de la fenêtre.

84. setSize(600, 200);

85. setLocation(100, 100);

86. setVisible(true);

87. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

88. }

91. /**

92. * <p>Débute l'exécution du test.</p>

93. * @param args Les paramètres de la ligne de commande.

94. */

95. public static void main(String[] args)

96. {

97. new TestVecteur();

98. }

99. }

VII - Événement

VII-1 - Énoncé

Écrivez une application graphique avec une fenêtre (JFrame) contenant deux boutons (JButton). Écrivez ensuite une classe interne pour la gestion des événements du premier bouton et une classe interne anonyme pour le second bouton.
Affichez une boîte de dialogue afin de signaler l'action effectuée sur le bouton.

Classes de l'API utilisées :

- java.awt.Container

- java.awt.event.ActionEvent

- java.awt.event.ActionListener

- java.awt.event.MouseAdapter

- java.awt.event.MouseEvent

- javax.swing.JButton

- javax.swing.JFrame

- javax.swing.JOptionPane

VII-2 - Aperçu

Aperçu du résultat.

VII-3 - Démonstration

Lancer avec Java Web Start

Note : javaws -viewer (accessible aussi dans le panneau de configuration Java) permet de voir les différentes applications JWS en cache et de les gérer.

VII-4 - Solution

evenement/Evenement.java

1. /*

2. * Fichier: Evenement.java

3. * Crée le: 31 janvier 2007.

4. * Modifié: 7 juillet 2007.

5. * Auteurs: Sébastien ESTIENNE.

6. * SiteWeb: http://www.prog-info.org/

7. *

8. * This program is free software; you can redistribute it and/or modify

9. * it under the terms of the GNU General Public License as published by

10. * the Free Software Foundation; either version 2 of the License, or

11. * (at your option) any later version.

12. *

13. * This program is distributed in the hope that it will be useful,

14. * but WITHOUT ANY WARRANTY; without even the implied warranty of

15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

16. * GNU General Public License for more details.

17. *

18. * You should have received a copy of the GNU General Public License

19. * along with this program; if not, write to the Free Software

20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

21. */

23. package chapitre8.evenement;

27. import java.awt.Container;

28. import java.awt.event.ActionEvent;

29. import java.awt.event.ActionListener;

30. import java.awt.event.MouseAdapter;

31. import java.awt.event.MouseEvent;

33. import javax.swing.JButton;

34. import javax.swing.JFrame;

35. import javax.swing.JOptionPane;

39. /**

40. * <p>Classe montrant le système de classe interne.</p>

41. * @author Sébastien ESTIENNE.

42. */

43. public class Evenement extends JFrame

44. {

45. /**

46. * <p>Serial version UID.</p>

47. */

48. private static final long serialVersionUID = 1L;

50. /** Le bouton d'action no 1. */

51. private JButton bouton1;

53. /** Le bouton d'action no 2. */

54. private JButton bouton2;

57. /**

58. * <p>Constructeur.</p>

59. */

60. public Evenement()

61. {

62. super("Événement");

64. // Instance de la classe interne GestionEvenement.

65. GestionEvenement gestionnaire = new GestionEvenement();

67. // Initialisation du GUI.

68. Container conteneur = getContentPane();

69. conteneur.setLayout(null);

71. // Initialisation du premier bouton.

72. this.bouton1 = new JButton("Bouton 1");

73. this.bouton1.addActionListener(gestionnaire);

74. this.bouton1.setBounds(40, 25, 110, 23);

75. conteneur.add(this.bouton1);

77. // Initialisation du second bouton.

78. this.bouton2 = new JButton("Bouton 2");

79. this.bouton2.addActionListener(gestionnaire);

80. this.bouton2.setBounds(40, 60, 110, 23);

82. // Ajout d'un événement sur le second bouton.

83. this.bouton2.addMouseListener(new MouseAdapter()

84. {

85. /**

86. * <p>Invoqué lorsqu'un bouton de la souris a été cliqué.</p>

87. * @param e Un événement qui indique qu'un bouton de la souris a été cliqué sur le

88. *        composant concerné.

89. */

90. @Override

91. public void mouseClicked(MouseEvent e)

92. {

93. JOptionPane.showMessageDialog(null, "Vous avez cliqué sur le bouton 2!", "Click",

94. JOptionPane.INFORMATION_MESSAGE);

95. }

96. });

97. conteneur.add(this.bouton2);

99. // Propriétés de la fenêtre.

100. setSize(200, 140);

101. setLocation(200, 150);

102. setVisible(true);

103. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

104. }

107. /**

108. * <p>Lance l'application.</p>

109. * @param args Les paramètres de la ligne de commande.

110. */

111. public static void main(String[] args)

112. {

113. new Evenement();

114. }

116. /**

117. * <p>Classe de gestion de l'événement du bouton 1.</p>

118. * @author Sébastien ESTIENNE.

119. */

120. protected class GestionEvenement implements ActionListener

121. {

122. /**

123. * <p>Invoqué lorsqu'une action se produit.</p>

124. * @param e Un événement qui indique qu'une ction s'est produite sur le composant concerné.

125. */

126. public void actionPerformed(ActionEvent e)

127. {

128. if(e.getSource().equals(Evenement.this.bouton1))

129. {

130. JOptionPane.showMessageDialog(null, "Vous avez cliqué sur le bouton 1!", "Click",

131. JOptionPane.INFORMATION_MESSAGE);

132. }

133. }

134. }

135. }

VIII - Remerciements

Je tiens à remercier millie, Ricky81 pour les conseils, remarques et relectures.
Je remercie aussi www.developpez.com me permettant de publier cet article et Nono40 pour ses outils.