Série 13:
Mini-projet 2 (Continuation) + Exceptions

Buts

Cette série propose quelques exercices sur la gestion des exceptions (à laquelle nous vous proposons de dédier une heure de temps). L'essentiel de la série est autrement dédiée à continuer à progresser sur la réalisation du second mini-projet.


Exercice 1: MOOC (cours en ligne) (MOOC, Niveau 1)

Cette semaine vous devez visionner les vidéos de la semaine 6 du MOOC. Pour bien assimiler ce contenu, il est recommandé de faire les quiz des mêmes semaines: Quiz «Exceptions».


Exercice 2: Compile .. ou pas (exceptions, Niveau 1)

Ajoutez au programme fourni des commentaires répondant aux questions posées.

Quelques incursions dans la documentation de l'API de Java vont être nécessaire pour répondre aux questions.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
class Exemple {
    
    /*Expliquer pourquoi ce code ne compile pas
    */
    public void m1() {
        foo();
    }
    
    public int foo() throws Exception {
        throw new Exception();
    }
    
    /*Expliquer pourquoi ce code n'est pas considéré comme bon
    */
    public void m2() {
        try {
            //do stuff...
        } catch (Exception e) {
            
        }
    }
    
    /*Expliquer pourquoi ce code ne compile pas
    */
    public void m3() {
        try {
            //do stuff...
        } catch (Exception e) {
            
        } catch (NullPointerException e) {
            
        }
    }
    
    /*Expliquer pourquoi ce code ne compile pas
    */
    public void m4() {
        throw new CustomCheckedException();
    }
    
    private class CustomCheckedException extends Exception {
        
        private static final long serialVersionUID = -7944813576443065516L;

        public CustomCheckedException() {
            //nothing
        }
        
    }
    
    /*Expliquer pourquoi ce code ne compile pas
    */
    public int m5() {
        int age;
        String s = "24";
        try {
            age = getAccessCode();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return age;
    }
    
    public int getAccessCode() throws IllegalAccessException {
        throw new IllegalAccessException();
    }
    
    /*Expliquer pourquoi ce code COMPILE
    */
    public void m6() {
        bar();
    }
    
    public int bar() {
        throw new RuntimeException();
    }
    
}



Exercice 3: Bon projet (exceptions, Niveau 1)

Le programme fourni ne fait aucune vérification sur l'intégrité des données servant à la création d'un objet de type Project.

Modifiez-le de sorte à :

les nom, sujet et durée seront redemandés à l'utilisateur tant qu'ils sont introduits de façon incorrecte.

Vous introduirez pour cela deux classes d'exceptions personalisées WrongDurationException et NameTooLongException

Une String, strNumber, correspondant à un entier peut être transformée en int par l'appel à la méthode statique parseInt de la classe Integer( Integer.parseInt(strNumber).

Si strNumber ne corresponds pas à un int une RunTimeException de type NumberFormatException sera lancée.

Le programme sera proprement modularisé.


Exercice 4: Censure (exceptions, Niveau 1)

Pour cet exercice munissez-vous d'une feuille de papier et d'un crayon.

Soit le programme suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Note : le  message de mise en garde de Eclipse:
// the serializable class NietException does not declare a static
// final serialVersionUID field of type long
// peut etre neglig'e.

class Censure {
    
    public static void main(String[] args) {
        Site s1 = new Site("cowww.epfl.ch/coursOOP/", "Prof d'info");
        Site s2 = new Site("www.PCcrackers.com", "Hackers Inc.");
        try {
            System.out.println("Trying " + s1.getAddress());
            s1.connect();
            System.out.println("Argh !!");
            try {
                System.out.println("Trying " + s2.getAddress());
                s2.connect();
                System.out.println("Woaw !");
            } catch (NietException e) {
                System.out.println(e.getMessage());
                System.out.println("Do you really want to be here ?");
                throw e;
            } finally {
                System.out.println("Finally !");
            }
            System.out.println("Happy end!");
        } catch (NietException e) {
            System.out.println(e.getMessage());
            System.out.println("Is Big brother watching you ?");
        }
        System.out.println("Stop surfing !");
    }
}

class Site {

    private String address;
    private String source;
    
    public Site(String address, String source) {
        this.address = address;
        this.source = source;
    }
    
    public void connect() throws NietException {
        if (source.equals("Hackers Inc.")) {
            throw new NietException();
        } else {
            System.out.println("Connected to " + address);
        }
    }
    
    public String getAddress() {
        return address;
    }
}

class NietException extends Exception {

    public NietException() {}

    @Override
    public String getMessage() {
        return "Illegal move";
    }
}

Indiquez sans exécuter le programme ce qu'il va afficher.

Vérifiez ensuite votre réponse en exécutant le programme.



Exercice 5: Attrapez-les toutes... (exceptions, Niveau 2)

Pour cet exercice, incorporez au projet Eclipse créé pour cet exercice, les fichiers fournis UtilsMatrix.java et MatrixTest.java, dans le dossier src/

La classe fournie UtilsMatrix vous fait revisiter le thème de la multiplication de matrices. Modifiez-la de sorte à ce qu'il lance une exception de type CustomException en toute situation d'erreur.

certaines des méthodes utilisées lancent une InputMismatchException. Ces exceptions devront êtres interceptée et remplacées par des CustomException.

Test unitaires

Le fichier fourni MatrixTest.java contient des tests unitaires. Il permet de tester que votre solution fontionne bien dans différents cas de figures. Il n'est pas nécessaire d'en comprendre le fonctionnement (vous en saurez plus sur les tests unitaires au semestre prochain).

Commencez par configurer votre projet pour les tests unitaires.

Pour Eclipse : clic-droit sur le projet -> Build Path -> Add librairies... et sélectionner junit puis JUnit4 dans la liste déroulante.

Pour lancer le test : clic-droit sur MatrixTest > Run as > Junit test

Si vous avez bien anticipé toutes les situations à gérer par des exceptions, il y aura 6 tests sur 6 réussis (ce sera indiqué dans Eclipse). Sinon, ceux qui auront échoué vous mettront sur la voie de ce qui manque.


Dernière mise à jour: 25/11/2025  (Revision: 1.2)