Corrigé de l'examen de mai 2000

Exercice 1

  1. Il faut ajouter à incremente() les instructions qui endorment le thread courant durant 1 seconde : 
    public void incremente() {

  2.     button.setText(Integer.toString(++cpt));
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
        }
    }
     
  3. Il suffit de poser un verrou sur incremente(), ie de rajouter le mot clé synchronized, le mieux étant derrière public.
  4. Code répondant à la troisième question (et aux précédentes) : Compteur.java

Exercice 2

  1. Cette version répond à la question 1 en utilisant une classe anonyme interne pour l'itérateur : CircularList.java
  2. Cette version répond aux questions 2 et 3 : CircularList.java

Problème

  1. Cette version répond à la question 1 et à la première partie de la question 2 : AutomateDeterministe.java
  2. Cette version répond à la deuxième partie de la question 2 et aux questions 3 et 4 : AutomateDeterministe.java, AutomateNonDeterministeException.java
  3. 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.
  4. 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