package conversion; import java.util.ArrayList; import java.util.List; /** * La classe Conversion permet de convertir une somme en Euro. * * Version 5 */ public class Conversion { /* * Cette version utilise les exceptions pour mieux traiter les cas * exceptionnels. * * Elle utilise un paquetage pour une meilleure encapsulation. * * Certains problèmes de la version précédente sont toujours présents : * * problème d'efficacité de la méthode rechercheDevise(String) ; * * il n'existe que des devises à taux variable. Il est donc possible de * modifier le taux de conversion, alors que ce devrait être parfois * interdit. */ private static final List DEVISES = new ArrayList(); static { String[] noms = { "Franc", "Mark", "Dollard", "Euro" }; double[] taux = { 6.55957, 1.95583, 1.2713, 1. }; for (int i = 0; i < noms.length; ++i) { try { ajouterDevise(noms[i], taux[i]); } catch (DeviseExistanteException e) { throw new Error(e.getMessage()); } } } private static Devise chercherDevise(String nom) { for (Devise d : DEVISES) { if (d.nom().equals(nom)) { return d; } } return null; } public static Devise devise(String nom) throws DeviseInconnueException { Devise d = chercherDevise(nom); if (d == null) { throw new DeviseInconnueException(nom); } return d; } public static boolean deviseTraitee(String nom) { return (chercherDevise(nom) != null); } public static void ajouterDevise(String nom, double tauxDeChange) throws DeviseExistanteException { Devise d = chercherDevise(nom); if (d == null) DEVISES.add(new Devise(nom, tauxDeChange)); else throw new DeviseExistanteException(d); } public static Devise[] devisesTraitees() { return DEVISES.toArray(new Devise[DEVISES.size()]); } }