Exercice Java transformer un programme java donné en un programme orienté objet-taxes
Le fichier Taxes1.java contient un programme qui aide une entreprise à stocker des données sur sa flotte de voitures et de calculer la taxe annuelle totale à payer pour la flotte. Le programme est modularisé sous forme de méthodes auxiliaires. Copiez le programme sous le nom de Taxes2.java et transformez-le en programme orienté objets. Dans ce but, vous pouvez vous inspirer de l’exemple vu en cours. Suivez les étapes suivantes:
- Etudiez le fonctionnement du programme. L’entreprise a une flotte de voitures composée d’une Toyota de cylindrée 1598 et d’une BMW de cylindrée 2756 dont les données sont stockées dans des variables de type int et String. La méthode auxiliaire afficherVoiture() aide la méthode main à afficher les données sur la flotte. Les 3 méthodes auxiliaires afficherTaxeFlotte(),
calculerTaxeFlotte() et calculerTaxeVoiture() s’occupent de calculer et d’afficher la taxe à payer pour la flotte. La taxe varie entre 300 et 700 francs par voiture et dépend de sa cylindrée. - Ajoutez une classe Voiture qui regroupera tout ce qui concerne un objet de type voiture, comme par exemple les variables contenant la marque et la cylindrée, la méthode pour afficher les données d’une voiture et la méthode pour calculer la taxe d’une voiture. Les méthodes d’instance dans le nouveau programme auront typiquement moins de paramètres que les méthodes auxiliaires correspondantes dans l’ancien programme. N’oubliez pas qu’une méthode d’instance n’a pas de mot-clé static. Ajoutez une méthode constructeur à la classe et le mot-clé private pour les variables et les méthodes d’instance qui ne seront pas utilisées à l’extérieur de la classe.
- Ajoutez une classe Flotte qui regroupera tout ce qui concerne un objet de type flotte, e.g. les variables pour les voitures, la méthode pour afficher les données d’une flotte et la méthode pour calculer la taxe d’une flotte. Ces méthodes appelleront typiquement les méthodes de la classe Voiture.
- Modifiez la méthode main. Idéalement, elle n’aura que 3 instructions: construction d’un objet de type Flotte, appel à une méthode d’instance pour afficher les informations sur la flotte et appel à une méthode d’instance pour calculer et afficher la taxe totale de la flotte.
Exemple d’exécution du programme :
Vous avez une Toyota de cylindrée 1598 Vous avez une BMW de cylindrée 2756 Taxe totale à payer: 1000.0 francs
Code donné :
/* Ce programme est modularisé sous forme de méthodes auxiliaires. Il vous est demandé de le transformer en un programme orienté objets. */ class Taxes1 { public static void main(String[] args) { // Données pour la première voiture (marque et cylindrée): String marque1 = "Toyota"; int cylindree1 = 1598; // Données pour la deuxième voiture (marque et cylindrée): String marque2 = "BMW"; int cylindree2 = 2756; // Affichage de la flotte: afficherVoiture(marque1, cylindree1); afficherVoiture(marque2, cylindree2); // Calcul et affichage de la totalité des taxes: afficherTaxeFlotte(cylindree1, cylindree2); } static void afficherVoiture(String marque, int cylindree) { // Cette méthode affiche les données d'une voiture * System.out.println("Vous avez une " + marque + " de cylindrée " + cylindree); } static void afficherTaxeFlotte(double cylindree1, double cylindree2) { // Cette méthode calcule et affiche la taxe totale des deux // voitures double taxe = calculerTaxeFlotte(cylindree1, cylindree2); System.out.println("Taxe totale à payer: " + taxe + " francs"); } static double calculerTaxeFlotte(double cylindree1, double cylindree2) { // Cette méthode calcule la taxe totale pour deux voitures double taxe1 = calculerTaxeVoiture(cylindree1); double taxe2 = calculerTaxeVoiture(cylindree2); return (taxe1 + taxe2); } static double calculerTaxeVoiture(double cylindree) { // Cette méthode retourne la taxe à payer pour une voiture de la // cylindrée indiquée * double taxe; if (cylindree <= 1600) taxe = 300.0; else if (cylindree <= 2300) taxe = 500.0; else taxe = 700.0; return taxe; } }
La correction exercice Java (voir page 2 en bas)