Exercice java transformer un programme donné en un programme orienté objet - Banques
Rédigé par GC Team, Publié le 15 Août 2010, Mise à jour le Samedi, 17 Décembre 2022 18:07![](/images/thumb/124/default.png)
Participez au vote ☆☆☆☆☆★★★★★
But:
|
Transformer un programme donné en un programme OO | |||
Thème:
|
Transformation d'un programme non OO en un programme OO, POO de base |
Le fichier Banque1.java contient un programme bancaire qui est modularisé sous forme de méthodes auxiliaires. Transformez-le en programme orienté objet sous le nom de Banque2.java en suivant les étapes suivantes :
- Etudiez le fonctionnement du programme. La banque a 2 clients. Chaque client a un compte privé et un compte d'épargne avec des soldes différents. Le taux d'intérêt d'un compte d'épargne est plus élevé que celui d'un compte privé. Les données de chaque client (nom, ville et soldes) sont affichées avant et après le bouclement des comptes.
- Réfléchissez aux objets que vous aimeriez utiliser dans votre programme et ajoutez les classes correspondantes. Il peut s'agir d'objets concrets (client, maison, billet, etc.) ou d'objets abstraits (compte, relation bancaire, etc.). N'oubliez pas que la modularisation n'est pas une science exacte. Chaque programmeur décide des classes qu'il trouve utiles pour son programme. C'est souvent l'étape la plus difficile d'un projet de programmation.
- Transférez le code concernant les objets dans les classes. Utilisez le mot-clé private pour encapsuler les variables et les méthodes d'instance qui ne seront pas utilisées à l'extérieur de la classe. Chaque méthode (auxiliaire ou d'instance) devrait être courte et sans trop d'instructions détaillées. Les identificateurs (noms des variables et des méthodes) devraient être parlants.
Exemple d'exécution du programme:
Données avant le bouclement des comptes:
Client Pedro de Genève
Compte privé: 1000.0 francs
Compte d'épargne: 2000.0 francs
Client Alexandra de Lausanne
Compte privé: 3000.0 francs
Compte d'épargne: 4000.0 francs
Données après le bouclement des comptes:
Client Pedro de Genève
Compte privé: 1010.0 francs
Compte d'épargne: 2040.0 francs
Client Alexandra de Lausanne
Compte privé: 3030.0 francs
Compte d'épargne: 4080.0 francs
Code donné:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
class Banque1 { public static void main(String args[]) { // Données pour tous les comptes privés (taux d'intérêt): double taux1 = 0.01; // Données pour tous les comptes d'épargne (taux d'intérêt): double taux2 = 0.02; // Données pour le premier client (nom et ville): String nom1 = "Pedro"; String ville1 = "Genève"; // Données pour le compte privé du premier client (solde): double solde1PremierClient = 1000.0; // Données pour le compte d'épargne du premier client (solde): double solde2PremierClient = 2000.0; // Données pour le deuxième client (nom et ville): String nom2 = "Alexandra"; String ville2 = "Lausanne"; // Données pour le compte privé du deuxième client (solde): double solde1DeuxiemeClient = 3000.0; // Données pour le compte d'épargne du deuxième client (solde): double solde2DeuxiemeClient = 4000.0; // Afficher les données du premier client: afficherClient(nom1, ville1, solde1PremierClient, solde2PremierClient); // Afficher les données du deuxième client: afficherClient(nom2, ville2, solde1DeuxiemeClient, solde2DeuxiemeClient); // Bouclement du compte privé du premier client: solde1PremierClient = bouclerCompte(solde1PremierClient, taux1); // Bouclement du compte d'épargne du premier client: solde2PremierClient = bouclerCompte(solde2PremierClient, taux2); // Bouclement du compte privé du deuxième client: solde1DeuxiemeClient = bouclerCompte(solde1DeuxiemeClient, taux1); // Bouclement du compte d'épargne du deuxième client: solde2DeuxiemeClient = bouclerCompte(solde2DeuxiemeClient, taux2); // Afficher les données du premier client: afficherClient(nom1, ville1, solde1PremierClient, solde2PremierClient); // Afficher les données du deuxième client: afficherClient(nom2, ville2, solde1DeuxiemeClient, solde2DeuxiemeClient); } static void afficherClient(String nom, String ville, double solde1, double solde2) { // Cette méthode affiche les données du client * System.out.println("Client " + nom + " de " + ville); System.out.println(" Compte privé: " + solde1 + " francs"); System.out.println(" Compte d'épargne: " + solde2 + " francs"); } static double bouclerCompte(double solde, double taux) { // Cette méthode ajoute les intérêts au solde */ double interets = taux * solde; double nouveauSolde = solde + interets; return nouveauSolde; } } |
Banque avec des clientes (Niveau 1)
Vous avez bien noté que l'affichage du programme Banque1 ne fait pas de différence entre les clientes et les clients. Ceci est facile à corriger dans la version orientée objets du programme, par exemple en ajoutant une variable d'instance booléenne masculin à la classe Client (si vous en avez une) et en testant sa valeur dans la méthode d'affichage. Modifiez votre programme, par exemple sous le nom de Banque3, pour qu'il affiche "cliente" au lieu de "client" comme suit:
Données avant le bouclement des comptes:
Client Pedro de Genève
Compte privé: 1000.0 francs
Compte d'épargne: 2000.0 francs
Cliente Alexandra de Lausanne
Compte privé: 3000.0 francs
Compte d'épargne: 4000.0 francs
Données après le bouclement des comptes:
Client Pedro de Genève
Compte privé: 1010.0 francs
Compte d'épargne: 2040.0 francs
Cliente Alexandra de Lausanne
Compte privé: 3030.0 francs
Compte d'épargne: 4080.0 francs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
class Banque2 { public static void main(String[] args) { // Variables locales pour les taux d'intérêts (afin d'éviter de // répéter les mêmes chiffres pour chaque client): double taux1 = 0.01; double taux2 = 0.02; // Construction des deux clients: Client c1 = new Client("Pedro", "Genève", taux1, 1000.0, taux2, 2000.0); Client c2 = new Client("Alexandra", "Lausanne", taux1, 3000.0, taux2, 4000.0); System.out.println("Données avant le bouclement des comptes:"); c1.afficher(); c2.afficher(); // Bouclement des comptes des deux clients: c1.boucler(); c2.boucler(); System.out.println("Données après le bouclement des comptes:"); c1.afficher(); c2.afficher(); } } class Client { private String nom; private String ville; private Compte cpt1, cpt2; public Client(String nom, String ville, double taux1, double solde1, double taux2, double solde2) { this.nom = nom; this.ville = ville; // Construction d'un compte privé: cpt1 = new Compte(taux1, solde1); // Construction d'un compte d'épargne: cpt2 = new Compte(taux2, solde2); } public void afficher() { // Cette méthode affiche les données du client System.out.println(" Client " + nom + " de " + ville); System.out.println(" Compte privé: " + cpt1.getSolde() + " francs"); System.out.println(" Compte d'épargne: " + cpt2.getSolde() + " francs"); } public void boucler() { // Cette méthode boucle les deux comptes du client cpt1.boucler(); cpt2.boucler(); } } class Compte { private double taux; private double solde; public Compte(double taux, double solde) { this.taux = taux; this.solde = solde; } public double getSolde() { return solde; } public void boucler() { // Cette méthode ajoute les intérêts au solde double interets = taux * solde; solde = solde + interets; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
class Banque3 { public static void main(String[] args) { // ... comme avant // Construction des deux clients, notez l'argument booléen: Client c1 = new Client("Pedro", "Genève", taux1, 1000.0, taux2, 2000.0, true); // Nouveau Client c2 = new Client("Alexandra", "Lausanne", taux1, 3000.0, taux2, 4000.0, false); // Nouveau // ... comme avant } } class Client { private String nom; private String ville; private Compte cpt1, cpt2; private boolean masculin; // Nouvelle variable d'instance // Méthode constructeur, notez le paramètre booléen: public Client(String nom, String ville, double taux1, double solde1, double taux2, double solde2, boolean masculin) { // Nouveau this.nom = nom; this.ville = ville; cpt1 = new Compte(taux1, solde1); cpt2 = new Compte(taux2, solde2); this.masculin = masculin; // Nouveau } public void afficher() { if (masculin) // Nouvelle instruction if..else System.out.print(" Client "); else System.out.print(" Cliente "); System.out.println(nom + " de " + ville); System.out.println(" Compte privé: " + cpt1.getSolde() + " francs"); System.out.println(" Compte d'épargne: " + cpt2.getSolde() + " francs"); } // ... comme avant } class Compte { // ... comme avant } |
class Banque2 {
public static void main(String[] args) {
// Variables locales pour les taux d'intérêts (afin d'éviter de
// répéter les mêmes chiffres pour chaque client):
double taux1 = 0.01;
double taux2 = 0.02;
// Construction des deux clients:
Client c1 = new Client("Pedro", "Genève", taux1, 1000.0, taux2, 2000.0);
Client c2 = new Client("Alexandra", "Lausanne", taux1, 3000.0, taux2, 4000.0);
System.out.println("Données avant le bouclement des comptes:");
c1.afficher();
c2.afficher();
// Bouclement des comptes des deux clients:
c1.boucler();
c2.boucler();
System.out.println("Données après le bouclement des comptes:");
c1.afficher();
c2.afficher();
}
}
class Client {
private String nom;
private String ville;
private Compte cpt1, cpt2;
public Client(String nom, String ville, double taux1, double solde1,
double taux2, double solde2) {
this.nom = nom;
this.ville = ville;
// Construction d'un compte privé:
cpt1 = new Compte(taux1, solde1);
// Construction d'un compte d'épargne:
cpt2 = new Compte(taux2, solde2);
}
public void afficher() {
// Cette méthode affiche les données du client
System.out.println(" Client " + nom + " de " + ville);
System.out.println(" Compte privé: " +
cpt1.getSolde() + " francs");
System.out.println(" Compte d'épargne: " +
cpt2.getSolde() + " francs");
}
public void boucler() {
// Cette méthode boucle les deux comptes du client
cpt1.boucler();
cpt2.boucler();
}
}
class Compte {
private double taux;
private double solde;
public Compte(double taux, double solde) {
this.taux = taux;
this.solde = solde;
}
public double getSolde() {
return solde;
}
public void boucler() {
// Cette méthode ajoute les intérêts au solde
double interets = taux * solde;
solde = solde + interets;
}
}