L3-CPOO TP3 : exceptions en Java, AGL 1 Exceptions Reprendre l’exemple des suites récurrentes du précédent TP. 1. Introduire les exceptions. Modifier le code de votre programme afin de récupérer les situations d’erreur suivantes : (a) classes SuiteGeom et SuiteArithm : vérifier que le rang transmis en argument (rgN ) est supérieur à 1 dans les 2 méthodes valeurAuRangN et sommeAuRangN. (b) classe SuiteGeom : vérifier que la progression est différente de 1. Important pour le calcul de sommeAuRangN pour ne pas faire une division par 0. La vérification peut être faite – dans la méthode sommeAuRangN ou – au niveau du constructeur Pour ce faire, vous pouvez dans l’ordre (a) utiliser la classe Exception, (b) créer votre propre classe MonException, sous-classe de Exception, (c) mettre votre classe MonException dans un nouveau paquetage paquetException. 2. Compléter votre documentation avec @trows ou @exception. Générer la nouvelle documentation avec javadoc. 3. Question complémentaire. Compléter la classe SuiteArithm avec la méthode int calculRang(int) où l’argument correspond à un certain un et le résultat renvoyé par la méthode est la valeur de l’indice n. Exemple : pour une suite arithmétique s1 de premier terme 1 et de pas 3, s1.calculRang(19) renverra 7 car 19 = u7 pour cette suite. Envisager le cas où l’argument transmis ne correspond pas à un terme un . 2 Calculatrice : utilisation d’une grammaire L’objectif de cet exercice est l’implantation d’une calculatrice. Le système est composé d’une calculatrice capable de prendre en compte les opérateurs binaires classiques (plus, moins, multiplier, diviser), les opérateurs unaires plus et moins. Dans le cadre de ce TP, nous ne considérerons que les constantes. Voici la grammaire d’une expression arithmétique : EXPR → EXPR ’+’ EXPR MUL | EXPR ’-’ EXPR MUL | EXPR MUL EXPR MUL → EXPR MUL ’*’ EXPR UNARY | EXPR MUL ’/’ EXPR UNARY | EXPR UNARY EXPR UNARY → ’+’ EXPR UNARY | ’-’ EXPR UNARY | EXPR CST EXPR CST → ’(’ EXPR ’)’ | constant 1 1. Ecrivez une classe parse expr avec une unique méthode publique ayant le profil suivant : public static EXPR parse(String source). Les autres méthodes seront aussi static, mais private. Dans cette classe, un ensemble de méthodes (une par règle) doit permettre de décripter caractère par caractère votre expression pour produire l’arbre syntaxique correspondant. Remarque : Attention à la récurssivité gauche ! Par exemple, si vous prenez la grammaire tel quel, la régle EXPR commence par EXPR (récurssivité sans fin. . . ). En analysant un peu mieux les régles, vous pouvez transformer la premier régle de la manière suivante : EXPR → EXPR ’+’ EXPR MUL devient EXPR → EXPR MUL { ’+’ EXPR MUL } Les { } indiquent une répétition de 0 à n fois. 2. Mettez en place les classes nécessaires pour réalisez le calcul de l’expression. 3. Finalisez votre programme de tel sorte que l’expression soit passé en paramètre lors de son exécution (exemple : java my calc ‘‘(1 − 2) + (3 + 2 ∗ −5)’’). 3 AGL : diagrammes de classes Environnement Pour ce travail, on vous demande d’utiliser le logiciel jude. La commande pour lancer le logiciel jude sur turing est : java -jar /usr/local/jude/jude-community.jar Pour rendre son appel plus convivial lors des prochains TP, il est souhaitable de créer un alias et de le sauvagarder dans le fichier .bashrc ou autre fichier lancé lors de votre connexion : alias jude=’java -jar /usr/local/jude/jude-community.jar’ Exercice Reprendre l’énoncé des péages autoroutiers (TP1). Construire le diagramme de classes correspondant. Améliorer le modèle UML par rapport à la version programmée en Java afin de réduire les types de base au strict minimum et d’introduire dès que possible de nouvelles classes. Noter la meilleure lisibilité du profil de vos méthodes. 2