Skip to content
Snippets Groups Projects
Commit e0df49de authored by iliya's avatar iliya
Browse files

feat: ex1 serie2 finished

parent 07b53bfa
No related branches found
No related tags found
No related merge requests found
---
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;
}
}
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment