460 likes | 566 Views
Synthèse sur les éléments de base de la P rogrammation par objets en Java. Fmin110 – 2012-2013. Eléments principaux. Programmation par objets Classes, objets A ttributs, méthodes Héritage Collections ( ArrayList ) Algorithmique de base Types, affectation, lecture/écriture
E N D
Synthèse sur les éléments de base de la Programmation par objets en Java Fmin110 – 2012-2013
Eléments principaux • Programmation par objets • Classes, objets • Attributs, méthodes • Héritage • Collections (ArrayList) • Algorithmique de base • Types, affectation, lecture/écriture • Conditionnelles, répétitives
Eléments principaux • Programmation par objets • Classes, objets • Attributs, méthodes • Héritage • Collections (ArrayList) • Algorithmique de base • Types, affectation, lecture/écriture • Conditionnelles, répétitives
Classe • Traduction d’un concept et de sa description • Exemple de concept CompteBancaire numéro (inchangé après attribution) titulaire (un client) solde créditer d’un montant débiter d’un montant
Classe / attributs CompteBancaire numéro (inchangé après attribution) titulaire (un client) solde public class CompteBancaire { private Client titulaire; privatefinal String numero; private double solde; …….. }
Classe / méthodes CompteBancaire créditer d’un montant débiter d’un montant public class CompteBancaire{ public voidcrediter(double montant) { if (montant >= 0) this.solde+= montant; elseSystem.out.println ("erreur : on credite un montant positif"); } }
Classe / méthodes créditer d’un montant Public méthode utilisable partout void car elle ne retourne rien double montant car on utilise un montant passé lors de l’appel public voidcrediter(double montant) { if (montant >= 0) this.solde+= montant; elseSystem.out.println ("erreur : on credite un montant positif"); }
Classe / méthodes this objet sur lequel s’applique la méthode public class CompteBancaire{ public voidcrediter(double montant) { if (montant >= 0) this.solde+= montant; elseSystem.out.println ("erreur : on credite un montant positif"); } }
Classe / méthodes String toString() méthode à prévoir, retourne une chaîne décrivant l’objet public class CompteBancaire{ public String toString(){ return " numero : "+numero + " solde = "+solde; } }
Classe / constructeur constructeur Méthode spéciale appelée lors de la création public class CompteBancaire{ public CompteBancaire() { this.numero= "numeroInconnu"; this.titulaire= null; this.solde= 0; } }
Classe / constructeur constructeur Méthode spéciale appelée lors de la création public class CompteBancaire{ public CompteBancaire(String numero, double solde) { this.numero= numero; this.crediter(solde); this.titulaire= null; } }
Création d’objets Classe = descripteur Objet = structure conforme à la classe cb1: CompteBancaire numeroInconnu null 0 CompteBancairenuméro titulaire solde cb2: CompteBancaire « OO2XFD » null 400
Création d’objets Dans un programme main Placé dans une classe qui sera exécutée public class ProgrammeComptesBancaires{ public staticvoidmain(String[] arv) { CompteBancairecb1 = new CompteBancaire(); CompteBancairecb2 = new CompteBancaire("OO2XFD",400); } }
Création d’objets Noter : appel du constructeur avec une liste de paramètres conforme à l’un des constructeurs public CompteBancaire() { this.numero = "numeroInconnu"; this.titulaire = null; this.solde = 0; } CompteBancairecb1 = new CompteBancaire();
Création d’objets Noter : appel du constructeur avec une liste de paramètres conforme à l’un des constructeurs public CompteBancaire(String numero, double solde) { this.numero = numero; this.crediter(solde); this.titulaire = null; } CompteBancaire cb2 = new CompteBancaire("OO2XFD",400);
Appel de méthodes sur les objets Dans un programme main public class ProgrammeComptesBancaires{ public staticvoidmain(String[] arv) { CompteBancairecb1 = new CompteBancaire(); CompteBancairecb2 = new CompteBancaire("OO2XFD",400); cb1.crediter(500); // this est cb1 cb2.crediter(300); // this est cb2 } }
Classe / méthodes-accesseurs connaître le solde double getSolde() public class CompteBancaire{ public double getSolde() { return this.solde; } } Remarque : on a déjà des méthodes pour modifier le solde (crediter, débiter)
Classe / méthodes-accesseurs connaître le titulaire Client getTitulaire() modifier le titulaire voidsetTitulaire(Client c) public class CompteBancaire{ public Client getTitulaire() { return this.titulaire; } public voidsetTitulaire(Client titulaire) { this.titulaire= titulaire; } }
Classe / méthodes-accesseurs connaître le numéro String getNumero() public class CompteBancaire{ public String getNumero() { return numero; } } Remarque : on ne peut pas écrire de méthode pour le modifier puisqu’il est final
Eléments principaux • Programmation par objets • Classes, objets • Attributs, méthodes • Héritage (et au passage attributs et méth. de classe) • Collections (ArrayList) • Algorithmique de base • Types, affectation, lecture/écriture • Conditionnelles, répétitives
Classe dérivée / sous-classe • On s’intéresse à une partie des objets • Exemple de sous-classe LivretA (une partie des comptes bancaires) numéro (inchangé après attribution) titulaire (un client) solde interetVerses plafond (le même pour tous les livrets A) créditer d’un montant si < plafond débiter d’un montant
Classe dérivée / sous-classe Définition par différence : un livret A est comme un compte avec des précisions (en orange) LivretAest-unCompteBancaire numéro (inchangé après attribution) titulaire (un client) solde interetVerses plafond créditer d’un montant si < plafond débiter d’un montant
Classe dérivée / sous-classe LivretAest-unCompteBancaire public class LivretAextendsCompteBancaire{ …….. }
Classe dérivée / sous-classe LivretAest-unCompteBancaire numéro (inchangé après attribution) titulaire (un client) Solde interetVerses Plafond (le même pour tous les livrets A) public class LivretAextendsCompteBancaire{ private double interetVerses; public static double plafond; }
Attributs et méthodes de classe Plafond (le même pour tous les livrets A) • c’est un attribut de la classe (static), pas propre à un objet • On le manipule par des méthodes-accesseursstatic public class LivretAextendsCompteBancaire{ public staticdouble plafond; public staticdouble getPlafond() { return LivretA.plafond; } public staticvoidsetPlafond(double plafond) { LivretA.plafond= plafond; } }
Appel du constructeur de la super-classe public class CompteBancaire{ public CompteBancaire(String numero, double solde){ this.numero= numero;this.crediter(solde); this.titulaire= null; }} public class LivretAextendsCompteBancaire{ public LivretA(String numero, double solde, double interetVerses) { super(numero, solde); this.interetVerses= interetVerses; }}
Redéfinition d’une méthode public class CompteBancaire{ public voidcrediter(double montant) { if (montant >= 0) this.solde+= montant; elseSystem.out.println ("montant doit être positif"); }} public class LivretAextendsCompteBancaire{ public voidcrediter(double montant) { if (this.getSolde()+montant <= LivretA.getPlafond()) super.crediter(montant); else System.out.println("erreur : plafond depasse"); }}
Redéfinition d’une méthode public class CompteBancaire{ public String toString(){ return " numero :"+numero+ " solde = "+solde; } } public class LivretAextendsCompteBancaire{ public String toString(){ return super.toString() + " intérêts versés " +this.getInteretVerses(); } }
Création d’objets Dans un programme main Placé dans une classe qui sera exécutée public class ProgrammeComptesBancaires{ public staticvoidmain(String[] arv) { LivretA.setPlafond(15000); CompteBancaire la1 = new LivretA("LA0008",100); LivretA la2 = new LivretA("LA0009",300,10); } }
Création d’objets LivretA numéro titulaire Solde interetVerses plafond la1: LivretA «LA0008 » null 100 0 la2: LivretA « LA0009 » Null 300 10 LivretA.Plafond 15000
Classe et méthodes abstraites Client adresse liste de comptes bancaires String Identification() Particulier nom-prenom String Identification() -- donnée par le nom-prenom Entreprise numero SIRET String Identification() -- donnée par le numero de SIRET
Classe et méthodes abstraites Une classe qui n’a pas d’instances propres Client {abstraite} adresse liste de comptes bancaires String Identification() {abstraite} Une méthode qui n’a pas de corps Particulier nom-prenom String Identification() -- donnée par le nom-prenom Entreprise numero SIRET String Identification() -- donnée par le numero de SIRET
Classe et méthode abstraites public abstract class Client { abstract public String identification(); } public class ProgrammeComptesBancaires{ public staticvoidmain(String[] arv) { Client C = new Client( …); } }
Classe abstraite et sous-classe concrète public abstract class Client { abstract public String identification(); } public class Particulier extendsClient { privateString nom_prenom; public String identification() { return this.getNom_prenom(); } }
Eléments principaux • Programmation par objets • Classes, objets • Attributs, méthodes • Héritage • Collections (ArrayList) • Algorithmique de base • Types, affectation, lecture/écriture • Conditionnelles, répétitives
Associations, collections Client {abstraite} CompteBancaire LivretA Entreprise Particulier Un client a un portefeuille de comptes bancaire Un compte bancaire peut être associé à un client
Portefeuille de comptes Deux attributs se font face dans les deux classes On doit les garder en cohérence public classCompteBancaire{ private Client titulaire; } public abstract class Client { privateArrayList<CompteBancaire> portefeuille; }
ArrayList in a nutshell public abstract class Client { privateArrayList<CompteBancaire> portefeuille; } • ArrayList<T> : une collection extensible d’objets de type T • création portefeuille = new ArrayList<CompteBancaire>() • taille portefeuille.size() • élément au rang i portefeuille.get(i) • ajout d’élément portefeuille.add(cb), avec cb un compte • appartenance portefeuille.contains(cb)
Ajout d’un compte au portefeuille public classCompteBancaire{ private Client titulaire; public Client getTitulaire() { return titulaire; } public voidsetTitulaire(Client titulaire) { this.titulaire= titulaire; } }
Ajout d’un compte au portefeuille public abstract class Client { privateArrayList<CompteBancaire> portefeuille = new ArrayList<CompteBancaire>(); public voidajoute(CompteBancairecompteBancaire) { if (! portefeuille.contains(compteBancaire)) { portefeuille.add(compteBancaire); compteBancaire.setTitulaire(this); } } }
Création d’objets reliés public class ProgrammeComptesBancaires{ public staticvoidmain(String[] arv) { Particulier client1 = new Particulier("rue des oliviers", "montmorrency-emilie"); CompteBancaire la1 = new LivretA("LA0008",100); CompteBancaire cb2 = new CompteBancaire("OO2XFD",400); client1.ajoute(la1); client1.ajoute(cb2); } }
Création d’objets reliés la1: LivretA «LA0008 » 100 0 client1 : LivretA «rue des oliviers » "montmorrency-emilie" :ArrayList<CompteBancaire> 2 cb2: CompteBancaire « OO2XFD » 400
Parcours du portefeuille A noter : la répartition du travail entre les objets toString : de CompteBancaireouLivretA public abstract class Client { public String listePortefeuille() { String resultat = ""; for (CompteBancaire cb : portefeuille) resultat+= cb.toString() + "\n"; return resultat; } }
Parcours du portefeuille public abstract class Client { public double montantDisponible() { double md = 0; for (CompteBancaire cb : portefeuille) md = md + cb.getSolde(); return md; } }
Parcours du portefeuille public abstract class Client { public ArrayList<CompteBancaire> extraireComptesNegatifs() { ArrayList<CompteBancaire> listeCN = new ArrayList<CompteBancaire>(); for (CompteBancaire cb : portefeuille) if (cb.getSolde() < 0) listeCN.add(cb); return listeCN; } }
Conclusion • L’essentiel des notions ont été passées en revue • Ne pas oublier de revoir dans le cours : • D’autres manières de parcourir les ArrayList • La coercition • Bien comprendre la liaison dynamique des méthodes • Bien comprendre la distribution du calcul entre les objets • La récursivité (TD/TP sur les pièces composites)