| ... | @@ -176,3 +176,41 @@ public StackOfNonNegativeIntegers(int capacity) throws UnexpectedCapacityExcepti |
... | @@ -176,3 +176,41 @@ public StackOfNonNegativeIntegers(int capacity) throws UnexpectedCapacityExcepti |
|
|
this.elements = new int[this.capacity];
|
|
this.elements = new int[this.capacity];
|
|
|
}
|
|
}
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
# Propagation d’exceptions
|
|
|
|
|
|
|
|
:book: Dans une méthode où des appels de méthode peuvent se traduire par des remontées d’exceptions et **où aucun traitement d’erreur n’est prévu**, il est obligatoire de **re-signaler les exceptions**
|
|
|
|
Si une des exceptions signalées survient, l’exécution de la méthode s’arrête immédiatement et l’exception remonte au code appelant (comme dans le cas d'un permier soulèvement d'exception)
|
|
|
|
|
|
|
|
Par exemple, le constructeur de la classe `StackOfNonNegativeIntegersWithSum` (qui hérite de `StackOfNonNegativeIntegers`, disponible sur [ce dépôt](https://gitlab.iut-valence.fr/INFO-BUT/S2/info-but-r2-01/stacks-inheritance-complete-version)) peut être écrit de la manière suivante :
|
|
|
|
|
|
|
|
```java
|
|
|
|
/**
|
|
|
|
* Creates a new stack of non negative integers, with given capacity,
|
|
|
|
* initially empty.
|
|
|
|
* @throws UnexpectedCapacityException if capacity is <= 0
|
|
|
|
*/
|
|
|
|
public StackOfNonNegativeIntegersWithSum(int capacity) throws UnexpectedCapacityException {
|
|
|
|
|
|
|
|
super(capacity);
|
|
|
|
|
|
|
|
this.sum = 0;
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
:bulb: Ici, le super-constructeur (défini dans la classe `StackOfNonNegativeIntegers`) signale une possible remontée de l'exception `UnexpectedCapacityException`. Le constructeur de la classe `StackOfNonNegativeIntegersWithSum` ne teste pas la validité du paramètre (ceci est déjà fait dans le super-constructeur) mais en cas de remontée d'exception ne poursuit pas la création de l'objet et propage l'exception à l'appelant. L'instruction `this.sum = 0;` n'est exécutée que dans le cas où l'appel au super-constructeur ne soulève pas d'exception.
|
|
|
|
|
|
|
|
L'approche est identique pour la méthode `push` de la classe `StackOfNonNegativeIntegersWithSum` :
|
|
|
|
|
|
|
|
```java
|
|
|
|
/**
|
|
|
|
* @see fr.iutvalence.info.dut.m2103.stacks.StackOfNonNegativeIntegers#push(int)
|
|
|
|
*/
|
|
|
|
public void push(int element) throws StackIsFullException, NegativeElementException {
|
|
|
|
|
|
|
|
super.push(element);
|
|
|
|
|
|
|
|
this.sum += element;
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|