Correction TP4-Suite: 2022-2023
Exercice 1:
[Link]
1 /* **********************************************************************
2 * La classe Employe
3 * **********************************************************************/
4 abstract class Employe {
5 private String nom;
6 private String prenom;
7 private int age;
8 private String date;
9
10
11 public Employe(String prenom, String nom, int age, String date) {
12 [Link] = nom;
13 [Link] = prenom;
14 [Link] = age;
15 [Link] = date;
16 }
17
18 public abstract double calculerSalaire();
19
20 public String getTitre()
21 {
22 return "L'employé " ;
23 }
24
25 public String getNom() {
26 return getTitre() + prenom + " " + nom;
27 }
28 }
29
30 /* **********************************************************************
31 * La classe Commercial (regroupe Vendeur et Représentant)
32 * **********************************************************************/
33 abstract class Commercial extends Employe {
34 private double chiffreAffaire;
35
36 public Commercial(String prenom, String nom, int age, String date,
37 double chiffreAffaire) {
38 super(prenom, nom, age, date);
39 [Link] = chiffreAffaire;
40 }
41
42 public double getChiffreAffaire()
43 {
44 return chiffreAffaire;
45 }
46
47 }
48
49 /* **********************************************************************
50 * La classe Vendeur
51 * **********************************************************************/
52 class Vendeur extends Commercial {
53 private final static double POURCENT_VENDEUR = 0.2;
54 private final static int BONUS_VENDEUR = 400;
55
56 public Vendeur(String prenom, String nom, int age, String date,
57 double chiffreAffaire) {
58 super(prenom, nom, age, date, chiffreAffaire);
59 }
60
61 public double calculerSalaire() {
62 return (POURCENT_VENDEUR * getChiffreAffaire()) + BONUS_VENDEUR;
63 }
64
65 public String getTitre()
66 {
67 return "Le vendeur ";
68 }
69
70 }
71
72 /* **********************************************************************
73 * La classe Représentant
74 * **********************************************************************/
75 class Representant extends Commercial {
76 private final static double POURCENT_REPRESENTANT = 0.2;
77 private final static int BONUS_REPRESENTANT = 800;
78
79 public Representant(String prenom, String nom, int age, String date, double
80 chiffreAffaire) {
81 super(prenom, nom, age, date, chiffreAffaire);
82 }
83
84 public double calculerSalaire() {
85 return (POURCENT_REPRESENTANT * getChiffreAffaire()) + BONUS_REPRESENTANT;
86 }
87
88 public String getTitre()
89 {
90 return "Le représentant ";
91 }
92 }
93
94 /* **********************************************************************
95 * La classe Technicien (Production)
96 * **********************************************************************/
97 class Technicien extends Employe {
98 private final static double FACTEUR_UNITE = 5.0;
99 private int unites;
100
101 public Technicien(String prenom, String nom, int age, String date, int unites) {
102 super(prenom, nom, age, date);
103 [Link] = unites;
104 }
105
106 public double calculerSalaire() {
107 return FACTEUR_UNITE * unites;
108 }
109
110 public String getTitre()
111 {
112 return "Le technicien ";
113 }
114 }
115
116 /* **********************************************************************
117 * La classe Manutentionnaire
118 * **********************************************************************/
119 class Manutentionnaire extends Employe {
120 private final static double SALAIRE_HORAIRE = 65.0;
121 private int heures;
122
123 public Manutentionnaire(String prenom, String nom, int age, String date,
124 int heures) {
125 super(prenom, nom, age, date);
126 [Link] = heures;
127 }
128
129 public double calculerSalaire() {
130 return SALAIRE_HORAIRE * heures;
131 }
132
133 public String getTitre()
134 {
135 return "Le manut. " ;
136 }
137 }
138
139 /* **********************************************************************
140 * L'interface d'employés à risque
141 * **********************************************************************/
142 interface ARisque {
143 int PRIME = 200;
144 }
145
146 /* **********************************************************************
147 * Une première sous-classe d'employé à risque
148 * **********************************************************************/
149 class TechnARisque extends Technicien implements ARisque {
150
151 public TechnARisque(String prenom, String nom, int age, String date, int unites) {
152 super(prenom, nom, age, date, unites);
153 }
154
155 public double calculerSalaire() {
156 return [Link]() + PRIME;
157 }
158 }
159
160 /* **********************************************************************
161 * Une autre sous-classe d'employé à risque
162 * **********************************************************************/
163 class ManutARisque extends Manutentionnaire implements ARisque {
164
165 public ManutARisque(String prenom, String nom, int age, String date, int heures) {
166 super(prenom, nom, age, date, heures);
167 }
168
169 public double calculerSalaire() {
170 return [Link]() + PRIME;
171 }
172 }
173
174 /* **********************************************************************
175 * La classe Personnel
176 * **********************************************************************/
177 class Personnel {
178 private Employe[] staff;
179 private int nbreEmploye;
180 private final static int MAXEMPLOYE = 200;
181
182 public Personnel() {
183 staff = new Employe[MAXEMPLOYE];
184 nbreEmploye = 0;
185 }
186
187 public void ajouterEmploye(Employe e) {
188 ++nbreEmploye;
189 if (nbreEmploye <= MAXEMPLOYE) {
190 staff[nbreEmploye - 1] = e;
191 } else {
192 [Link]("Pas plus de " + MAXEMPLOYE + " employés");
193 }
194 }
195
196 public double salaireMoyen() {
197 double somme = 0.0;
198 for (int i = 0; i < nbreEmploye; i++) {
199 somme += staff[i].calculerSalaire();
200 }
201 return somme / nbreEmploye;
202 }
203
204 public void afficherSalaires() {
205 for (int i = 0; i < nbreEmploye; i++) {
206 [Link](staff[i].getNom() + " gagne "
207 + staff[i].calculerSalaire() + " euros.");
208 }
209 }
210 }
211
212 // ======================================================================
213
214 class Salaires {
215 public static void main(String[] args) {
216 Personnel p = new Personnel();
217 [Link](new Vendeur("Pierre", "Business", 45, "1995", 30000));
218 [Link](new Representant("Léon", "Vendtout", 25, "2001", 20000));
219 [Link](new Technicien("Yves", "Bosseur", 28, "1998", 1000));
220 [Link](new Manutentionnaire("Jeanne", "Stocketout", 32, "1998", 45));
221 [Link](new TechnARisque("Jean", "Flippe", 28, "2000", 1000));
222 [Link](new ManutARisque("Al", "Abordage", 30, "2001", 45));
223
224 [Link]();
225 [Link]("Le salaire moyen dans l'entreprise est de "
226 + [Link]() + " euros.");
227
228 }
229
}
D'une façon générale :
• une classe abstraite peut étendre une autre classe abstraite ;(exemple classes
Employe et Commercial)
• Une classe abstraite ne peut pas être instanciée. Il faudra l'étendre et définir
toutes les méthodes abstraites qu'elle contient pour pouvoir l'utiliser. Une
sous-classe d'une classe abstraite sera encore abstraite si elle ne définit
pas toutes les méthodes abstraites dont elle hérite
• une classe abstraite peut étendre une classe concrète ;
Une interface peut déclarer des attributs(interface ARISQUE) Cependant tous les
attributs d’une interface sont par défaut public, static et final. Il n’est pas possible
de modifier la portée de ces attributs. Autrement dit, une interface ne peut déclarer
que des constantes.