Vous êtes sur la page 1sur 3

ISIMM ANNEE UNIVERSITAIRE : 2020-2021

SECTION : MP GL1 ENSEIGNANTS : ASMA MANSOUR

MATIERE : CONCEPTION PAR CONTRAT

TD : JML

Exercice 1

I- On définit la classe Compteur suivante :

class Compteur {

/**
* <pre><jml>
*
* private invariant val >= 0 ;
*
* private constraint val >= \old(val) ;
*
* </jml></pre>
*/

// Valeur du compteur
private int val ;

...
}

1- Expliquer les différentes assertions déclarées dans la classe


2- Quel rôle joue la condition posée ?
II- On peut spécifier deux méthodes dans la classe Compteur :

 la méthode int getVal() retourne la valeur courante du compteur ;


 la méthode void incr(int n) throws Debordement permet
d'incrémenter le compteur de n unités. Cette méthode lève
l'exception Debordement si la nouvelle valeur est trop grande pour
être stockée dans un entier de type int.

On définit l'exception Debordement :

1
/**
* Une exception levée en cas de débordement d'un compteur.
*/

public class Debordement extends Exception { }

Le code de la méthode getVal() est le suivant :

/**
* Retourne la valeur de ce compteur.
*/

public /*@ pure */ int getVal() {


return val ;
}

1- Déterminer les spécifications JML pour la méthode :


void incr(int n) throws Debordement
2- En donnant la méthode void incr(int n) throws Debordement comme suit , comment
peut-on ajouter une simple assertion dans le corps de cette opération sur l’attribut val ?
public void incr(int n) throws Debordement {
int nouvelle_valeur = val + n ;
if (nouvelle_valeur >= 0) {
val = nouvelle_valeur ;
} else {
throw new Debordement() ;
}
}

Exercice 2

On cherche à spécifier les listes d'entiers. Pour cela, on définit une interface Liste qui contient
les opérations à spécifier comme suit :
/**
* Interface pour des listes d'entiers.
*/

public interface Liste {

/**
* Retourne vrai ssi la liste est vide.
*/

boolean estVide() ;

/**
* Retourne la taille de la liste.

int taille() ;

2
/**
* Retourne le i-ème élément de la liste.
int element(int i) ;

/**
* Ajoute l'entier val en tête de liste.

void add(int val) ;

/**
* Retourne vrai ssi la liste contient l'élément val.
*

public boolean contient(int val) ;

Ajouter les spécifications JML nécessaires pour chaque méthode définie

Vous aimerez peut-être aussi