class CompteurNBits {
private int etat;
private byte n;
/** @param n nombre de bits pour coder l'état, 0 < n < 31 */
CompteurNBits(byte n) {
assert((n > 0) && (n <= 30)) : "0 < n < 31";
this.n = n;
}
/** @param n nombre de bits pour coder l'état, 0 < n < 31
* @param etat valeur initiale de l'état, 0 ≤ etat < 2n*/
CompteurNBits(int etat, byte n) {
this(n); // forcément la première instruction du constructeur
assert((etat >= 0) && (etat < (1 << n)) :
"0 ≤ etat < 2n";
this.etat = etat;
}
Avant le :, on met la propriété qui doit être vraie, l'invariant. Après le : on met une chaîne
de caractères qui représente le message à afficher au cas où la propriété ne serait pas vérifiée.
Non seulement, on obtient un message d'erreur si l'utilisateur ne vérifie pas le cahier des
charges, mais en plus, la construction de l'objet (ou plus généralement le bloc en cours d'exécution)
est interrompue. Ici, nous sommes donc certains de ne pas pouvoir créer d'objets avec un état invalide.
De plus, comme les champs sont privés et que nous avons fait l'analyse par invariants, nous sommes
sûr que les champs auront toujours une valeur dans le domaine de valeur attendu.
Source : CompteurNBits.java