diff --git a/src/main/java/fr/univamu/progav/td6/ArrayCellLens.java b/src/main/java/fr/univamu/progav/td6/ArrayCellLens.java
new file mode 100644
index 0000000000000000000000000000000000000000..daf38e356bd2b13c8311e3d126d0e490425f3a8c
--- /dev/null
+++ b/src/main/java/fr/univamu/progav/td6/ArrayCellLens.java
@@ -0,0 +1,21 @@
+package fr.univamu.progav.td6;
+
+public class ArrayCellLens<T> implements Lens<T> {
+
+  // TODO ajouter les propriétés
+
+  public ArrayCellLens(T[] array, int index) {
+    // TODO
+  }
+
+  @Override
+  public T get() {
+    // TODO
+    return null;
+  }
+
+  @Override
+  public void set(T t) {
+    // TODO
+  }
+}
diff --git a/src/main/java/fr/univamu/progav/td6/Box.java b/src/main/java/fr/univamu/progav/td6/Box.java
new file mode 100644
index 0000000000000000000000000000000000000000..9effbbf7ef0bfd52490555b8c4b8d475fae3571c
--- /dev/null
+++ b/src/main/java/fr/univamu/progav/td6/Box.java
@@ -0,0 +1,20 @@
+package fr.univamu.progav.td6;
+
+public class Box implements Lens<Integer> {
+
+  private int content;
+
+  public Box(int content) {
+    this.content = content;
+  }
+
+  @Override
+  public void set(Integer newContent) {
+    this.content = newContent;
+  }
+
+  @Override
+  public Integer get() {
+    return this.content;
+  }
+}
diff --git a/src/main/java/fr/univamu/progav/td6/Lens.java b/src/main/java/fr/univamu/progav/td6/Lens.java
new file mode 100644
index 0000000000000000000000000000000000000000..8dd0c660a57df16806c21959712c3e4ed0acfd7a
--- /dev/null
+++ b/src/main/java/fr/univamu/progav/td6/Lens.java
@@ -0,0 +1,6 @@
+package fr.univamu.progav.td6;
+
+public interface Lens<T> {
+  void set(T t);
+  T get();
+}
diff --git a/src/main/java/fr/univamu/progav/td6/ListCellLens.java b/src/main/java/fr/univamu/progav/td6/ListCellLens.java
new file mode 100644
index 0000000000000000000000000000000000000000..f433fa8deb855f229bf9e90966212f3c07571414
--- /dev/null
+++ b/src/main/java/fr/univamu/progav/td6/ListCellLens.java
@@ -0,0 +1,23 @@
+package fr.univamu.progav.td6;
+
+import java.util.List;
+
+public class ListCellLens<T> implements Lens<T> {
+
+  // TODO ajouter les propriétés
+
+  public ListCellLens(List<T> list, int index) {
+    // TODO
+  }
+
+  @Override
+  public void set(T t) {
+    // TODO
+  }
+
+  @Override
+  public T get() {
+    // TODO
+    return null;
+  }
+}
diff --git a/src/main/java/fr/univamu/progav/td6/TD6.md b/src/main/java/fr/univamu/progav/td6/TD6.md
new file mode 100644
index 0000000000000000000000000000000000000000..5e63490c1f6316ac401b06275257a6764b65e5c7
--- /dev/null
+++ b/src/main/java/fr/univamu/progav/td6/TD6.md
@@ -0,0 +1,74 @@
+Ces exercices ont pour sujet une interface `Lens` générique, permettant 
+de représenter un emplacement mémoire autorisant la lecture et l'écriture.
+
+Prendre connaissance de cette interface, qui propose deux méthodes `set`
+et `get`.
+
+
+Exercice 1
+==========
+
+Rendre la classe `Box` générique. Pour l'instant elle implémente un 
+`Lens<Integer>`, mais nous voulons l'utiliser avec d'autres types.
+
+Modifier la méthode de test `genericTest` de la classe `BoxTest` pour qu'elle 
+fonctionne.
+
+Exercice 2
+==========
+
+Étant donné une liste, chaque case de la liste est accessible en lecture et 
+en écriture. Il est donc possible de décrire chaque case avec l'interface 
+`Lens`. Compléter la classe générique `ListCellLens`, prenant une liste et 
+l'indice d'une case en paramètre du constructeur, et représentant la case ainsi 
+désignée.
+
+Vérifiez votre travail à l'aide des tests `ListCellLensTest` associés à la 
+classe.
+
+Exercice 3
+==========
+
+Nous pouvons faire la même chose avec les tableaux. Compléter la classe 
+générique `ArrayCellLens`, prenant un tableau et
+l'indice d'une case en paramètre du constructeur, et représentant la case ainsi
+désignée.
+
+Vérifiez votre travail à l'aide des tests `ArrayCellLensTest` associés à la 
+classe.
+
+Exercice 4
+==========
+
+Si vous essayez d'utiliser `ArrayCellLens` avec un tableau de type `int[]`, 
+cela produit une erreur à la compilation. Pourquoi ?
+
+Ajouter une classe `IntArrayCellLens` pour pouvoir faire un `Lens` sur une 
+case d'un tableau de type `int[]`.
+
+Ajouter un test dans la classe `ArrayCellLensTest`, s'assurant du bon 
+fonctionnement des méthodes `set` et `get` pour une case d'un tableau de 
+type `int[]`
+
+Exercice 5 (Optionnel)
+======================
+
+Nous pouvons utiliser un objet de type `Lens` pour stocker une valeur sous 
+un format compressé. Pour un type `S` (dont les valeurs prennent beaucoup de 
+place), si nous disposons d'une fonction de compression `f` vers un type `T` 
+(nécessitant moins de place), et de son inverse `g`, nous pouvons 
+représenter une valeur `s` de type `S` en stockant uniquement `f(s)`. La 
+méthode `get` applique automatiquement `g` pour retrouver la valeur initiale 
+(de type `S`). La méthode `set` applique automatiquement `f` pour ne stocker 
+qu'une image (de type `T`). Ainsi, nous réduisons l'espace utilisé, en 
+échange d'un coût de calcul des fonctions `f` et `g` `chaque opération.
+
+Ajouter une interface `Bijection` permettant de représenter par deux 
+méthodes les fonctions `f` et `g`.
+
+Ensuite créer une classe `ConvertingLens`, de type `Lens<S>`, et ayant une 
+propriété de type `T`. Le constructeur sera paramétré par la bijection à 
+utiliser.
+
+Tester avec `S = String`, `T = Integer`, en se restreignant aux chaînes de 
+caractères correspondant à des nombres décimaux (comme `"129873"`)
diff --git a/src/test/java/fr/univamu/progav/td6/ArrayCellLensTest.java b/src/test/java/fr/univamu/progav/td6/ArrayCellLensTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3fc462d0efdfcda28e46c5c494f4d90d4617fbc1
--- /dev/null
+++ b/src/test/java/fr/univamu/progav/td6/ArrayCellLensTest.java
@@ -0,0 +1,41 @@
+package fr.univamu.progav.td6;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class ArrayCellLensTest {
+
+  @Test
+  void testGet() {
+    Integer[] array = {4, 3, 2, 1};
+    Lens<Integer> lens1 = new ArrayCellLens<>(array, 1);
+    assertEquals(3, lens1.get());
+    array[1] = 5;
+    assertEquals(5, lens1.get());
+  }
+
+  @Test
+  void testSet() {
+    Integer[] array = {4, 3, 2, 1};
+    Lens<Integer> lens1 = new ArrayCellLens<>(array, 1);
+    lens1.set(8);
+    assertEquals(8, lens1.get());
+  }
+
+
+  @Test
+  void testSetModifyArray() {
+    Integer[] array = {4, 3, 2, 1};
+    Lens<Integer> lens1 = new ArrayCellLens<>(array, 1);
+    lens1.set(5);
+    assertEquals(5, lens1.get());
+    assertEquals(5, array[1]);
+    assertEquals(4, array[0]);
+    assertEquals(2, array[2]);
+  }
+
+}
diff --git a/src/test/java/fr/univamu/progav/td6/BoxTest.java b/src/test/java/fr/univamu/progav/td6/BoxTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..890f21104b6524a46502038a67d5b63f47403be5
--- /dev/null
+++ b/src/test/java/fr/univamu/progav/td6/BoxTest.java
@@ -0,0 +1,40 @@
+package fr.univamu.progav.td6;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class BoxTest {
+
+  @Test
+  void testGet() {
+    Lens<Integer> box = new Box(0);
+    assertEquals(0,box.get());
+    box = new Box(42);
+    assertEquals(42,box.get());
+  }
+
+  @Test
+  void testSet() {
+    Lens<Integer> box = new Box(0);
+    box.set(3);
+    assertEquals(3,box.get());
+    box.set(5);
+    assertEquals(5,box.get());
+    box.set(-3);
+    assertEquals(-3,box.get());
+  }
+
+
+  @Test
+  void genericBox() {
+    Lens<String> box = null; // TODO créer une boîte contenant "foo"
+    assertEquals("foo", box.get());
+    box.set("bar");
+    assertEquals("bar", box.get());
+    Lens<Lens<Integer>> boxbox = null; // TODO créer une boîte contenant une boîte contenant 0
+    boxbox.get().set(2);
+    assertEquals(2,boxbox.get().get());
+  }
+
+}
\ No newline at end of file
diff --git a/src/test/java/fr/univamu/progav/td6/ListCellLensTest.java b/src/test/java/fr/univamu/progav/td6/ListCellLensTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..c3d39f24ebacb7481b20fb9bb87706f0fe7e5619
--- /dev/null
+++ b/src/test/java/fr/univamu/progav/td6/ListCellLensTest.java
@@ -0,0 +1,41 @@
+package fr.univamu.progav.td6;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class ListCellLensTest {
+
+  @Test
+  void testGet() {
+    List<Integer> list = new ArrayList<>(List.of(4,3,2,1));
+    Lens<Integer> lens1 = new ListCellLens<>(list, 1);
+    assertEquals(3, lens1.get());
+    list.set(1,5);
+    assertEquals(5, lens1.get());
+  }
+
+  @Test
+  void testSet() {
+    List<Integer> list = new ArrayList<>(List.of(4,3,2,1));
+    Lens<Integer> lens1 = new ListCellLens<>(list, 1);
+    lens1.set(8);
+    assertEquals(8, lens1.get());
+  }
+
+
+  @Test
+  void testSetModifyList() {
+    List<Integer> list = new ArrayList<>(List.of(4,3,2,1));
+    Lens<Integer> lens1 = new ListCellLens<>(list, 1);
+    lens1.set(5);
+    assertEquals(5, lens1.get());
+    assertEquals(5, list.get(1));
+    assertEquals(4, list.get(0));
+    assertEquals(2, list.get(2));
+  }
+
+}
\ No newline at end of file