diff --git a/Figure/.classpath b/Figure/.classpath
new file mode 100644
index 0000000..57bca72
--- /dev/null
+++ b/Figure/.classpath
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Figure/.project b/Figure/.project
new file mode 100644
index 0000000..abdbe9d
--- /dev/null
+++ b/Figure/.project
@@ -0,0 +1,28 @@
+
+
+ Figure
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
+
+ 1758261738047
+
+ 30
+
+ org.eclipse.core.resources.regexFilterMatcher
+ node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__
+
+
+
+
diff --git a/Figure/src/FiguraMain.java b/Figure/src/FiguraMain.java
new file mode 100644
index 0000000..308c090
--- /dev/null
+++ b/Figure/src/FiguraMain.java
@@ -0,0 +1,112 @@
+/*
+Progettare un sistema per gestire una griglia bidimensionale di figure geometriche.
+Ogni cella della griglia può contenere una figura (come un cerchio o un quadrato),
+oppure essere vuota.
+-
+Ogni figura deve implementare un’interfaccia Figura
+che definisce un metodo per calcolare l’area double calcolaArea();
+e String descrizione(); che scrive il nome della figura
+
+Le figure devono estendere una classe astratta FiguraAstratta
+che implementa l’interfaccia Figura e fornisce un metodo descrizione() da sovrascrivere.
+
+Nel main, dovrai:
+--
+1) Creare un array bidimensionale di Figura (Figura[][] griglia = new Figura[3][3];)
+2) Inserire alcune figure nella griglia.
+3) Calcolare l’area totale delle figure nella griglia.
+4) Gestire eventuali eccezioni con try-catch (es. inserimento in posizione fuori dall’array).
+*/
+
+interface Figura {
+double calcolaArea();
+String descrizione();
+}
+
+abstract class FiguraAstratta implements Figura {
+protected String nome;
+
+public FiguraAstratta(String nome) {
+this.nome = nome;
+}
+
+public abstract double calcolaArea();
+
+public String descrizione() {
+return "Figura: " + nome;
+}
+}
+
+class Cerchio extends FiguraAstratta {
+private double raggio;
+
+public Cerchio(double raggio) {
+super("Cerchio");
+this.raggio = raggio;
+}
+
+@Override
+public double calcolaArea() {
+return Math.PI * raggio * raggio;
+}
+
+@Override
+public String descrizione() {
+return super.descrizione() + " con raggio " + raggio;
+}
+}
+
+class Quadrato extends FiguraAstratta {
+private double lato;
+
+public Quadrato(double lato) {
+super("Quadrato");
+this.lato = lato;
+}
+
+@Override
+public double calcolaArea() {
+return lato * lato;
+}
+
+@Override
+public String descrizione() {
+return super.descrizione() + " con lato " + lato;
+}
+}
+
+public class FiguraMain {
+
+ public static void main(String[] args) {
+ Figura[][] griglia = new Figura[3][3];
+
+try {
+griglia[0][0] = new Cerchio(2.0);
+griglia[1][1] = new Quadrato(3.0);
+griglia[2][2] = new Cerchio(1.5);
+
+// Prova inserimento fuori dai limiti per scatenare un'eccezione
+griglia[3][3] = new Quadrato(4.0); // ArrayIndexOutOfBoundsException
+
+} catch (ArrayIndexOutOfBoundsException e) {
+System.out.println("Errore: tentativo di accesso fuori dai limiti dell'array.");
+} catch (Exception e) {
+System.out.println("Errore generico: " + e.getMessage());
+}
+
+double areaTotale = 0.0;
+
+for (int i = 0; i < griglia.length; i++) {
+for (int j = 0; j < griglia[i].length; j++) {
+if (griglia[i][j] != null) {
+System.out.println("Figura in posizione [" + i + "][" + j + "]: "
++ griglia[i][j].descrizione() + " - Area: " + griglia[i][j].calcolaArea());
+areaTotale += griglia[i][j].calcolaArea();
+}
+}
+}
+
+System.out.println("Area totale delle figure nella griglia: " + areaTotale);
+}
+
+ }
\ No newline at end of file