diff --git a/pom.xml b/pom.xml
index 306fcf070f377886ad386c2eca9e14d901246ca5..c97d20635bf94ff888cd24a78b3c8fee1d9cde59 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,12 +41,20 @@
         <dependency>
             <groupId>org.openjfx</groupId>
             <artifactId>javafx-controls</artifactId>
-            <version>14</version>
+            <version>17</version>
+            <!-- Pour Mac M1+ -->
+            <!-- <classifier>mac-aarch64</classifier> -->
+        </dependency>
+        <dependency>
+            <groupId>org.openjfx</groupId>
+            <artifactId>javafx</artifactId>
+            <version>17</version>
+            <type>pom</type>
         </dependency>
         <dependency>
             <groupId>org.openjfx</groupId>
             <artifactId>javafx-swing</artifactId>
-            <version>14</version>
+            <version>17</version>
         </dependency>
         <dependency>
             <groupId>org.junit.jupiter</groupId>
diff --git a/res/stages/load-data-stage.fxml b/res/stages/load-data-stage.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..ba97c3cdf5fea292eb84c0fa814cf5542c102a64
--- /dev/null
+++ b/res/stages/load-data-stage.fxml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.Scene?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.VBox?>
+<?import javafx.stage.Stage?>
+
+<Stage fx:id="stage" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.LoadDataController">
+    <scene>
+        <Scene>
+            <AnchorPane prefHeight="143.0" prefWidth="363.0">
+            <children>
+               <VBox layoutX="-1.0" layoutY="1.0" prefHeight="151.0" prefWidth="364.0">
+                  <children>
+                     <HBox alignment="CENTER" prefHeight="91.0" prefWidth="272.0">
+                        <children>
+                           <Label fx:id="filenamelab" prefHeight="83.0" prefWidth="157.0" text="file name" />
+                           <Button mnemonicParsing="false" onAction="#openFileChooser" text="Parcourir" />
+                        </children>
+                     </HBox>
+                     <HBox alignment="CENTER" prefHeight="76.0" prefWidth="310.0">
+                        <children>
+                           <Button mnemonicParsing="false" onAction="#validate" text="Valider" />
+                        </children>
+                     </HBox>
+                  </children>
+               </VBox>
+            </children></AnchorPane>
+        </Scene>
+    </scene>
+</Stage>
diff --git a/res/stages/main-stage.fxml b/res/stages/main-stage.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..e099e011a8ce7681c128ba314ec001f8d8aaeaeb
--- /dev/null
+++ b/res/stages/main-stage.fxml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.Scene?>
+<?import javafx.scene.chart.CategoryAxis?>
+<?import javafx.scene.chart.NumberAxis?>
+<?import javafx.scene.chart.ScatterChart?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.Region?>
+<?import javafx.scene.layout.VBox?>
+<?import javafx.stage.Stage?>
+
+<Stage fx:id="stage" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.MainStageController">
+    <scene>
+        <Scene>
+            <AnchorPane prefHeight="487.0" prefWidth="692.0">
+            <children>
+               <VBox prefHeight="488.0" prefWidth="691.0">
+                  <children>
+                     <HBox prefHeight="305.0" prefWidth="691.0">
+                        <children>
+                           <Region prefHeight="200.0" prefWidth="200.0" />
+                           <ScatterChart prefHeight="213.0" prefWidth="557.0">
+                             <xAxis>
+                               <CategoryAxis side="BOTTOM" />
+                             </xAxis>
+                             <yAxis>
+                               <NumberAxis side="LEFT" />
+                             </yAxis>
+                           </ScatterChart>
+                           <Region prefHeight="200.0" prefWidth="200.0" />
+                        </children>
+                     </HBox>
+                     <Region prefHeight="77.0" prefWidth="691.0" />
+                     <HBox prefHeight="100.0" prefWidth="200.0">
+                        <children>
+                           <Region prefHeight="101.0" prefWidth="131.0" />
+                           <Button mnemonicParsing="false" onAction="#openLoadData" prefHeight="27.0" prefWidth="122.0" text="Charger" />
+                           <Region prefHeight="101.0" prefWidth="75.0" />
+                           <Button mnemonicParsing="false" prefHeight="25.0" prefWidth="129.0" text="Classifier" />
+                           <Region prefHeight="101.0" prefWidth="70.0" />
+                           <Button mnemonicParsing="false" prefHeight="26.0" prefWidth="133.0" text="Reglages" />
+                           <Region prefHeight="101.0" prefWidth="111.0" />
+                        </children>
+                     </HBox>
+                  </children>
+               </VBox>
+            </children></AnchorPane>
+        </Scene>
+    </scene>
+</Stage>
diff --git a/src/main/java/fr/univlille/sae/classification/ClassificationApp.java b/src/main/java/fr/univlille/sae/classification/ClassificationApp.java
deleted file mode 100644
index 629539234881dc47173492b0ab04392868b2c3c3..0000000000000000000000000000000000000000
--- a/src/main/java/fr/univlille/sae/classification/ClassificationApp.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package fr.univlille.sae.classification;
-
-public class ClassificationApp {
-
-    public static void main(String[] args) {
-
-    }
-
-
-}
diff --git a/src/main/java/fr/univlille/sae/classification/Main.java b/src/main/java/fr/univlille/sae/classification/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..77fa80b1a00b346d7ece5f116224b02c1127dd38
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/Main.java
@@ -0,0 +1,31 @@
+package fr.univlille.sae.classification;
+
+import fr.univlille.sae.classification.model.ClassificationModel;
+import fr.univlille.sae.classification.view.MainStageView;
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.stage.Stage;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+public class Main extends Application {
+
+
+    public void start(Stage stage) throws IOException {
+            ClassificationModel model = new ClassificationModel();
+            MainStageView view = new MainStageView(model);
+
+            view.show();
+    }
+
+    // Ouvre l'application
+    public static void main(String[] args) {
+        Application.launch(args);
+    }
+
+
+
+
+}
diff --git a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
new file mode 100644
index 0000000000000000000000000000000000000000..190805880f62a128fdf49dde3a69deda50b35564
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
@@ -0,0 +1,54 @@
+package fr.univlille.sae.classification.controller;
+
+import javafx.fxml.FXML;
+import javafx.scene.control.Label;
+import javafx.stage.FileChooser;
+import javafx.stage.Stage;
+
+import java.io.File;
+
+public class LoadDataController {
+
+
+    @FXML
+    Stage stage;
+
+    @FXML
+    Label filenamelab;
+
+    File file;
+
+
+    public void loadData() {
+
+        System.out.println("Loading data");
+        stage.close();
+
+    }
+
+
+    public void openFileChooser() {
+
+        FileChooser fileChooser = new FileChooser();
+        fileChooser.setTitle("Choisissez le fichier à importer");
+         this.file = fileChooser.showOpenDialog(stage);
+
+        if(file != null) {
+            filenamelab.setText(file.getName());
+        }
+
+    }
+
+    public void validate() {
+
+        if (file == null) {
+            stage.close();
+            //throw exception
+        }
+
+        loadData();
+    }
+
+
+
+}
diff --git a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
index 9b40afd67cd1af4259ce47e832520dc3a4492e09..636343a65bd217bbaad2497b3688ad8aee68b5de 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
@@ -27,9 +27,9 @@ public class MainStageController {
     public void openLoadData() throws IOException {
 
 
-        /*
+
         FXMLLoader loader = new FXMLLoader();
-        URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "main-stage.fxml").toURI().toURL();
+        URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "load-data-stage.fxml").toURI().toURL();
 
         if (fxmlFileUrl == null) {
             System.out.println("Impossible de charger le fichier fxml");
@@ -44,7 +44,7 @@ public class MainStageController {
         loadStage.setTitle("Chargement des donées");
 
         loadStage.showAndWait();
-        */
+
 
     }
 
diff --git a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..1bfdec5b51e9508249a2673a916238a80bf7a764
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
@@ -0,0 +1,53 @@
+package fr.univlille.sae.classification.model;
+
+import fr.univlille.sae.classification.utils.Observable;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+
+public class ClassificationModel extends Observable {
+
+
+    private List<LoadableData> datas;
+    private List<LoadableData> dataToClass;
+
+    public ClassificationModel() {
+        this.datas = new ArrayList<>();
+
+    }
+
+    /**
+     * TODO
+     * @param x
+     * @param y
+     */
+    private void ajouterDonnee(double x, double y) {
+
+    }
+
+
+    /**
+     * TODO
+     * @param file
+     */
+    private void loadData(File file) {
+
+    }
+
+    /**
+     * TODO
+     * @param data
+     */
+    private void classifierDonnee(LoadableData data) {
+
+        List<String> classes = new ArrayList<>(data.getClassificationTypes());
+        Random rdm = new Random();
+        data.setClassification(classes.get(rdm.nextInt(classes.size())));
+
+    }
+
+
+}
diff --git a/src/main/java/fr/univlille/sae/classification/model/Iris.java b/src/main/java/fr/univlille/sae/classification/model/Iris.java
new file mode 100644
index 0000000000000000000000000000000000000000..b30835b3751bee9f6034c71b0a458ccf2c1daabf
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/model/Iris.java
@@ -0,0 +1,46 @@
+package fr.univlille.sae.classification.model;
+
+import java.util.Set;
+
+public class Iris extends LoadableData{
+
+
+    private double sepalWidth;
+    private double sepalLength;
+    private double petalWidth;
+    private double petalLength;
+
+
+
+
+    public Iris(double sepalWidth, double sepalLength, double petalWidth, double petalLength) {
+        this(sepalWidth, sepalLength, petalWidth, petalLength, "undefined");
+    }
+
+    public Iris(double sepalWidth, double sepalLength, double petalWidth, double petalLength, String classification) {
+        super();
+        this.sepalWidth = sepalWidth;
+        this.sepalLength = sepalLength;
+        this.petalWidth = petalWidth;
+        this.petalLength = petalLength;
+    }
+
+
+
+
+    public double getSepalWidth() {
+        return sepalWidth;
+    }
+
+    public double getSepalLength() {
+        return sepalLength;
+    }
+
+    public double getPetalWidth() {
+        return petalWidth;
+    }
+
+    public double getPetalLength() {
+        return petalLength;
+    }
+}
diff --git a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
new file mode 100644
index 0000000000000000000000000000000000000000..4de0abe4a687b74074761c54657795809bda17bb
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
@@ -0,0 +1,25 @@
+package fr.univlille.sae.classification.model;
+
+import java.util.Set;
+
+public class LoadableData {
+
+    private static Set<String> classificationTypes;
+
+    private String classification;
+
+
+    public LoadableData() {
+
+    }
+    public String getClassification() {
+        return this.classification;
+    }
+    Set<String> getClassificationTypes() {
+        return classificationTypes;
+    }
+    void setClassification(String classification) {
+        this.classification = classification;
+    }
+
+}
diff --git a/src/main/java/fr/univlille/sae/classification/utils/Observable.java b/src/main/java/fr/univlille/sae/classification/utils/Observable.java
new file mode 100644
index 0000000000000000000000000000000000000000..78a076d96c9ba7fc6afd725bad3ad2e9e8a0d86c
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/utils/Observable.java
@@ -0,0 +1,39 @@
+package fr.univlille.sae.classification.utils;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+public abstract class Observable {
+
+
+    protected Collection<Observer> attached = new HashSet<>();
+    protected Collection<Observer> toDetach = new HashSet<>();
+
+    public void attach(Observer obs) {
+        attached.add(obs);
+    }
+
+    public void detach(Observer obs) {
+        this.toDetach.add(obs);
+    }
+
+    protected void notifyObservers() {
+        this.updateList();
+        for (Observer o : attached) {
+            o.update(this);
+        }
+    }
+
+    protected void notifyObservers(Object data) {
+        this.updateList();
+        for (Observer o : attached) {
+            o.update(this, data);
+        }
+    }
+
+    private void updateList() {
+        this.attached.removeAll(toDetach);
+        this.toDetach.clear();
+    }
+
+}
diff --git a/src/main/java/fr/univlille/sae/classification/utils/Observer.java b/src/main/java/fr/univlille/sae/classification/utils/Observer.java
new file mode 100644
index 0000000000000000000000000000000000000000..e17a1a34c046e7a215b5afb60b6e712240813021
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/utils/Observer.java
@@ -0,0 +1,10 @@
+package fr.univlille.sae.classification.utils;
+
+public interface Observer {
+
+
+    void update(Observable observable);
+    void update(Observable observable, Object data);
+
+
+}
diff --git a/src/main/java/fr/univlille/sae/classification/view/LoadDataView.java b/src/main/java/fr/univlille/sae/classification/view/LoadDataView.java
new file mode 100644
index 0000000000000000000000000000000000000000..226180703f21200d9c94673ba00bfc56e4184bb5
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/view/LoadDataView.java
@@ -0,0 +1,6 @@
+package fr.univlille.sae.classification.view;
+
+public class LoadDataView {
+
+
+}
diff --git a/src/main/java/fr/univlille/sae/classification/view/MainStage.java b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
similarity index 58%
rename from src/main/java/fr/univlille/sae/classification/view/MainStage.java
rename to src/main/java/fr/univlille/sae/classification/view/MainStageView.java
index 350ba9a8b8cd5f321dda31d5cd1485e24400820d..159c4639e73dff13d5a2db8af434c181697a836b 100644
--- a/src/main/java/fr/univlille/sae/classification/view/MainStage.java
+++ b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
@@ -1,5 +1,8 @@
 package fr.univlille.sae.classification.view;
 
+import fr.univlille.sae.classification.model.ClassificationModel;
+import fr.univlille.sae.classification.utils.Observable;
+import fr.univlille.sae.classification.utils.Observer;
 import javafx.application.Application;
 import javafx.fxml.FXMLLoader;
 import javafx.stage.Stage;
@@ -8,10 +11,18 @@ import java.io.File;
 import java.io.IOException;
 import java.net.URL;
 
-public class MainStage extends Application {
+public class MainStageView implements Observer {
 
 
-    public void start(Stage stage) throws IOException {
+    private ClassificationModel model;
+
+    public MainStageView(ClassificationModel model) {
+        this.model = model;
+        model.attach(this);
+    }
+
+
+    public void show() throws IOException {
         FXMLLoader loader = new FXMLLoader();
 
         URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "main-stage.fxml").toURI().toURL();
@@ -25,15 +36,16 @@ public class MainStage extends Application {
         root.setResizable(false);
         root.setTitle("SAE3.3 - Logiciel de classification");
         root.show();
-
     }
 
-    // Ouvre l'application
-    public static void main(String[] args) {
-        Application.launch(args);
-    }
 
+    @Override
+    public void update(Observable observable) {
 
+    }
 
+    @Override
+    public void update(Observable observable, Object data) {
 
+    }
 }