Corrigé de l'examen de mai 2000
Exercice 1
-
Il faut ajouter à incremente() les instructions qui endorment
le thread courant durant 1 seconde :
public void incremente() {
button.setText(Integer.toString(++cpt));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
-
Il suffit de poser un verrou sur incremente(), ie de rajouter
le mot clé synchronized, le mieux étant derrière
public.
-
Code répondant à la troisième question (et aux précédentes)
: Compteur.java
Exercice 2
-
Cette version répond à la question 1 en utilisant une classe
anonyme interne pour l'itérateur : CircularList.java
-
Cette version répond aux questions 2 et 3 : CircularList.java
Problème
-
Cette version répond à la question 1 et à la première
partie de la question 2 : AutomateDeterministe.java
-
Cette version répond à la deuxième partie de la question
2 et aux questions 3 et 4 : AutomateDeterministe.java,
AutomateNonDeterministeException.java
-
Pour faciliter l'utilisation indifférenciée des deux classes
d'automates, il faut proposer une interface qui unifie les méthodes
communes. Cette interface est implémentée dans Automate.java.
De même, pour éviter la duplication de code, il convient d'utiliser
une classe abstraite qui factorise le code commun. Cette classe est implémentée
dans AutomateAbstrait.java.
On notera que la version de AutomateAbstrait proposée utilise les
"Template Methods" pour factoriser le code du constructeur.
-
Voici en utilisant les classes définies au point ci-dessus la nouvelle
version de AutomateDeterministe.java
(pas demandée) et la classe AutomateNonDeterministe.java