/** * La classe Conversion permet de convertir une somme en Euro depuis * une devise référencée et inversement. */ public class Conversion { /* Cette version utilise une nouvelle classe Devise, ce qui améliore la modularité du programme et donc sa réutilisation et sa lisibilité. Les problèmes de la deuxième version sont toujours présents : - utilisation de Error(). Cette solution est améliorable ; - pas de possibilité de rajout d'une devise ; - problème d'efficacité de la méthode rechercheDevise(String) ; Nouveau problème : il n'existe que des devises à taux variable. Il est donc possible de modifier le taux de conversion, alors que ce devrait être interdit. */ private static final String [] NOMS_DEVISES = {"Francs", "Marks", "Pesetas", "Escudos", "Lires"}; private static final double [] TAUX_CHANGE = {6.55957, 1.95583, 166.386, 200.482, 1936.270}; private static final Devise [] DEVISES = new Devise[NOMS_DEVISES.length]; static { for (int i = 0; i < DEVISES.length; ++i) { DEVISES[i] = new Devise(NOMS_DEVISES[i], TAUX_CHANGE[i]); } } private static Devise chercherDevise(String nom) { for (int i = 0; i < DEVISES.length; i++) { if (DEVISES[i].nom().equals(nom)) { return DEVISES[i]; } } return null; } public static Devise devise(String nom) { Devise d = chercherDevise(nom); if (d == null) { throw new Error("Devise " + nom + " inconnue"); } return d; } public static boolean deviseTraitee (String nom) { return (chercherDevise(nom) != null); } public static Devise [] devisesTraitees () { Devise [] copieDevises = new Devise[DEVISES.length]; System.arraycopy(DEVISES, 0, copieDevises, 0, DEVISES.length); return copieDevises; } public static String [] nomsDevisesTraitees () { String [] copieNomsDevises = new String[DEVISES.length]; System.arraycopy(NOMS_DEVISES, 0, copieNomsDevises, 0, NOMS_DEVISES.length); return copieNomsDevises; } public static void main(String [] args) { double valeurAConvertir = Double.valueOf(args[0]).doubleValue(); String nomDevise = args[1]; Devise d = devise(nomDevise); System.out.println(d); System.out.println(d.conversionEnEuro(valeurAConvertir) + " Euros"); } }