Manipulation 3

Pour cette séance il faut partir du code développé durant le tp1.

Visibilités

Pour chaque classe, méthode et attributs du tp1 déterminer quelles sont les visibilités envisageables. Effectuer les modifications adéquates sur le code du tp1. Noter que pour les attributs seules les visibilités private et protected vous sont autorisées. Le corrigé de cette manipulation est disponible ici

Réorganisation en packages

La première étape est de créer les packages suivants:

  • le package repere dans lequel vous placerez les classes Axe, Couleur, ElementRepere, EnsembleElementRepere, ElementAvecNom
  • le package formes, situé dans le package repere dans lequel vous placerez les classes Segment et Point
  • le package test dans lequel vous placerez la classe Tests

Bien entendu il faut ajouter les déclarations de packages ainsi que les imports nécessaires au sein des classes. Il faut aussi trouver la commande qui permet de compiler le projet et arriver à lancer le programme Tests.

Voici les déclarations et import qu’il faut utiliser:

  • pour le package repere la déclaration est package repere et aucun import est nécessaire
  • pour le package formes la déclaration est package repere.formes et il faut utiliser l’import import repere.*
  • pour le package test la déclaration est package test et il faut utiliser les imports import repere.* et import repere.formes.*

Pour compiler la commande est javac test/Tests.java. Pour lancer les tests, la commande est: java test.Tests.

Gestion des exceptions

Nous allons rajouter des exceptions à notre programme. Nous allons vérifier que personne ne puisse créer un axe avec une taille négative. Pour cela nous allons donc créer une exception TailleInvalide qui doit être déclanchée par toutes les méthodes qui peuvent changer la taille.

Création de l’exception

Nous allons tout d’abord rendre optionnelle la gestion de l’exception en déclarant notre exception sous classe de RuntimeException. En outre l’exception doit pouvoir retenir la taille éronnée demandée par l’utilisateur, et comporter un message qui explique l’erreur de manière intuitive. Commencez par définir cette exception.

public class TailleInvalide extends RuntimeException {

	private int mauvaiseTaille;

	public TailleInvalide(int mauvaiseTaille) {
		super("La taille de l'axe ne peut être négative. Taille fournie: " + mauvaiseTaille);
		this.mauvaiseTaille = mauvaiseTaille;
	}

}

Modification du code de Axe

Modifiez maintenant le code du tp 1 pour que toutes les méthodes qui peuvent changer la taille d’un axe lancent l’exception en cas de taille éronée. Faîtes une nouvelle classe de test dans le package test qui crée un axe avec une taille négative. Lancez le programme. Que se passe t’il?

Le programme soulève une erreur d’exécution. Le message de l’exception passé au super constructeur de l’exception s’affiche.

Modification du code client

Modifiez votre exception pour que maintenant TailleInvalide soit sous-classe de Exception. Maintenant créez deux classes de test qui crée un axe invalide et qui permettent

  1. de gérer l’exception (en affichant le message d’erreur, puis en créant dans ce cas un axe par défaut, et finalement en affichant l’axe)
  2. de relancer l’exception

Version qui gère l’exception :

public class TestGestionException {

	public static void main(String[] args) {
		Axe x;
		try {
			x = new Axe(-2);
		} catch (TailleInvalide e) {
			System.out.println(e);
			x = new Axe();
		} finally {
			System.out.println(x.description());
		}
	}

}

Version qui propage l’exception :

public class TestGestionException {

	public static void main(String[] args) throws TailleInvalide {
		Axe	x = new Axe(-2);
	}

}