72a4b821
Remi
merge
|
1
|
# RAPPORT ANALYSE ET CONCEPTION
|
1be42697
ANDJEMBE
hu
|
2
3
4
|
> ANDJEMBE Maksoudath, TANIEL Rémi
|
72a4b821
Remi
merge
|
5
6
7
8
|
Le but du projet est de réaliser un tableur "basique" mais facilement
extensible, l'application sera divisée en 2 parties :
* le noyau
* la partie graphique
|
1be42697
ANDJEMBE
hu
|
9
|
|
72a4b821
Remi
merge
|
10
11
|
Le noyau s'occupera de toutes les opérations de notre grille, les cases
ne pourront contenir que des réels ou des formules(opération binaire ou
|
84149d6c
mandjemb
schema uml
|
12
|
des fonctions acceptant des plages de cases).
|
72a4b821
Remi
merge
|
13
|
### SCHEMA UML
|
1be42697
ANDJEMBE
hu
|
14
|
|
72a4b821
Remi
merge
|
15
16
|
Voici le schéma UML de notre application, les classes et méthodes
abstraites sont en italique :
|
1be42697
ANDJEMBE
hu
|
17
|
|
84149d6c
mandjemb
schema uml
|
18
19
20
|
![UML](uml.png)
|
72a4b821
Remi
merge
|
21
22
23
24
|
### PSEUDO-JAVA CREATION GRILLE,CASES
Voici un exemple de création d'une grille et de l'ajout / modification /
affichage de plusieurs types de case :
|
1be42697
ANDJEMBE
hu
|
25
|
|
72a4b821
Remi
merge
|
26
|
```java
|
1be42697
ANDJEMBE
hu
|
27
28
29
|
Grille g= new Grille();
g.addCase("b",1); //Ajout case vide
|
1be42697
ANDJEMBE
hu
|
30
31
32
33
|
g.addCase("a",1,100.0); //Ajout case avec valeur
g.addCase("a",2,50.0); //Ajout case avec valeur
g.addCase("a",3,new Addition(g.get("a2"),g.get("a1"))); //Ajout case avec operation binaire
|
72a4b821
Remi
merge
|
34
|
List<Case> plageCase1 = new ArrayList<Case>(); // Crée une liste de case
|
1be42697
ANDJEMBE
hu
|
35
36
37
38
39
40
41
42
|
plageCase1.add(g.get("a1"));
plageCase1.add(g.get("a2"));
plageCase1.add(g.get("a3"));
g.addCase("a",4,new Somme(plageCase1)); //Ajout case avec fonctions
g.setValeur("b",1,100); //Met la valeur de b1 à 100
|
72a4b821
Remi
merge
|
43
|
List<Case> plageCase2 = new ArrayList<Case>(); // Crée une liste de case
|
1be42697
ANDJEMBE
hu
|
44
45
46
47
48
49
50
51
52
53
54
55
56
|
plageCase1.add(g.get("a4"));
plageCase1.add(g.get("a2"));
plageCase1.add(g.get("a3"));
g.setFormule("b",2,new Moyenne(plageCase2)); //Met la formule dans b2
g.getValeur("a",1); //Affichera 100.0
g.getValeur("a",4); //Affichera (100+50+150)=100
g.getFormule("b",2) //Affichera MOYENNE(a4,a2,a3)
g.getFormuleDeveloppe("b",2) //Affichera MOYENNE(Somme(a1,a2,a3),a2,(a1+a2))
```
|
72a4b821
Remi
merge
|
57
|
### CHOIX STRUCTURE DE DONNÉES
|
1be42697
ANDJEMBE
hu
|
58
|
|
72a4b821
Remi
merge
|
59
60
61
62
63
64
65
|
Nous devons choisir une structure de donnée pour stocker les cases dans
notre grille, nous savons déjà que nous allons utiliser ne collection
pour les stocker,voici celles que nous connaissons:
* des tableaux
* des listes
* des maps
* des sets
|
1be42697
ANDJEMBE
hu
|
66
|
|
72a4b821
Remi
merge
|
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
D'après le schéma UML ci-dessus, nous allons donc utiliser une `HashMap`
pour stocker les cases de notre grille :
* Pour rechercher une case et, effectuer des opérations dessus ce sera
plus facile, la clé de la Map sera une chaine de caractère (String) qui
représente la coordonnée de cette case (c'est-à-dire la concaténation
du nom de ligne et de l'indice de la colonne, exemple "A1", "B9", etc...)
Une case peut etre utilisée dans plusieurs autres cases, on ne sait
pas le nombre d'autres cases où elle sera utilisée, on stockera donc
cette donée dans une `ArrayList` de `Case`.
Certaines fonctions (`Moyenne`, `Somme`) utilise également une plage de case, pour stocker ces cases,
nous allons également une `ArrayList` de `Case`.
### METHODES ESSENTIELLES EN PSEUDO-JAVA
|
1be42697
ANDJEMBE
hu
|
83
|
|
48bf0ff8
[mandjemb]
avec pseudo java
|
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
|
#### 1. Methode getValeur
```java
Class Grille{
Map<String, Case> cases = new HashMap<>();
double getValeur( String colonne, int ligne){
String code=colonne+ligne;
return cases.get(code).getValeur();
}
}
Class Case{
String colonne;
int ligne;
double valeur;
double getValeur(){
return valeur;
}
}
```
#### 2. Methode getFormule
```java
Class Grille{
Map<String, Case> cases = new HashMap<>();
String getFormule( String colonne, int ligne){
String code=colonne+ligne;
return cases.get(code).getFormule();
}
}
Class Case{
String colonne;
int ligne;
double valeur;
Formule formule;
String getFormule(){
return this.formule.toString();
}
}
```
#### 3. Methode getFormuleDeveloppe
```java
Class Grille{
Map<String, Case> cases = new HashMap<>();
String getFormuleDeveloppe( String colonne, int ligne){
String code=colonne+ligne;
return cases.get(code).getFormuleDeveloppe();
}
}
Class Case{
String colonne;
int ligne;
double valeur;
Formule formule;
ArrayList<Case> utiliseDans = new ArrayList<Case>();
String getFormuleDeveloppe(){
return this.formule.getFormuleDeveloppe();
}
}
```
#### 4. Methode eval()
- Dans Addition :
```java
Class Addition{
Case gauche;
Case droite;
double eval(){
if (!creerCycle)
return gauche + droite ;
else
lève une exception
}
}
```
- Dans Multiplication :
```java
Class Multiplication{
Case gauche;
Case droite;
double eval(){
if (!creerCycle)
return gauche * droite ;
else
lève une exception
}
}
```
- Dans Soustraction :
|
1be42697
ANDJEMBE
hu
|
212
|
|
48bf0ff8
[mandjemb]
avec pseudo java
|
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
|
```java
Class Soustraction{
Case gauche;
Case droite;
double eval(){
if (!creerCycle)
return gauche - droite ;
else
lève une exception
}
}
```
- Dans Division :
```java
Class Division{
Case gauche;
Case droite;
double eval(){
if (!creerCycle && droite!=0)
|
0acdd486
mandjemb
modif
|
241
|
return gauche / droite ;
|
48bf0ff8
[mandjemb]
avec pseudo java
|
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
|
else
lève une exception
}
}
```
- Dans Moyenne :
```java
Class Moyenne{
ArrayList<Case> listePlage = new ArrayList<Case>();
double eval(){
double val=0;
if (!creerCycle && listePlage.size()!=0 )
for(int i=0; i<listePlage.size(); i++)
val=listePlage.get(i).getValeur()+val;
return val/listePlage.size();
else
lève une exception
}
}
|
1be42697
ANDJEMBE
hu
|
268
|
|
1be42697
ANDJEMBE
hu
|
269
|
```
|
48bf0ff8
[mandjemb]
avec pseudo java
|
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
|
- Dans Somme :
```java
Class Somme{
ArrayList<Case> listePlage = new ArrayList<Case>();
double eval(){
double val=0;
if (!creerCycle )
for(int i=0; i<listePlage.size(); i++)
val=listePlage.get(i).getValeur()+val;
return val;
else
lève une exception
}
}
```
#### 5. Methode setValeur(fixerValeur)
```java
Class Grille{
Map<String, Case> cases = new HashMap<>();
void setValeur( String colonne, int ligne,double value){
String code=colonne+ligne;
return cases.get(code).setValeur(double);
}
}
Class Case{
String colonne;
int ligne;
double valeur;
Formule formule;
ArrayList<Case> utiliseDans = new ArrayList<Case>();
void setValeur(double value){
valeur=value;
for(int i=0; i<utiliseDans.size(); i++)
utiliseDans.get(i).updateValeur();
}
}
```
#### 5. Methode setFormule
```java
Class Grille{
Map<String, Case> cases = new HashMap<>();
void setFormule( String colonne, int ligne,Formule formule){
String code=colonne+ligne;
return cases.get(code).setFormule(formula);
}
}
Class Case{
String colonne;
int ligne;
double valeur;
Formule formule;
ArrayList<Case> utiliseDans = new ArrayList<Case>();
void setFormule(Formule formula){
if (!formula.creerCycle())
formule=formula
|
5f9c9a29
rtaniel
update rapport
|
349
|
this.updateValeur(); // equivaut à valeur=formula.eval();
|
48bf0ff8
[mandjemb]
avec pseudo java
|
350
351
352
353
354
355
356
357
358
359
|
for(int i=0; i<utiliseDans.size(); i++)
utiliseDans.get(i).updateValeur();
else
lève une exception
}
}
```
|
dd4a1e45
Remi
test
|
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
|
### LISTE DE TESTS
Afin de s'assurer de la maintenabilité de notre code et de la qualité de
celui-ci, nous allons réaliser plusieurs tests sur les différentes méthodes
que nous allons programmé dans notre application, voici quelques
exemples :
* Création d'une case avec une valeur fixe
* Création d'une case avec une formule d' `Opération binaire` et une
fonction comme `Moyenne`
* Modification d'une case avec une valeur sans qu'elle soit utilisée dans
une autre case
* Modification d'une case avec une valeur utilisée dans une autre case
* Vérification qu'une erreur se lève lors de la création des 2 types
de cycles (direct et indirect)
|
0acdd486
mandjemb
modif
|
375
|
* Renvoie de la formule dévéloppée d'une case avec une formule assez compliqué
|