From e0df49de0abf1cd5e2e0719708ea6fd467313577 Mon Sep 17 00:00:00 2001
From: iliya <iliya.saroukha@hes-so.ch>
Date: Fri, 13 Oct 2023 13:53:46 +0200
Subject: [PATCH] feat: ex1 serie2 finished

---
 serie2/ex1.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)
 create mode 100644 serie2/ex1.md

diff --git a/serie2/ex1.md b/serie2/ex1.md
new file mode 100644
index 0000000..4f20be2
--- /dev/null
+++ b/serie2/ex1.md
@@ -0,0 +1,57 @@
+---
+lang: fr
+---
+
+# Cohérence
+
+La classe proposée ci-dessous permet de créer un compte bancaire : Une règle de
+cohérence voudrait qu'un compte soit en tout temps positif ou égal à zéro.
+
+Trouvez 3 exemples d'utilisations qui permettent de corrompre l'état d'un compte
+bancaire et proposez une solution pour éviter ce genre de problème.
+
+```java
+public class Account {
+
+    // Le champ amount est publique ce qui signifique que sa valeur peut être
+    // modifiée en "dur" à tout moment => ceci doit être impossible.
+    // Solution: rendre le champ privé
+    public int amount;
+    private String owner;
+
+    // Le constructeur accepte et ne vérifie aucunement si la valeur de l'amount
+    // est négative => ceci doit être impossible
+    // Solution: faire une vérification à l'intérieur du constructeur de la valeur
+    // passé en argument pour l'amount (if amount < 0) throw new RuntimeException
+    public Account (String owner, int amount) {
+        this.amount = amount;
+        this.owner = owner;
+    }
+    public static Account of (String owner, int amount) {
+        if (amount < 0) {
+            throw new RuntimeException("Amount must be positive");
+        }
+        return new Account (owner, amount);
+    }
+    public int amount() {
+        return this.amount;
+    }
+
+    // Cette fonction peut causer un "overflow" de la valeur de l'amount, dans
+    // cas sa valeur deviendra négative
+    // Solution: avant d'incrémenter la valeur de this.amount par value, faire
+    // une vérification si la somme de ces 2 valeurs est plus petit ou égale
+    // à la valeur maximale d'un entier signé sur 32 bits, sinon jeter une Exception
+    public void deposite (int value) {
+        this.amount += value;
+    }
+    public void withdraw(int value) {
+        if (value <= 0) {
+            throw new RuntimeException("Amount must be positive");
+        } else if (this.amount value < 0) {
+            throw new RuntimeException("operation impossible: capital would have become negative");
+        }
+        this.amount = value;
+    }
+}
+```
-- 
GitLab