From e96541053bd960a85a9182a52cdf3d3fff42e6cb Mon Sep 17 00:00:00 2001 From: [mandjemb] Date: Thu, 20 Jun 2019 11:32:06 +0200 Subject: [PATCH] maj --- package.png | Bin 63135 -> 0 bytes rapport.md | 391 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- rapport.pdf | Bin 291052 -> 0 bytes rapport_analyse.md | 391 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ rapport_image/package.png | Bin 0 -> 63135 bytes 5 files changed, 391 insertions(+), 391 deletions(-) delete mode 100644 package.png delete mode 100644 rapport.md delete mode 100644 rapport.pdf create mode 100644 rapport_analyse.md create mode 100644 rapport_image/package.png diff --git a/package.png b/package.png deleted file mode 100644 index f83180f..0000000 Binary files a/package.png and /dev/null differ diff --git a/rapport.md b/rapport.md deleted file mode 100644 index 2c6c9f0..0000000 --- a/rapport.md +++ /dev/null @@ -1,391 +0,0 @@ -# RAPPORT ANALYSE ET CONCEPTION - -> ANDJEMBE Maksoudath, TANIEL Rémi - -Le but du projet est de réaliser un tableur "basique" mais facilement -extensible, l'application sera divisée en 2 parties : -* le kernel -* la partie graphique - -Le kernel s'occupera de toutes les opérations de notre grid, les cases -ne pourront contenir que des réels ou des formules(opération binaire ou -des fonctions acceptant des plages de cases). - -### SCHEMA UML - -Voici le schéma UML de notre application, les classes et méthodes -abstraites sont en italique : - -![UML](uml.png) - - -### PSEUDO-JAVA CREATION GRILLE,CASES - -Voici un exemple de création d'une grid et de l'ajout / modification / -affichage de plusieurs types de case : - -```java -class Application { - - public static void main(String[] args) { - Grille g = new Grille(); - - g.createCase("b",1); //Ajout case vide - g.createCase("a",1,100.0); //Ajout case avec valeur - g.createCase("a",2,50.0); //Ajout case avec valeur - g.createCase("a",3,new Addition(g.getCase("a",2),g.getCase("a",1))); //Ajout case avec operation binaire - - List plageCase1 = new ArrayList(); // Crée une liste de case - plageCase1.add(g.getCase("a",1)); - plageCase1.add(g.getCase("a",2)); - plageCase1.add(g.getCase("a",3)); - - g.createCase("a",4,new Somme(plageCase1)); //Ajout case avec fonctions - - g.setValeur("b",1,100); //Met la valeur de b1 à 100 - - List plageCase2 = new ArrayList(); // Crée une liste de case - plageCase1.add(g.getCase("a",4)); - plageCase1.add(g.getCase("a",2)); - plageCase1.add(g.getCase("a",3)); - - 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.getFormuleAsString("b",2); //Affichera MOYENNE(a4,a2,a3) - g.getFormuleDeveloppe("b",2); Sum - } -} -``` - -### CHOIX STRUCTURE DE DONNÉES - -Nous devons choisir une structure de donnée pour stocker les cases dans -notre grid, 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 - -D'après le schéma UML ci-dessus, nous allons donc utiliser une `HashMap` -pour stocker les cases de notre grid : -* 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 - -#### 1. Methode getValeur - -```java - -class Grille { - Map 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 getFormuleAsString - -```java - -class Grille { - Map cases = new HashMap<>(); - - String getFormule(String colonne, int ligne) { - String code=colonne+ligne; - return cases.get(code).getFormuleAsString(); - } -} - - -class Case { - String colonne; - int ligne; - double valeur; - Formule formule; - - String getFormuleAsString() { - if (formule != null) - return formule.toString(); - else - return toString(); - } -} - -// Exemple pour Addition -class Addition { - Case gauche; - Case droite; - - String toString() { - return gauche.toString() + "+" + droite.toString(); - } -} - -``` - - -#### 3. Methode getFormuleDeveloppe - -```java -class Grille{ - Map 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 utiliseDans = new ArrayList(); - - String getFormuleDeveloppe() { - if (formule != null) - return formule.getFormuleDeveoppe(); - else - return toString(); - } -} - -Average -class Moyenne { - List listCases = new ArrayList(); - - String getFormuleDeveloppe() { - return Average + listCases.stream().map(c -> c.getFormuleDeveloppe()).collect((Collectors).joining(", ")) + ")"; - } -} - -``` - - -#### 4. Methode eval() - -- Dans Addition : - -```java -class Addition { - Case gauche; - Case droite; - - double eval() { - return gauche.getValeur() + droite.getValeur(); - } -} - -``` - -- Dans Multiplication : - -```java -class Multiplication { - Case gauche; - Case droite; - - double eval() { - return gauche.getValeur() * droite.getValeur(); - } -} -``` - - -- Dans Soustraction : - -```java -class Soustraction { - Case gauche; - Case droite; - - double eval() { - return gauche.getValeur() - droite.getValeur(); - } -} - -``` - -- Dans Division : - -```java -class Division { - Case gauche; - Case droite; - - double eval() { - if (droite.getValeur() != 0) - return gauche.getValeur() / droite.getValeur(); - else - lève une exception - } -} - -``` - -- Dans Moyenne : - -```java -class Moyenne { - List listCases = new ArrayList(); - - double eval() { - double val=0; - - if (listCases.size() != 0) - for(int i=0; i listCases = new ArrayList(); - - double eval() { - double val=0; - if (listCases.size() != 0) - for(int i=0; i cases = new HashMap<>(); - - void setValeur(String colonne, int ligne, double value) { - String code = colonne + ligne; - return cases.get(code).setValeur(value); - } -} - -class Case { - String colonne; - int ligne; - double valeur; - Formule formule; - List utiliseDans = new ArrayList(); - - void setValeur(double value) { - valeur = value; - for(int i=0; i 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; - List utiliseDans = new ArrayList(); - - void updateValeur() { - valeur = formule.eval(); - } - - void setFormule(Formule formula) { - if (!formula.creerCycle(this)) - formule = formula; - updateValeur(); - for(int i=0; i ANDJEMBE Maksoudath, TANIEL Rémi + +Le but du projet est de réaliser un tableur "basique" mais facilement +extensible, l'application sera divisée en 2 parties : +* le kernel +* la partie graphique + +Le kernel s'occupera de toutes les opérations de notre grid, les cases +ne pourront contenir que des réels ou des formules(opération binaire ou +des fonctions acceptant des plages de cases). + +### SCHEMA UML + +Voici le schéma UML de notre application, les classes et méthodes +abstraites sont en italique : + +![UML](uml.png) + + +### PSEUDO-JAVA CREATION GRILLE,CASES + +Voici un exemple de création d'une grid et de l'ajout / modification / +affichage de plusieurs types de case : + +```java +class Application { + + public static void main(String[] args) { + Grille g = new Grille(); + + g.createCase("b",1); //Ajout case vide + g.createCase("a",1,100.0); //Ajout case avec valeur + g.createCase("a",2,50.0); //Ajout case avec valeur + g.createCase("a",3,new Addition(g.getCase("a",2),g.getCase("a",1))); //Ajout case avec operation binaire + + List plageCase1 = new ArrayList(); // Crée une liste de case + plageCase1.add(g.getCase("a",1)); + plageCase1.add(g.getCase("a",2)); + plageCase1.add(g.getCase("a",3)); + + g.createCase("a",4,new Somme(plageCase1)); //Ajout case avec fonctions + + g.setValeur("b",1,100); //Met la valeur de b1 à 100 + + List plageCase2 = new ArrayList(); // Crée une liste de case + plageCase1.add(g.getCase("a",4)); + plageCase1.add(g.getCase("a",2)); + plageCase1.add(g.getCase("a",3)); + + 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.getFormuleAsString("b",2); //Affichera MOYENNE(a4,a2,a3) + g.getFormuleDeveloppe("b",2); Sum + } +} +``` + +### CHOIX STRUCTURE DE DONNÉES + +Nous devons choisir une structure de donnée pour stocker les cases dans +notre grid, 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 + +D'après le schéma UML ci-dessus, nous allons donc utiliser une `HashMap` +pour stocker les cases de notre grid : +* 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 + +#### 1. Methode getValeur + +```java + +class Grille { + Map 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 getFormuleAsString + +```java + +class Grille { + Map cases = new HashMap<>(); + + String getFormule(String colonne, int ligne) { + String code=colonne+ligne; + return cases.get(code).getFormuleAsString(); + } +} + + +class Case { + String colonne; + int ligne; + double valeur; + Formule formule; + + String getFormuleAsString() { + if (formule != null) + return formule.toString(); + else + return toString(); + } +} + +// Exemple pour Addition +class Addition { + Case gauche; + Case droite; + + String toString() { + return gauche.toString() + "+" + droite.toString(); + } +} + +``` + + +#### 3. Methode getFormuleDeveloppe + +```java +class Grille{ + Map 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 utiliseDans = new ArrayList(); + + String getFormuleDeveloppe() { + if (formule != null) + return formule.getFormuleDeveoppe(); + else + return toString(); + } +} + +Average +class Moyenne { + List listCases = new ArrayList(); + + String getFormuleDeveloppe() { + return Average + listCases.stream().map(c -> c.getFormuleDeveloppe()).collect((Collectors).joining(", ")) + ")"; + } +} + +``` + + +#### 4. Methode eval() + +- Dans Addition : + +```java +class Addition { + Case gauche; + Case droite; + + double eval() { + return gauche.getValeur() + droite.getValeur(); + } +} + +``` + +- Dans Multiplication : + +```java +class Multiplication { + Case gauche; + Case droite; + + double eval() { + return gauche.getValeur() * droite.getValeur(); + } +} +``` + + +- Dans Soustraction : + +```java +class Soustraction { + Case gauche; + Case droite; + + double eval() { + return gauche.getValeur() - droite.getValeur(); + } +} + +``` + +- Dans Division : + +```java +class Division { + Case gauche; + Case droite; + + double eval() { + if (droite.getValeur() != 0) + return gauche.getValeur() / droite.getValeur(); + else + lève une exception + } +} + +``` + +- Dans Moyenne : + +```java +class Moyenne { + List listCases = new ArrayList(); + + double eval() { + double val=0; + + if (listCases.size() != 0) + for(int i=0; i listCases = new ArrayList(); + + double eval() { + double val=0; + if (listCases.size() != 0) + for(int i=0; i cases = new HashMap<>(); + + void setValeur(String colonne, int ligne, double value) { + String code = colonne + ligne; + return cases.get(code).setValeur(value); + } +} + +class Case { + String colonne; + int ligne; + double valeur; + Formule formule; + List utiliseDans = new ArrayList(); + + void setValeur(double value) { + valeur = value; + for(int i=0; i 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; + List utiliseDans = new ArrayList(); + + void updateValeur() { + valeur = formule.eval(); + } + + void setFormule(Formule formula) { + if (!formula.creerCycle(this)) + formule = formula; + updateValeur(); + for(int i=0; i