diff --git a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
index f14feab96b4523782dce473455a8e8182262d75a..cad5bfb62df756c2010d6e253751c0672b527853 100644
--- a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
@@ -32,10 +32,10 @@ import java.util.Map;
  */
 public class DataStageView extends DataVisualizationView implements Observer {
 
-    private ClassificationModel model;
+
     private DataStageController controller;
 
-    private Map<String, ScatterChart.Series<Double, Double>> serieList;
+
 
     private XYChart.Series series1;
     private XYChart.Series series2;
@@ -49,9 +49,9 @@ public class DataStageView extends DataVisualizationView implements Observer {
      * @param model le modèle de classification utilisé pour gérer les données.
      */
     public DataStageView(ClassificationModel model) {
-        super();
-        this.serieList = new HashMap<String, ScatterChart.Series<Double, Double>>();
-        this.model = model;
+        super(model);
+
+
         this.series1 = new XYChart.Series();
         this.series2 = new XYChart.Series();
         this.series3 = new XYChart.Series();
@@ -93,118 +93,6 @@ public class DataStageView extends DataVisualizationView implements Observer {
         }
     }
 
-    /**
-     * Met à jour l'affichage des données en fonction des changements dans le modèle.
-     * @param observable modèle observé.
-     */
-    @Override
-    public void update(Observable observable) {
-        try {
-            if (scatterChart == null || !(observable instanceof ClassificationModel)) {
-                System.err.println("Erreur de mise à jour.");
-                return;
-            }
-
-            scatterChart.getData().clear();
-            serieList.clear();
-
-            if (actualX == null && actualY == null) {
-                controller.setAxesSelected("Aucuns axes sélectionnés");
-            } else {
-                controller.setAxesSelected("");
-                controller.setAxesSelectedDisable();
-
-                List<LoadableData> points = new ArrayList<>(model.getDatas());
-                points.addAll(model.getDataToClass().keySet());
-                for (LoadableData data : points) {
-                    Object xValue = data.getAttributesNames().get(actualX);
-                    Object yValue = data.getAttributesNames().get(actualY);
-
-                    Double x = 0.0;
-                    if (xValue instanceof Integer) {
-                        x = ((Integer) xValue).doubleValue();
-                    } else if (xValue instanceof Double) {
-                        x = (Double) xValue;
-                    }
-
-                    Double y = 0.0;
-                    if (yValue instanceof Integer) {
-                        y = ((Integer) yValue).doubleValue();
-                    } else if (yValue instanceof Double) {
-                        y = (Double) yValue;
-                    }
-
-                    ScatterChart.Data<Double, Double> dataPoint = new ScatterChart.Data<>(x, y);
-
-                    Node nodePoint = ViewUtil.getForm(data, new Circle(5), controller);
-
-                    ScatterChart.Series<Double, Double> editSerie = serieList.get(data.getClassification());
-                    if(editSerie == null){
-                        editSerie = new ScatterChart.Series<Double, Double>();
-                    }
-                    if(data.getClassification().equals("undefined") || model.getDataToClass().containsKey(data)) {
-                        nodePoint = ViewUtil.getForm(data, new Rectangle(10,10), controller);
-                    }
-                    dataPoint.setNode(nodePoint);
-                    editSerie.getData().add(dataPoint);
-                    serieList.put(data.getClassification(), editSerie);
-                }
-
-                for(String serie : serieList.keySet()) {
-                    serieList.get(serie).setName(serie);
-                }
-                scatterChart.getData().addAll(serieList.values());
-
-                HBox hBox = ViewUtil.loadLegend();
-                controller.loadLegend(hBox);
-            }
-        } catch (Exception e) {
-            System.err.println("Erreur de mise à jour : " + e.getMessage());
-        }
-    }
-
-    /**
-     * Met à jour l'affichage en ajoutant un nouveau point de données.
-     * @param observable modèle observé.
-     * @param data point de données à ajouter.
-     */
-    @Override
-    public void update(Observable observable, Object data) {
-        try {
-            if (scatterChart == null || !(observable instanceof ClassificationModel)) {
-                System.err.println("Erreur de mise à jour.");
-                return;
-            }
-            LoadableData newData = (LoadableData) data;
-            if (actualX == null || actualY == null) {
-                controller.setAxesSelected("Aucuns axes sélectionnés");
-                return;
-            }
-            Object attrX = newData.getAttributesNames().get(actualX);
-            Object attrY = newData.getAttributesNames().get(actualY);
-            if (attrX instanceof Integer) {
-                attrX = ((Integer) attrX).doubleValue();
-            }
-            if (attrY instanceof Integer) {
-                attrY = ((Integer) attrY).doubleValue();
-            }
-            XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(
-                    (Double) attrX,
-                    (Double) attrY
-            );
-
-            dataPoint.setNode(ViewUtil.getForm(newData, new Rectangle(10, 10), controller));
-            if (!scatterChart.getData().isEmpty()) {
-                series4.getData().add(dataPoint);
-                series4.setName("indéfini");
-                scatterChart.getData().add(series4);
-            }
-            HBox hBox = ViewUtil.loadLegend();
-            controller.loadLegend(hBox);
-        } catch (Exception e) {
-            System.err.println("Erreur de mise à jour : " + e.getMessage());
-        }
-    }
 
     /**
      * Renvoie le contrôleur associé à cette vue.
diff --git a/src/main/java/fr/univlille/sae/classification/view/DataVisualizationView.java b/src/main/java/fr/univlille/sae/classification/view/DataVisualizationView.java
index 3fdc4552777055ad7c7f2eca8076b643e73bccfd..ecb717c5ce239bb41fd051a50f0886795d360b0a 100644
--- a/src/main/java/fr/univlille/sae/classification/view/DataVisualizationView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/DataVisualizationView.java
@@ -5,10 +5,17 @@ import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.model.LoadableData;
 import fr.univlille.sae.classification.utils.Observable;
 import fr.univlille.sae.classification.utils.ViewUtil;
+import javafx.scene.Node;
 import javafx.scene.chart.ScatterChart;
 import javafx.scene.chart.XYChart;
+import javafx.scene.layout.HBox;
 import javafx.scene.shape.*;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * Classe abstraite représentant une vue de visualisation des données.
  * Elle gère les axes actuels et le graphique de dispersion.
@@ -23,10 +30,16 @@ public abstract class DataVisualizationView {
     protected String actualY;
     protected ScatterChart scatterChart;
     private MainStageController controller;
+
+    private Map<String, ScatterChart.Series<Double, Double>> serieList;
+    public ClassificationModel model;
     /**
      * Constructeur par défaut.
      */
-    protected DataVisualizationView() {}
+    protected DataVisualizationView(ClassificationModel model) {
+        this.serieList = new HashMap<String, ScatterChart.Series<Double, Double>>();
+        this.model = model;
+    }
 
     /**
      * Renvoie le nom de l'axe X actuel.
@@ -74,17 +87,97 @@ public abstract class DataVisualizationView {
     public abstract void reload();
 
 
-    /**
-     * Met à jour l'affichage en ajoutant un nouveau point de données.
-     * @param observable modèle observé.
-     * @param data point de données à ajouter.
-     */
+
+    public void update(Observable observable) {
+        try {
+            if (scatterChart == null || !(observable instanceof ClassificationModel)) {
+                System.err.println("Erreur de mise à jour.");
+                return;
+            }
+
+            scatterChart.getData().clear();
+            serieList.clear();
+
+            if (actualX == null && actualY == null) {
+                controller.setAxesSelected("Aucuns axes sélectionnés");
+            } else {
+                controller.setAxesSelected("");
+                controller.setAxesSelectedDisable();
+
+                List<LoadableData> points = new ArrayList<>(model.getDatas());
+                points.addAll(model.getDataToClass().keySet());
+                for (LoadableData data : points) {
+                    Object xValue = data.getAttributesNames().get(actualX);
+                    Object yValue = data.getAttributesNames().get(actualY);
+
+
+
+                    double x = 0;
+                    if(xValue instanceof Number) {
+                        x = ((Number) xValue).doubleValue();
+                    }
+                    double y = 0;
+                    if(yValue instanceof Number) {
+                        y = ((Number) yValue).doubleValue();
+                    }
+                    /**
+                     Double x = 0.0;
+                     if (xValue instanceof Integer) {
+                     x = ((Integer) xValue).doubleValue();
+                     } else if (xValue instanceof Double) {
+                     x = (Double) xValue;
+                     }
+
+                     Double y = 0.0;
+                     if (yValue instanceof Integer) {
+                     y = ((Integer) yValue).doubleValue();
+                     } else if (yValue instanceof Double) {
+                     y = (Double) yValue;
+                     }
+                     **/
+                    ScatterChart.Data<Double, Double> dataPoint = new ScatterChart.Data<>(x, y);
+
+                    Node nodePoint = ViewUtil.getForm(data, new Circle(5), controller);
+
+                    ScatterChart.Series<Double, Double> editSerie = serieList.get(data.getClassification());
+                    if(editSerie == null){
+                        editSerie = new ScatterChart.Series<Double, Double>();
+                    }
+                    if(data.getClassification().equals("undefined") || model.getDataToClass().containsKey(data)) {
+                        nodePoint = ViewUtil.getForm(data, new Rectangle(10,10), controller);
+                    }
+
+                    dataPoint.setNode(nodePoint);
+                    editSerie.getData().add(dataPoint);
+                    serieList.put(data.getClassification(), editSerie);
+                }
+
+                for(String serie : serieList.keySet()) {
+                    serieList.get(serie).setName(serie);
+                }
+                scatterChart.getData().addAll(serieList.values());
+
+
+                HBox hBox = ViewUtil.loadLegend();
+                controller.loadLegend(hBox);
+            }
+
+
+        } catch (Exception e) {
+            System.err.println("Erreur de mise à jour : " + e.getMessage());
+        }
+    }
+
+
     public void update(Observable observable, Object data) {
         try {
             if (scatterChart == null || !(observable instanceof ClassificationModel)) {
                 System.err.println("Erreur de mise à jour.");
                 return;
             }
+
+
+
             LoadableData newData = (LoadableData) data;
             if (actualX == null || actualY == null) {
                 controller.setAxesSelected("Aucuns axes sélectionnés");
@@ -104,15 +197,14 @@ public abstract class DataVisualizationView {
             );
 
             dataPoint.setNode(ViewUtil.getForm(newData, new Rectangle(10, 10), controller));
-
             if (!scatterChart.getData().isEmpty()) {
-                if (series4 == null) {
-                    series4 = new ScatterChart.Series<>();
-                }
                 series4.getData().add(dataPoint);
                 series4.setName("indéfini");
                 scatterChart.getData().add(series4);
             }
+
+
+            controller.loadLegend(ViewUtil.loadLegend());
         } catch (Exception e) {
             System.err.println("Erreur de mise à jour : " + e.getMessage());
         }
diff --git a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
index 39d6cb935722bf87d326a8dd611ede4a49267a0e..91ea4470b4a49fa04d9932d13db0ab581c35d3f7 100644
--- a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
@@ -26,12 +26,12 @@ import java.util.*;
  */
 public class MainStageView extends DataVisualizationView implements Observer {
 
-    private ClassificationModel model;
+
     private MainStageController controller;
 
     private Stage root;
 
-    private Map<String, ScatterChart.Series<Double, Double>> serieList;
+
 
     private ScatterChart.Series series1;
     private ScatterChart.Series series2;
@@ -43,13 +43,13 @@ public class MainStageView extends DataVisualizationView implements Observer {
      * @param model modèle de classification à utiliser.
      */
     public MainStageView(ClassificationModel model) {
-        super();
-        this.serieList = new HashMap<String, ScatterChart.Series<Double, Double>>();
+        super(model);
+
         this.series1 = new ScatterChart.Series();
         this.series2 = new ScatterChart.Series();
         this.series3 = new ScatterChart.Series();
         this.series4 = new ScatterChart.Series();
-        this.model = model;
+
         model.attach(this);
     }
 
@@ -98,128 +98,7 @@ public class MainStageView extends DataVisualizationView implements Observer {
         }
     }
 
-    @Override
-    public void update(Observable observable) {
-        try {
-            if (scatterChart == null || !(observable instanceof ClassificationModel)) {
-                System.err.println("Erreur de mise à jour.");
-                return;
-            }
-
-            scatterChart.getData().clear();
-            serieList.clear();
-
-            if (actualX == null && actualY == null) {
-                controller.setAxesSelected("Aucuns axes sélectionnés");
-            } else {
-                controller.setAxesSelected("");
-                controller.setAxesSelectedDisable();
-
-                List<LoadableData> points = new ArrayList<>(model.getDatas());
-                points.addAll(model.getDataToClass().keySet());
-                for (LoadableData data : points) {
-                    Object xValue = data.getAttributesNames().get(actualX);
-                    Object yValue = data.getAttributesNames().get(actualY);
-
-
-
-                    double x = 0;
-                    if(xValue instanceof Number) {
-                        x = ((Number) xValue).doubleValue();
-                    }
-                    double y = 0;
-                    if(yValue instanceof Number) {
-                        y = ((Number) yValue).doubleValue();
-                    }
-                    /**
-                    Double x = 0.0;
-                    if (xValue instanceof Integer) {
-                        x = ((Integer) xValue).doubleValue();
-                    } else if (xValue instanceof Double) {
-                        x = (Double) xValue;
-                    }
-
-                    Double y = 0.0;
-                    if (yValue instanceof Integer) {
-                        y = ((Integer) yValue).doubleValue();
-                    } else if (yValue instanceof Double) {
-                        y = (Double) yValue;
-                    }
-                    **/
-                    ScatterChart.Data<Double, Double> dataPoint = new ScatterChart.Data<>(x, y);
-
-                    Node nodePoint = ViewUtil.getForm(data, new Circle(5), controller);
-
-                    ScatterChart.Series<Double, Double> editSerie = serieList.get(data.getClassification());
-                    if(editSerie == null){
-                        editSerie = new ScatterChart.Series<Double, Double>();
-                    }
-                    if(data.getClassification().equals("undefined") || model.getDataToClass().containsKey(data)) {
-                        nodePoint = ViewUtil.getForm(data, new Rectangle(10,10), controller);
-                    }
-
-                    dataPoint.setNode(nodePoint);
-                    editSerie.getData().add(dataPoint);
-                    serieList.put(data.getClassification(), editSerie);
-                }
-
-                for(String serie : serieList.keySet()) {
-                    serieList.get(serie).setName(serie);
-                }
-                scatterChart.getData().addAll(serieList.values());
-
-
-                HBox hBox = ViewUtil.loadLegend();
-                controller.loadLegend(hBox);
-            }
-
-
-        } catch (Exception e) {
-            System.err.println("Erreur de mise à jour : " + e.getMessage());
-        }
-    }
-
-    @Override
-    public void update(Observable observable, Object data) {
-        try {
-            if (scatterChart == null || !(observable instanceof ClassificationModel)) {
-                System.err.println("Erreur de mise à jour.");
-                return;
-            }
-
-
 
-            LoadableData newData = (LoadableData) data;
-            if (actualX == null || actualY == null) {
-                controller.setAxesSelected("Aucuns axes sélectionnés");
-                return;
-            }
-            Object attrX = newData.getAttributesNames().get(actualX);
-            Object attrY = newData.getAttributesNames().get(actualY);
-            if (attrX instanceof Integer) {
-                attrX = ((Integer) attrX).doubleValue();
-            }
-            if (attrY instanceof Integer) {
-                attrY = ((Integer) attrY).doubleValue();
-            }
-            XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(
-                    (Double) attrX,
-                    (Double) attrY
-            );
-
-            dataPoint.setNode(ViewUtil.getForm(newData, new Rectangle(10, 10), controller));
-            if (!scatterChart.getData().isEmpty()) {
-                series4.getData().add(dataPoint);
-                series4.setName("indéfini");
-                scatterChart.getData().add(series4);
-            }
-
-
-            controller.loadLegend(ViewUtil.loadLegend());
-        } catch (Exception e) {
-            System.err.println("Erreur de mise à jour : " + e.getMessage());
-        }
-    }
 
     public MainStageController getController() {
         return controller;