Le type des variables permet de choisir un domaine de valeur adapté. On a vu cependant que le
type seul ne permet pas d'être aussi précis que l'on souhaiterait (e.g. compteur 5 bits).
L'analyse par invariants permet de s'assurer que si le domaine de valeur est respecté à l'initialisation
des données, il sera toujours respecté par les méthodes réalisées.
Un mécanisme supplémentaire est nécessaire pour garantir que les valeurs entrées par l'utilisateur
respecte le domaine de valeur attendu et correspondent bien au cahier des charges. Il est
inconcevable d'envisager tous les cas dans lesquels un utilisateur hostile (qui essaie de trouver les
failles dans le code) ou distrait (qui a mal lu le cahier des charges) peut se placer. On peut
détecter et refuser les cas où les données d'entrée ne satisfont pas le cahier des charges, il faut
alors donner des messages d'erreur précis, le plus tôt possible.
Le mécanisme d'exception de Java permet en partie de traiter ces cas.
Depuis le JDK 1.4, un mécanisme plus souple a été mis en place, c'est le mécanisme
d'assertion.
Nous allons mettre en place ces deux mécanismes pour vérifier les deux invariants rencontrés dans la
classe CompteurNBits :
0 < n < 31 et 0 ≤ etat < 2n
Ces deux invariants concernent, ici, uniquement des champs initialisés par le constructeur.