Commit 9f417dcbef59f1ffbba965c3225a460b78dbcb2f
1 parent
4fce272e
Update rapport
Showing
1 changed file
with
126 additions
and
81 deletions
Show diff stats
rapport_finale.md
... | ... | @@ -31,7 +31,7 @@ affichage de plusieurs types de case : |
31 | 31 | class Application { |
32 | 32 | |
33 | 33 | public static void main(String[] args) { |
34 | - Grille g = new Grille(); | |
34 | + Grid g = new Grid(); | |
35 | 35 | |
36 | 36 | g.createCase("b",1); //Ajout case vide |
37 | 37 | g.createCase("a",1,100.0); //Ajout case avec valeur |
... | ... | @@ -45,19 +45,19 @@ class Application { |
45 | 45 | |
46 | 46 | g.createCase("a",4,new Somme(plageCase1)); //Ajout case avec fonctions |
47 | 47 | |
48 | - g.setValeur("b",1,100); //Met la valeur de b1 à 100 | |
48 | + g.setValue("b",1,100); //Met la valeur de b1 à 100 | |
49 | 49 | |
50 | 50 | List<Case> plageCase2 = new ArrayList<Case>(); // Crée une liste de case |
51 | 51 | plageCase1.add(g.getCase("a",4)); |
52 | 52 | plageCase1.add(g.getCase("a",2)); |
53 | 53 | plageCase1.add(g.getCase("a",3)); |
54 | 54 | |
55 | - g.setFormule("b",2,new Moyenne(plageCase2)); //Met la formule dans b2 | |
55 | + g.setFormula("b",2,new Moyenne(plageCase2)); //Met la formule dans b2 | |
56 | 56 | |
57 | - g.getValeur("a",1); //Affichera 100.0 | |
58 | - g.getValeur("a",4); //Affichera (100+50+150)=100 | |
59 | - g.getFormuleAsString("b",2); //Affichera MOYENNE(a4,a2,a3) | |
60 | - g.getFormuleDeveloppe("b",2); | |
57 | + g.getValue("a",1); //Affichera 100.0 | |
58 | + g.getValue("a",4); //Affichera (100+50+150)=100 | |
59 | + g.getFormulaAsString("b",2); //Affichera MOYENNE(a4,a2,a3) | |
60 | + g.getDevelopedFormula("b",2); | |
61 | 61 | } |
62 | 62 | } |
63 | 63 | ``` |
... | ... | @@ -90,13 +90,15 @@ nous allons également une `ArrayList` de `Case`. |
90 | 90 | |
91 | 91 | #### 1. Methode getValeur |
92 | 92 | |
93 | +Cette méthode retourne la valeur d'une case se trouvant dans une grille grâce aux coordonnées de la case. | |
94 | +Elle utilise la méthode getCell qui permet d'accet à une case qui existe et dans le contraire lève une exeption. | |
93 | 95 | ```java |
94 | 96 | |
95 | 97 | class Grid { |
96 | - Map<String, Case> cases = new HashMap<>(); | |
98 | + Map<String, Cell> cells = new HashMap<>(); | |
97 | 99 | |
98 | 100 | double getValue(String column, int line){ |
99 | - return cases.getCell(column, line).getValue(); | |
101 | + return this.getCell(column, line).getValue(); | |
100 | 102 | } |
101 | 103 | } |
102 | 104 | |
... | ... | @@ -116,10 +118,13 @@ class Cell { |
116 | 118 | |
117 | 119 | #### 2. Methode getFormuleAsString (acceder au contenu) |
118 | 120 | |
121 | +Cette méthode permet de retourner le contenu d'une case. Si elle contient une formule, on retourne la formule simple et dans le cas contraire son nom | |
122 | +pou dire qu'elle ne contient pas de formule mais une valeur. | |
123 | + | |
119 | 124 | ```java |
120 | 125 | |
121 | 126 | class Grid { |
122 | - Map<String, Case> cases = new HashMap<>(); | |
127 | + Map<String, Cell> cells = new HashMap<>(); | |
123 | 128 | |
124 | 129 | String getFormuleAsString(String column, int line) { |
125 | 130 | return this.getCell(column, line).toString(); |
... | ... | @@ -140,15 +145,24 @@ class Cell { |
140 | 145 | return toString(); |
141 | 146 | } |
142 | 147 | } |
148 | +``` | |
149 | +**Exemple pour Addition** (Opération Binaire) | |
143 | 150 | |
144 | -// Exemple pour Addition | |
145 | -class Addition { | |
151 | +La classe BinaryOperation implémente la methode toString() en, récuperant l'opérateur qui est définit dans la méthode getOperator() de chaque classe qui hérite d'elle. | |
152 | +```java | |
153 | +class BinaryOperation { | |
146 | 154 | Cell leftCell; |
147 | 155 | Cell rightCell; |
148 | 156 | |
149 | - String toString() { | |
150 | - return leftCell.toString() + "+" + rightCell.toString(); | |
151 | - } | |
157 | + public String toString() { | |
158 | + return "(" + this.leftCell.getId() + this.getOperator() + this.rightCell.getId() + ")"; | |
159 | + } | |
160 | +} | |
161 | +class Addition { | |
162 | + | |
163 | + public String getOperator() { | |
164 | + return "+"; | |
165 | + } | |
152 | 166 | } |
153 | 167 | |
154 | 168 | ``` |
... | ... | @@ -156,16 +170,17 @@ class Addition { |
156 | 170 | |
157 | 171 | #### 3. Methode getDevelopedFormula |
158 | 172 | |
173 | +Cette méthode renvoie la formule dévéloppée d'une case. | |
159 | 174 | ```java |
160 | 175 | class Grid{ |
161 | - Map<String, Case> cases = new HashMap<>(); | |
176 | + Map<String, Cell> cells = new HashMap<>(); | |
162 | 177 | |
163 | 178 | String getDevelopedFormula(String column, int line) { |
164 | 179 | return this.getCell(column,line).getFormuleDeveloppe(); |
165 | 180 | } |
166 | 181 | } |
167 | 182 | |
168 | -class Case{ | |
183 | +class Cell{ | |
169 | 184 | String column; |
170 | 185 | int line; |
171 | 186 | double value; |
... | ... | @@ -174,13 +189,16 @@ class Case{ |
174 | 189 | |
175 | 190 | String getDevelopedFormula() { |
176 | 191 | if (formula != null) |
177 | - return formula.getFormuleDeveoppe(); | |
192 | + return formula.getDevelopedFormula(); | |
178 | 193 | else |
179 | 194 | return toString(); |
180 | 195 | } |
181 | 196 | } |
197 | +``` | |
198 | + | |
199 | +**Exemple de la méthode getDevelopedFormula() pour la class Average** (moyenne) | |
182 | 200 | |
183 | -Average | |
201 | +```java | |
184 | 202 | class Average { |
185 | 203 | List<Cell> listCases = new ArrayList<Cell>(); |
186 | 204 | |
... | ... | @@ -194,15 +212,24 @@ class Average { |
194 | 212 | |
195 | 213 | #### 4. Methode eval() |
196 | 214 | |
215 | +Cette méthode permet de retourner le résultat d'un calacul avec des opérations binaires ou des fonctions. | |
216 | + | |
217 | +##### Opération binaires | |
218 | + | |
219 | +class BinaryOperation { | |
220 | + Cell leftCell; | |
221 | + Cell rightCell; | |
222 | + | |
223 | +} | |
224 | +Les classes Addition,Multiplication,Substraction et Division héritent de la classe BinaryOpération et utilisent donc ses attributs leftCell et rightCell. | |
225 | + | |
197 | 226 | - Dans Addition : |
198 | 227 | |
199 | 228 | ```java |
200 | 229 | class Addition { |
201 | - Case gauche; | |
202 | - Case droite; | |
203 | 230 | |
204 | 231 | double eval() { |
205 | - return gauche.getValeur() + droite.getValeur(); | |
232 | + return leftCell.getValue() + rightCell.getValue(); | |
206 | 233 | } |
207 | 234 | } |
208 | 235 | |
... | ... | @@ -212,11 +239,10 @@ class Addition { |
212 | 239 | |
213 | 240 | ```java |
214 | 241 | class Multiplication { |
215 | - Cell gauche; | |
216 | - Cell droite; | |
242 | + | |
217 | 243 | |
218 | 244 | double eval() { |
219 | - return gauche.getValeur() * droite.getValeur(); | |
245 | + return leftCell.getValue() * rightCell.getValue(); | |
220 | 246 | } |
221 | 247 | } |
222 | 248 | ``` |
... | ... | @@ -225,12 +251,10 @@ class Multiplication { |
225 | 251 | - Dans Soustraction : |
226 | 252 | |
227 | 253 | ```java |
228 | -class Soustraction { | |
229 | - Cell gauche; | |
230 | - Cell droite; | |
254 | +class Substraction { | |
231 | 255 | |
232 | 256 | double eval() { |
233 | - return gauche.getValeur() - droite.getValeur(); | |
257 | + return leftCell.getValue() - rightCell.getValue(); | |
234 | 258 | } |
235 | 259 | } |
236 | 260 | |
... | ... | @@ -240,32 +264,38 @@ class Soustraction { |
240 | 264 | |
241 | 265 | ```java |
242 | 266 | class Division { |
243 | - Cell gauche; | |
244 | - Cell droite; | |
267 | + | |
245 | 268 | |
246 | 269 | double eval() { |
247 | - if (droite.getValeur() != 0) | |
248 | - return gauche.getValeur() / droite.getValeur(); | |
270 | + if (droite.getValue() != 0) | |
271 | + return gauche.getValue() / droite.getValue(); | |
249 | 272 | else |
250 | 273 | lève une exception |
251 | 274 | } |
252 | 275 | } |
253 | 276 | |
254 | 277 | ``` |
278 | +##### Fonctions | |
279 | + | |
280 | +class Function { | |
281 | + List<Cell> listCells; | |
282 | + | |
283 | +} | |
284 | +Les classes Average et Sum héritent de la classe BinaryOpération et utilisent donc son attribut listCells. | |
285 | + | |
255 | 286 | |
256 | 287 | - Dans Moyenne : |
257 | 288 | |
258 | 289 | ```java |
259 | 290 | class Average { |
260 | - List<Cell> listCases = new ArrayList<Cell>(); | |
261 | 291 | |
262 | 292 | double eval() { |
263 | 293 | double val=0; |
264 | 294 | |
265 | 295 | if (listCases.size() != 0) |
266 | - for(int i=0; i<listCases.size(); i++) | |
267 | - val += listCases.get(i).getValeur(); | |
268 | - return val / listCases.size(); | |
296 | + for(int i=0; i<listCells.size(); i++) | |
297 | + val += listCells.get(i).getValue(); | |
298 | + return val / listCells.size(); | |
269 | 299 | else |
270 | 300 | lève une exception |
271 | 301 | } |
... | ... | @@ -276,13 +306,12 @@ class Average { |
276 | 306 | |
277 | 307 | ```java |
278 | 308 | class Sum { |
279 | - List<Cell> listCases = new ArrayList<Cell>(); | |
280 | 309 | |
281 | 310 | double eval() { |
282 | 311 | double val=0; |
283 | 312 | if (listCases.size() != 0) |
284 | - for(int i=0; i<listCases.size(); i++) | |
285 | - val += listCases.get(i).getValeur(); | |
313 | + for(int i=0; i<listCells.size(); i++) | |
314 | + val += listCells.get(i).getValue(); | |
286 | 315 | return val; |
287 | 316 | else |
288 | 317 | lève une exception |
... | ... | @@ -291,77 +320,86 @@ class Sum { |
291 | 320 | |
292 | 321 | ``` |
293 | 322 | |
294 | -#### 5. Methode setValeur | |
323 | +#### 5. Methode setValue | |
324 | + | |
325 | +Lorsque l'on modifie une valeur d'une case, on met à jour la valeur des cases qui utilisent la case. | |
295 | 326 | |
296 | 327 | ```java |
297 | 328 | class Grid { |
298 | - Map<String, Case> cases = new HashMap<>(); | |
329 | + Map<String, Cell> cells = new HashMap<>(); | |
299 | 330 | |
300 | - void setValeur(String colonne, int ligne, double value) { | |
301 | - String code = colonne + ligne; | |
302 | - return cases.get(code).setValeur(value); | |
303 | - } | |
331 | + void setValue(String column, int line, double value) { | |
332 | + this.getCell(column, line).setValue(value); | |
333 | + } | |
304 | 334 | } |
305 | 335 | |
306 | 336 | class Cell { |
307 | - String colonne; | |
308 | - int ligne; | |
309 | - double valeur; | |
310 | - Formule formule; | |
311 | - List<Cell> utiliseDans = new ArrayList<Cell>(); | |
337 | + String column; | |
338 | + int line; | |
339 | + double value; | |
340 | + Formula formula; | |
341 | + List<Cell> usedIn = new ArrayList<Cell>(); | |
312 | 342 | |
313 | - void setValeur(double value) { | |
314 | - valeur = value; | |
315 | - for(int i=0; i<utiliseDans.size(); i++) | |
316 | - utiliseDans.get(i).updateValeur(); | |
343 | + void setValue(double valeur) { | |
344 | + value = valeur; | |
345 | + for(int i=0; i<usedIn.size(); i++) | |
346 | + usedIn.get(i).updateValue(); | |
317 | 347 | } |
318 | 348 | } |
319 | 349 | |
320 | 350 | ``` |
321 | 351 | |
322 | -#### 5. Methode setFormule | |
323 | 352 | |
353 | +#### 5. Methode setFormula | |
354 | + | |
355 | +Cette méthode assigne une formule à une case en étant sûre qu'un cycle n'est pas créée. | |
324 | 356 | ```java |
325 | 357 | class Grid { |
326 | 358 | Map<String, Cell> cases = new HashMap<>(); |
327 | 359 | |
328 | - void setFormule(String colonne, int ligne, Formule formule) { | |
360 | + void setFormula(String column, int line, Formula formula) { | |
329 | 361 | String code = colonne + ligne; |
330 | - return cases.get(code).setFormule(formula); | |
362 | + this.getCell(column, line).setFormula(formula); | |
331 | 363 | } |
332 | 364 | } |
333 | 365 | |
334 | 366 | |
335 | 367 | class Cell { |
336 | - String colonne; | |
337 | - int ligne; | |
338 | - double valeur; | |
339 | - Formule formule; | |
340 | - List<Cell> utiliseDans = new ArrayList<Cell>(); | |
368 | + String column; | |
369 | + int line; | |
370 | + double value; | |
371 | + Formula formula; | |
372 | + List<Cell> usedIn = new ArrayList<Cell>(); | |
341 | 373 | |
342 | - void updateValeur() { | |
343 | - valeur = formule.eval(); | |
374 | + void updateValue() { | |
375 | + valeur = formula.eval(); | |
344 | 376 | } |
345 | 377 | |
346 | - void setFormule(Formule formula) { | |
347 | - if (!formula.creerCycle(this)) | |
378 | + void setFormula(Formula formula) { | |
379 | + if (!formula.createCycle(this)) | |
348 | 380 | formule = formula; |
349 | - updateValeur(); | |
350 | - for(int i=0; i<utiliseDans.size(); i++) | |
351 | - utiliseDans.get(i).updateValeur(); | |
381 | + updateValue(); | |
382 | + for(int i=0; i<usedIn.size(); i++) | |
383 | + usedIn.get(i).updateValue(); | |
352 | 384 | else |
353 | 385 | lève une exception |
354 | 386 | } |
355 | 387 | } |
388 | +``` | |
389 | +#### 5. Methode createCycle | |
390 | + | |
391 | +Cette méthode vérifie si on créée un cycle direct ou indirece.La façon de la définir est differente si on a une opération binaire ou une focntion. | |
392 | + | |
393 | +##### Opération binaire | |
356 | 394 | |
357 | -BinaryOperation | |
358 | -class OperationBinaire { | |
359 | - Cell gauche; | |
360 | - Cell droite; | |
395 | +```java | |
396 | +class BinaryOperation { | |
397 | + Cell leftCell; | |
398 | + Cell rightCell; | |
361 | 399 | |
362 | - boolean creerCycle(Case case) { | |
400 | + boolean createCycle(Cell cell) { | |
363 | 401 | Si la case gauche ne contient pas de formule et la case de droite contient une |
364 | - rechercher si la case est dans la formule de la case de droite | |
402 | + rechercher si la case est dans la formule de la case de droite | |
365 | 403 | |
366 | 404 | Si la case gauche contient une formule et la case de droite n'en contient pas |
367 | 405 | rechercher si la case est dans la formule de la case de gauche |
... | ... | @@ -374,11 +412,15 @@ class OperationBinaire { |
374 | 412 | } |
375 | 413 | } |
376 | 414 | |
377 | -Function | |
378 | -class Fonction { | |
415 | +``` | |
416 | + | |
417 | +##### Fonction | |
418 | + | |
419 | +```java | |
420 | +class Function { | |
379 | 421 | List<Cell> listCells; |
380 | 422 | |
381 | - boolean creerCycle(Case case) { | |
423 | + boolean creerCycle(Cell cell) { | |
382 | 424 | |
383 | 425 | Si la case n'est pas dans listCells |
384 | 426 | Pour toute les cases dans listCells qui contiennent des formules, regarder si la case est dans la formule |
... | ... | @@ -418,12 +460,15 @@ Le schéma ci-dessus nous montre que, l'implémentation est composé de 5 packag |
418 | 460 | |
419 | 461 | ### MODES D'UTILISATION |
420 | 462 | |
463 | +Concernant les commandes de compilation et d'exécution, sous des logiciels comme Eclipse ou IntelliJ par exemple, juste un clique bouton suffit. | |
464 | + | |
465 | +Par contre, dans le cas contraire, il faut se placer dans à la raicne du repertoire contenant les fichiers et lancer les commandes suivantes : | |
421 | 466 | |
422 | -** Commande de compilation**: | |
467 | +**Commande de compilation**: | |
423 | 468 | |
424 | 469 | find src -not \( -path src/kernel/test -prune \) -name \*.java |xargs -i javac -d bin {} -cp src/ |
425 | 470 | |
426 | -** Commande d'exécution**: | |
471 | +**Commande d'exécution**: | |
427 | 472 | |
428 | 473 | java bin/app/Main |
429 | 474 | ... | ... |