// MODULE: Heritage1.java // AUTEUR : felipe // OBJET: Solution de l'exercice 1 // COMMENT: J,ai fait un certain nombre de choix dans cet exercice, // vous auriez probablement fait des choix differents, // il s'agit simplement d'une solution possible // ------------------------------------------------------- // la classe mere de la hierarchie qui ne contient que deux niveaux // on defini ici le comportement par defaut d'un compte. // abstract indique qu'on ne peut instancier d'objet de cette classe // ------------------------------------------------------- abstract class Compte { protected String nomClient; protected String numeroCompte; // solde en cents private long solde; // ouverture d'un compte pour le client client, numero de compte compte // avec un montant a l'ouverture montant public Compte(String client, String compte, long montant) { nomClient = client; numeroCompte = compte; solde = montant; } public String getNom() { return nomClient; } // une methode abstraite abstract public void maj(); protected void depot(long montant) { solde += montant; } protected void retrait(long montant) { solde -= montant; } protected long getSolde() {return solde;} // retourne une chaine que les sous-classes vont utiliser public String toString() { return nomClient + " solde: " + (solde/100) + "$CA," + Math.abs(solde %100); } } // ------------------------------------------------------- // un compte simple n'autorise pas le debit // on redefini donc l'operation de retrait // ------------------------------------------------------- final class CompteSimple extends Compte { public CompteSimple(String client, String compte,long montant) { super(client,compte,montant); } public void retrait (long montant) { if (montant < getSolde()) { super.retrait(montant); } else System.err.println("Le solde disponible sur le compte " + numeroCompte + " n'est pas suffisant pour le retrait demande"); } public void maj() { // rien de special a faire ici } public String toString() { return "compte sans credit de " + super.toString(); } } // ------------------------------------------------------- // compte remunere // ------------------------------------------------------- final class CompteRemunere extends Compte { private double tauxInteret; public CompteRemunere(String client, String compte, long montant,double tauxInteret) { super(client,compte,montant); this.tauxInteret = tauxInteret; } public void maj() {ajouteInteret();} private boolean ajouteInteret() { long s; if ((s=getSolde()) > 0) { depot((long) (s * tauxInteret)); return true; } return false; // pas d'interet ajoute } public String toString() { return "compte remunere de " + super.toString(); } } // -------------------------------------------------------- // le comportement de ce compte est ici celui de la classe // mere, on ne le modifie pas. // -------------------------------------------------------- class CompteCredit extends Compte { public CompteCredit(String client, String compte, long montant) { super(client,compte,montant); } public void maj() { // rien a faire } public String toString() { return "compte avec credit de " + super.toString(); } } // -------------------------------------------------------- // une banque possede un nom, un nb de comptes // -------------------------------------------------------- class Banque { private final int MAX_COMPTES = 1000; private Compte comptes []; private int nbComptes; private String nomAgence; // le client existe t-il deja dans les comptes ouverts private int existe(String client) { for (int i=0; i